@nextgis/ngw-map 1.11.8 → 1.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- /** Bundle of @nextgis/ngw-map; version: 1.11.8; author: NextGIS */
1
+ /** Bundle of @nextgis/ngw-map; version: 1.12.0; author: NextGIS */
2
2
  var NgwMap = (function (exports) {
3
3
  'use strict';
4
4
 
@@ -2681,6 +2681,9 @@ var NgwMap = (function (exports) {
2681
2681
  _c.sent();
2682
2682
  _c.label = 11;
2683
2683
  case 11:
2684
+ if (options.onAdded) {
2685
+ options.onAdded(_adapter);
2686
+ }
2684
2687
  this._emitLayerEvent('layer:add', layerId, _adapter);
2685
2688
  return [2 /*return*/, _adapter];
2686
2689
  case 12: return [2 /*return*/, Promise.reject('No adapter')];
@@ -2821,8 +2824,15 @@ var NgwMap = (function (exports) {
2821
2824
  WebMapLayers.prototype.addTileLayer = function (url, options) {
2822
2825
  return this.addLayer('TILE', __assign(__assign({}, options), { url: url }));
2823
2826
  };
2824
- /** Shortcut for {@link WebMapLayers.addLayer} to create TileLayer adapter */
2825
- WebMapLayers.prototype.addImageLayer = function (url, options) {
2827
+ WebMapLayers.prototype.addImageLayer = function (urlOrOptions, options) {
2828
+ var url;
2829
+ if (typeof urlOrOptions === 'string') {
2830
+ url = urlOrOptions;
2831
+ }
2832
+ else {
2833
+ url = urlOrOptions.url;
2834
+ options = urlOrOptions;
2835
+ }
2826
2836
  return this.addLayer('IMAGE', __assign(__assign({}, options), { url: url }));
2827
2837
  };
2828
2838
  /**
@@ -5167,10 +5177,10 @@ var NgwMap = (function (exports) {
5167
5177
  function createGeoJsonFeature(item) {
5168
5178
  var geometry = item.geom;
5169
5179
  var feature = {
5180
+ geometry: geometry,
5170
5181
  id: item.id,
5171
5182
  type: 'Feature',
5172
5183
  properties: item.fields,
5173
- geometry: geometry,
5174
5184
  };
5175
5185
  return feature;
5176
5186
  }
@@ -5193,68 +5203,85 @@ var NgwMap = (function (exports) {
5193
5203
  }
5194
5204
  // NGW REST API is not able to filtering by combined queries
5195
5205
  // therefore the filter is divided into several requests
5196
- function createFeatureFieldFilterQueries(opt, _queries, _parentAllParams) {
5206
+ function createFeatureFieldFilterQueries(opt) {
5207
+ var queries = getQueries(opt);
5208
+ return CancelablePromise.all(queries).then(function (itemsParts) {
5209
+ // this list of ids used for optimization
5210
+ var ids = [];
5211
+ var items = [];
5212
+ for (var _i = 0, itemsParts_1 = itemsParts; _i < itemsParts_1.length; _i++) {
5213
+ var part = itemsParts_1[_i];
5214
+ for (var _a = 0, part_1 = part; _a < part_1.length; _a++) {
5215
+ var item = part_1[_a];
5216
+ if (!ids.includes(item.id)) {
5217
+ items.push(item);
5218
+ ids.push(item.id);
5219
+ }
5220
+ }
5221
+ }
5222
+ var offset = opt.offset !== undefined ? opt.offset : 0;
5223
+ var limit = opt.limit !== undefined ? opt.limit : items.length;
5224
+ if (opt.offset || opt.limit) {
5225
+ return items.splice(offset, limit);
5226
+ }
5227
+ return items;
5228
+ });
5229
+ }
5230
+ function createParam(pf) {
5231
+ var field = pf[0], operation = pf[1], value = pf[2];
5232
+ var isFldStr = field !== 'id' ? 'fld_' : '';
5233
+ var vStart = '';
5234
+ var vEnd = '';
5235
+ var field_ = String(field)
5236
+ .trim()
5237
+ .replace(/^(%?)(.+?)(%?)$/, function (m, a, b, c) {
5238
+ vStart = a;
5239
+ vEnd = c;
5240
+ return b;
5241
+ });
5242
+ var v = vStart + value + vEnd;
5243
+ return ["".concat(isFldStr).concat(field_, "__").concat(operation), v];
5244
+ }
5245
+ function getQueries(opt, _queries, _parentAllParams) {
5197
5246
  if (_queries === void 0) { _queries = []; }
5198
5247
  if (_parentAllParams === void 0) { _parentAllParams = []; }
5199
5248
  var filters = opt.filters;
5200
5249
  var logic = typeof filters[0] === 'string' ? filters[0] : 'all';
5201
5250
  var filters_ = filters.filter(function (x) { return Array.isArray(x); });
5202
- var createParam = function (pf) {
5203
- var field = pf[0], operation = pf[1], value = pf[2];
5204
- var isFldStr = field !== 'id' ? 'fld_' : '';
5205
- var vStart = '';
5206
- var vEnd = '';
5207
- var field_ = String(field)
5208
- .trim()
5209
- .replace(/^(%?)(.+?)(%?)$/, function (m, a, b, c) {
5210
- vStart = a;
5211
- vEnd = c;
5212
- return b;
5213
- });
5214
- var v = vStart + value + vEnd;
5215
- return ["".concat(isFldStr).concat(field_, "__").concat(operation), v];
5216
- };
5217
5251
  if (logic === 'any') {
5218
- filters_.forEach(function (f) {
5252
+ for (var _i = 0, filters_1 = filters_; _i < filters_1.length; _i++) {
5253
+ var f = filters_1[_i];
5219
5254
  if (isPropertyFilter(f)) {
5220
5255
  _queries.push(fetchNgwLayerItemsRequest(__assign(__assign({}, opt), { paramList: __spreadArray(__spreadArray([], _parentAllParams, true), [createParam(f)], false) })));
5221
5256
  }
5222
5257
  else {
5223
- createFeatureFieldFilterQueries(__assign(__assign({}, opt), { filters: f }), _queries, __spreadArray([], _parentAllParams, true));
5258
+ getQueries(__assign(__assign({}, opt), { filters: f }), _queries, __spreadArray([], _parentAllParams, true));
5224
5259
  }
5225
- });
5260
+ }
5226
5261
  }
5227
5262
  else if (logic === 'all') {
5228
- var filters_2 = [];
5263
+ var filters_3 = [];
5229
5264
  var propertiesFilterList = [];
5230
- for (var _i = 0, filters_1 = filters_; _i < filters_1.length; _i++) {
5231
- var f = filters_1[_i];
5265
+ for (var _a = 0, filters_2 = filters_; _a < filters_2.length; _a++) {
5266
+ var f = filters_2[_a];
5232
5267
  if (isPropertyFilter(f)) {
5233
- filters_2.push(createParam(f));
5268
+ filters_3.push(createParam(f));
5234
5269
  }
5235
5270
  else {
5236
5271
  propertiesFilterList.push(f);
5237
5272
  }
5238
5273
  }
5239
5274
  if (propertiesFilterList.length) {
5240
- for (var _a = 0, propertiesFilterList_1 = propertiesFilterList; _a < propertiesFilterList_1.length; _a++) {
5241
- var x = propertiesFilterList_1[_a];
5242
- createFeatureFieldFilterQueries(__assign(__assign({}, opt), { filters: x }), _queries, __spreadArray(__spreadArray([], _parentAllParams, true), filters_2, true));
5275
+ for (var _b = 0, propertiesFilterList_1 = propertiesFilterList; _b < propertiesFilterList_1.length; _b++) {
5276
+ var x = propertiesFilterList_1[_b];
5277
+ getQueries(__assign(__assign({}, opt), { filters: x }), _queries, __spreadArray(__spreadArray([], _parentAllParams, true), filters_3, true));
5243
5278
  }
5244
5279
  }
5245
5280
  else {
5246
- _queries.push(fetchNgwLayerItemsRequest(__assign(__assign({}, opt), { paramList: __spreadArray(__spreadArray([], _parentAllParams, true), filters_2, true) })));
5281
+ _queries.push(fetchNgwLayerItemsRequest(__assign(__assign({}, opt), { paramList: __spreadArray(__spreadArray([], _parentAllParams, true), filters_3, true) })));
5247
5282
  }
5248
5283
  }
5249
- return CancelablePromise.all(_queries).then(function (itemsParts) {
5250
- var items = itemsParts.reduce(function (a, b) { return a.concat(b); }, []);
5251
- var offset = opt.offset !== undefined ? opt.offset : 0;
5252
- var limit = opt.limit !== undefined ? opt.limit : items.length;
5253
- if (opt.offset || opt.limit) {
5254
- return items.splice(offset, limit);
5255
- }
5256
- return items;
5257
- });
5284
+ return _queries;
5258
5285
  }
5259
5286
  function createWktFromCoordArray(coord) {
5260
5287
  var polygon = coord.map(function (_a) {
@@ -5266,7 +5293,7 @@ var NgwMap = (function (exports) {
5266
5293
  }
5267
5294
  function fetchNgwLayerItemsRequest(options) {
5268
5295
  var params = __assign({}, FEATURE_REQUEST_PARAMS);
5269
- var connector = options.connector, limit = options.limit, offset = options.offset, intersects = options.intersects, orderBy = options.orderBy, resourceId = options.resourceId, paramList = options.paramList;
5296
+ var limit = options.limit, offset = options.offset, orderBy = options.orderBy, paramList = options.paramList, connector = options.connector, intersects = options.intersects, resourceId = options.resourceId;
5270
5297
  if (limit) {
5271
5298
  if (limit !== Number.POSITIVE_INFINITY) {
5272
5299
  params.limit = limit;
@@ -5279,7 +5306,6 @@ var NgwMap = (function (exports) {
5279
5306
  if (offset) {
5280
5307
  params.offset = offset;
5281
5308
  }
5282
- // TODO: fix type for options
5283
5309
  updateItemRequestParam(params, options);
5284
5310
  if (orderBy) {
5285
5311
  params.order_by = orderBy.join(',');
@@ -5331,12 +5357,16 @@ var NgwMap = (function (exports) {
5331
5357
  var filters = options.filters;
5332
5358
  if (filters) {
5333
5359
  return createFeatureFieldFilterQueries(__assign(__assign({}, options), { filters: filters })).then(function (data) {
5360
+ var _a;
5361
+ var clientFilterValidate = (_a = options.clientFilterValidate) !== null && _a !== void 0 ? _a : true;
5334
5362
  // Additional client-side filter check
5335
- data.filter(function (y) {
5336
- var fields = prepareNgwFieldsToPropertiesFilter(__assign({}, y.fields));
5337
- var result = propertiesFilter(fields, filters);
5338
- return result;
5339
- });
5363
+ if (clientFilterValidate) {
5364
+ data = data.filter(function (y) {
5365
+ var fields = prepareNgwFieldsToPropertiesFilter(__assign(__assign({}, y.fields), { id: y.id }));
5366
+ var result = propertiesFilter(fields, filters);
5367
+ return result;
5368
+ });
5369
+ }
5340
5370
  return data;
5341
5371
  });
5342
5372
  }
@@ -5695,6 +5725,26 @@ var NgwMap = (function (exports) {
5695
5725
  });
5696
5726
  }
5697
5727
 
5728
+ function getImageAdapterOptions(_a) {
5729
+ var resourceId = _a.resourceId, baseUrl = _a.baseUrl, nd = _a.nd, headers = _a.headers;
5730
+ var url = baseUrl + '/api/component/render/image';
5731
+ var params = { resource: resourceId };
5732
+ if (nd) {
5733
+ params.nd = nd;
5734
+ }
5735
+ return {
5736
+ url: url,
5737
+ resourceId: resourceId,
5738
+ headers: headers,
5739
+ params: params,
5740
+ updateWmsParams: function (params_) {
5741
+ if (nd) {
5742
+ params_.nd = nd;
5743
+ }
5744
+ return updateImageParams(params_, resourceId);
5745
+ },
5746
+ };
5747
+ }
5698
5748
  function ngwApiToAdapterOptions(_a) {
5699
5749
  var options = _a.options, webMap = _a.webMap, baseUrl = _a.baseUrl;
5700
5750
  var adapter = options.adapter || 'IMAGE';
@@ -5706,16 +5756,12 @@ var NgwMap = (function (exports) {
5706
5756
  if (typeof resourceId === 'number') {
5707
5757
  if (adapter === 'IMAGE') {
5708
5758
  if (isImageAllowed) {
5709
- url = baseUrl + '/api/component/render/image';
5710
- return {
5711
- url: url,
5759
+ return getImageAdapterOptions({
5712
5760
  resourceId: resourceId,
5713
5761
  headers: options.headers,
5714
- params: { resource: resourceId, nd: nd },
5715
- updateWmsParams: function (params) {
5716
- return updateImageParams(__assign({ nd: nd }, params), resourceId);
5717
- },
5718
- };
5762
+ nd: nd,
5763
+ baseUrl: baseUrl,
5764
+ });
5719
5765
  }
5720
5766
  else {
5721
5767
  adapter = 'TILE';
@@ -7130,6 +7176,7 @@ var NgwMap = (function (exports) {
7130
7176
  NgwWebmapLayerAdapter.prototype._setBasemaps = function (baseWebmap) {
7131
7177
  var _this = this;
7132
7178
  var webMap = this.options.webMap;
7179
+ // to avoid set many basemaps on init
7133
7180
  var enabledAlreadySet = false;
7134
7181
  var _loop_1 = function (x) {
7135
7182
  createOnFirstShowNgwAdapter({
@@ -7138,9 +7185,11 @@ var NgwMap = (function (exports) {
7138
7185
  item: x,
7139
7186
  adapterOptions: { crossOrigin: this_1.options.crossOrigin },
7140
7187
  }).then(function (adapter) {
7141
- // to avoid set many basemaps on init
7142
7188
  var visibility = enabledAlreadySet ? false : x.enabled;
7143
- webMap
7189
+ if (x.enabled) {
7190
+ enabledAlreadySet = true;
7191
+ }
7192
+ return webMap
7144
7193
  .addBaseLayer(adapter, {
7145
7194
  id: WEBMAP_BASELAYER_ID_PREFIX + x.resource_id,
7146
7195
  name: x.display_name,
@@ -7150,9 +7199,6 @@ var NgwMap = (function (exports) {
7150
7199
  .then(function (l) {
7151
7200
  l.id && _this._webmapBaselayersIds.push(l.id);
7152
7201
  });
7153
- if (x.enabled) {
7154
- enabledAlreadySet = true;
7155
- }
7156
7202
  });
7157
7203
  };
7158
7204
  var this_1 = this;
@@ -7634,7 +7680,7 @@ var NgwMap = (function (exports) {
7634
7680
  function updateImageParams(params, resourceId) {
7635
7681
  var bbox = params.bbox, width = params.width, height = params.height, nd = params.nd;
7636
7682
  return {
7637
- resource: resourceId,
7683
+ resource: Array.isArray(resourceId) ? resourceId.join(',') : resourceId,
7638
7684
  extent: bbox,
7639
7685
  size: width + ',' + height,
7640
7686
  timestamp: Date.now(),
@@ -7942,38 +7988,45 @@ var NgwMap = (function (exports) {
7942
7988
  }
7943
7989
  return CancelablePromise.resolve(undefined);
7944
7990
  }
7991
+ function featureLayerIdentify(options) {
7992
+ var g = options.geom;
7993
+ var geom = [];
7994
+ if (Array.isArray(g)) {
7995
+ geom = g;
7996
+ }
7997
+ else {
7998
+ var polygon = g.type === 'Feature' ? g.geometry : g.type === 'Polygon' ? g : false;
7999
+ if (polygon) {
8000
+ geom = polygon.coordinates[0];
8001
+ }
8002
+ }
8003
+ if (geom) {
8004
+ // create wkt string
8005
+ var polygonStr = [];
8006
+ for (var _i = 0, geom_1 = geom; _i < geom_1.length; _i++) {
8007
+ var _a = geom_1[_i], lng = _a[0], lat = _a[1];
8008
+ var _b = degrees2meters(lng, lat), x = _b[0], y = _b[1];
8009
+ polygonStr.push(x + ' ' + y);
8010
+ }
8011
+ var wkt = "POLYGON((".concat(polygonStr.join(', '), "))");
8012
+ var layers = options.layers;
8013
+ var data = {
8014
+ geom: wkt,
8015
+ srs: 3857,
8016
+ layers: layers,
8017
+ };
8018
+ return options.connector.post('feature_layer.identify', { data: data });
8019
+ }
8020
+ else {
8021
+ throw new Error('Not valid geometry format to make intersection');
8022
+ }
8023
+ }
7945
8024
  function sendIdentifyRequest(ev, options) {
8025
+ var _a;
7946
8026
  deprecatedMapClick(ev);
7947
- var _a = ev.lngLat, lng = _a[0], lat = _a[1];
7948
- var geom = [];
7949
- if (options.geom) {
7950
- var polygon_1 = options.geom.type === 'Feature'
7951
- ? options.geom.geometry
7952
- : options.geom.type === 'Polygon'
7953
- ? options.geom
7954
- : false;
7955
- if (polygon_1) {
7956
- geom = polygon_1.coordinates[0];
7957
- }
7958
- }
7959
- if (!geom.length) {
7960
- geom = getCirclePolygonCoordinates(lng, lat, options.radius);
7961
- }
7962
- // create wkt string
7963
- var polygon = [];
7964
- geom.forEach(function (_a) {
7965
- var lng = _a[0], lat = _a[1];
7966
- var _b = degrees2meters(lng, lat), x = _b[0], y = _b[1];
7967
- polygon.push(x + ' ' + y);
7968
- });
7969
- var wkt = "POLYGON((".concat(polygon.join(', '), "))");
7970
- var layers = options.layers;
7971
- var data = {
7972
- geom: wkt,
7973
- srs: 3857,
7974
- layers: layers,
7975
- };
7976
- return options.connector.post('feature_layer.identify', { data: data });
8027
+ var _b = ev.lngLat, lng = _b[0], lat = _b[1];
8028
+ var geom = (_a = options.geom) !== null && _a !== void 0 ? _a : getCirclePolygonCoordinates(lng, lat, options.radius);
8029
+ return featureLayerIdentify(__assign(__assign({}, options), { geom: geom }));
7977
8030
  }
7978
8031
  function createIdentifyItem(opt) {
7979
8032
  return new IdentifyItem(opt);