@nextgis/ngw-map 1.11.9 → 1.12.1

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.9; author: NextGIS */
1
+ /** Bundle of @nextgis/ngw-map; version: 1.12.1; author: NextGIS */
2
2
  var NgwMap = (function (exports) {
3
3
  'use strict';
4
4
 
@@ -1308,6 +1308,9 @@ var NgwMap = (function (exports) {
1308
1308
 
1309
1309
  function isObject$1(val) {
1310
1310
  return Object.prototype.toString.call(val) === '[object Object]';
1311
+ }
1312
+ function isArray(val) {
1313
+ return Object.prototype.toString.call(val) === '[object Array]';
1311
1314
  }
1312
1315
 
1313
1316
  function fixUrlStr(url) {
@@ -2371,6 +2374,9 @@ var NgwMap = (function (exports) {
2371
2374
  'movestart',
2372
2375
  'move',
2373
2376
  'moveend',
2377
+ 'mousemove',
2378
+ 'mouseout',
2379
+ 'mouseover',
2374
2380
  ];
2375
2381
  if (opt && opt.include) {
2376
2382
  events = events.filter(function (x) { return opt.include.includes(x); });
@@ -2681,6 +2687,9 @@ var NgwMap = (function (exports) {
2681
2687
  _c.sent();
2682
2688
  _c.label = 11;
2683
2689
  case 11:
2690
+ if (options.onAdded) {
2691
+ options.onAdded(_adapter);
2692
+ }
2684
2693
  this._emitLayerEvent('layer:add', layerId, _adapter);
2685
2694
  return [2 /*return*/, _adapter];
2686
2695
  case 12: return [2 /*return*/, Promise.reject('No adapter')];
@@ -2821,8 +2830,15 @@ var NgwMap = (function (exports) {
2821
2830
  WebMapLayers.prototype.addTileLayer = function (url, options) {
2822
2831
  return this.addLayer('TILE', __assign(__assign({}, options), { url: url }));
2823
2832
  };
2824
- /** Shortcut for {@link WebMapLayers.addLayer} to create TileLayer adapter */
2825
- WebMapLayers.prototype.addImageLayer = function (url, options) {
2833
+ WebMapLayers.prototype.addImageLayer = function (urlOrOptions, options) {
2834
+ var url;
2835
+ if (typeof urlOrOptions === 'string') {
2836
+ url = urlOrOptions;
2837
+ }
2838
+ else {
2839
+ url = urlOrOptions.url;
2840
+ options = urlOrOptions;
2841
+ }
2826
2842
  return this.addLayer('IMAGE', __assign(__assign({}, options), { url: url }));
2827
2843
  };
2828
2844
  /**
@@ -4168,6 +4184,11 @@ var NgwMap = (function (exports) {
4168
4184
  xhr.abort();
4169
4185
  });
4170
4186
  }
4187
+ if (options.signal) {
4188
+ options.signal.addEventListener('abort', function () {
4189
+ xhr.abort();
4190
+ });
4191
+ }
4171
4192
  xhr.send(data);
4172
4193
  };
4173
4194
  }
@@ -4309,7 +4330,12 @@ var NgwMap = (function (exports) {
4309
4330
  forCache.id = resource;
4310
4331
  }
4311
4332
  else if (isObject(resource)) {
4312
- forCache.id = resource.id;
4333
+ if (resource.id !== undefined) {
4334
+ forCache.id = resource.id;
4335
+ }
4336
+ else if (resource.keyname) {
4337
+ forCache.keyname = resource.keyname;
4338
+ }
4313
4339
  }
4314
4340
  var makeRequest = function () {
4315
4341
  if (typeof resource === 'string') {
@@ -4411,20 +4437,35 @@ var NgwMap = (function (exports) {
4411
4437
  };
4412
4438
  ResourcesControl.prototype.getChildrenOf = function (resource, requestOptions) {
4413
4439
  var _this = this;
4414
- return this.getId(resource).then(function (parent) {
4415
- return _this.connector
4416
- .get('resource.collection', __assign({ cache: true }, requestOptions), {
4417
- parent: parent,
4418
- })
4419
- .then(function (items) {
4420
- for (var _i = 0, items_1 = items; _i < items_1.length; _i++) {
4421
- var i = items_1[_i];
4422
- _this.cache.add('resource.item', CancelablePromise.resolve(i), {
4423
- id: i.resource.id,
4424
- });
4440
+ return this.getIdOrFail(resource).then(function (parent) {
4441
+ return _this._getChildrenOf(parent, requestOptions);
4442
+ });
4443
+ };
4444
+ ResourcesControl.prototype._getChildrenOf = function (parent, requestOptions, _items) {
4445
+ var _this = this;
4446
+ if (_items === void 0) { _items = []; }
4447
+ return this.connector
4448
+ .get('resource.collection', __assign({ cache: true }, requestOptions), {
4449
+ parent: parent,
4450
+ })
4451
+ .then(function (items) {
4452
+ var recursivePromises = [];
4453
+ for (var _i = 0, items_1 = items; _i < items_1.length; _i++) {
4454
+ var item = items_1[_i];
4455
+ _this.cache.add('resource.item', CancelablePromise.resolve(item), {
4456
+ id: item.resource.id,
4457
+ });
4458
+ _items.push(item);
4459
+ if ((requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.recursive) && item.resource.children) {
4460
+ recursivePromises.push(_this._getChildrenOf(item.resource.id, requestOptions, _items));
4425
4461
  }
4426
- return items;
4427
- });
4462
+ }
4463
+ if (recursivePromises.length) {
4464
+ return CancelablePromise.all(recursivePromises).then(function () {
4465
+ return _items;
4466
+ });
4467
+ }
4468
+ return _items;
4428
4469
  });
4429
4470
  };
4430
4471
  ResourcesControl.prototype.update = function (resource, data) {
@@ -5167,10 +5208,10 @@ var NgwMap = (function (exports) {
5167
5208
  function createGeoJsonFeature(item) {
5168
5209
  var geometry = item.geom;
5169
5210
  var feature = {
5211
+ geometry: geometry,
5170
5212
  id: item.id,
5171
5213
  type: 'Feature',
5172
5214
  properties: item.fields,
5173
- geometry: geometry,
5174
5215
  };
5175
5216
  return feature;
5176
5217
  }
@@ -5196,7 +5237,19 @@ var NgwMap = (function (exports) {
5196
5237
  function createFeatureFieldFilterQueries(opt) {
5197
5238
  var queries = getQueries(opt);
5198
5239
  return CancelablePromise.all(queries).then(function (itemsParts) {
5199
- var items = itemsParts.reduce(function (a, b) { return a.concat(b); }, []);
5240
+ // this list of ids used for optimization
5241
+ var ids = [];
5242
+ var items = [];
5243
+ for (var _i = 0, itemsParts_1 = itemsParts; _i < itemsParts_1.length; _i++) {
5244
+ var part = itemsParts_1[_i];
5245
+ for (var _a = 0, part_1 = part; _a < part_1.length; _a++) {
5246
+ var item = part_1[_a];
5247
+ if (!ids.includes(item.id)) {
5248
+ items.push(item);
5249
+ ids.push(item.id);
5250
+ }
5251
+ }
5252
+ }
5200
5253
  var offset = opt.offset !== undefined ? opt.offset : 0;
5201
5254
  var limit = opt.limit !== undefined ? opt.limit : items.length;
5202
5255
  if (opt.offset || opt.limit) {
@@ -5205,27 +5258,27 @@ var NgwMap = (function (exports) {
5205
5258
  return items;
5206
5259
  });
5207
5260
  }
5261
+ function createParam(pf) {
5262
+ var field = pf[0], operation = pf[1], value = pf[2];
5263
+ var isFldStr = field !== 'id' ? 'fld_' : '';
5264
+ var vStart = '';
5265
+ var vEnd = '';
5266
+ var field_ = String(field)
5267
+ .trim()
5268
+ .replace(/^(%?)(.+?)(%?)$/, function (m, a, b, c) {
5269
+ vStart = a;
5270
+ vEnd = c;
5271
+ return b;
5272
+ });
5273
+ var v = vStart + value + vEnd;
5274
+ return ["".concat(isFldStr).concat(field_, "__").concat(operation), v];
5275
+ }
5208
5276
  function getQueries(opt, _queries, _parentAllParams) {
5209
5277
  if (_queries === void 0) { _queries = []; }
5210
5278
  if (_parentAllParams === void 0) { _parentAllParams = []; }
5211
5279
  var filters = opt.filters;
5212
5280
  var logic = typeof filters[0] === 'string' ? filters[0] : 'all';
5213
5281
  var filters_ = filters.filter(function (x) { return Array.isArray(x); });
5214
- var createParam = function (pf) {
5215
- var field = pf[0], operation = pf[1], value = pf[2];
5216
- var isFldStr = field !== 'id' ? 'fld_' : '';
5217
- var vStart = '';
5218
- var vEnd = '';
5219
- var field_ = String(field)
5220
- .trim()
5221
- .replace(/^(%?)(.+?)(%?)$/, function (m, a, b, c) {
5222
- vStart = a;
5223
- vEnd = c;
5224
- return b;
5225
- });
5226
- var v = vStart + value + vEnd;
5227
- return ["".concat(isFldStr).concat(field_, "__").concat(operation), v];
5228
- };
5229
5282
  if (logic === 'any') {
5230
5283
  for (var _i = 0, filters_1 = filters_; _i < filters_1.length; _i++) {
5231
5284
  var f = filters_1[_i];
@@ -5271,7 +5324,7 @@ var NgwMap = (function (exports) {
5271
5324
  }
5272
5325
  function fetchNgwLayerItemsRequest(options) {
5273
5326
  var params = __assign({}, FEATURE_REQUEST_PARAMS);
5274
- var connector = options.connector, limit = options.limit, offset = options.offset, intersects = options.intersects, orderBy = options.orderBy, resourceId = options.resourceId, paramList = options.paramList;
5327
+ var limit = options.limit, offset = options.offset, orderBy = options.orderBy, paramList = options.paramList, connector = options.connector, intersects = options.intersects, resourceId = options.resourceId;
5275
5328
  if (limit) {
5276
5329
  if (limit !== Number.POSITIVE_INFINITY) {
5277
5330
  params.limit = limit;
@@ -5284,7 +5337,6 @@ var NgwMap = (function (exports) {
5284
5337
  if (offset) {
5285
5338
  params.offset = offset;
5286
5339
  }
5287
- // TODO: fix type for options
5288
5340
  updateItemRequestParam(params, options);
5289
5341
  if (orderBy) {
5290
5342
  params.order_by = orderBy.join(',');
@@ -5306,6 +5358,7 @@ var NgwMap = (function (exports) {
5306
5358
  }
5307
5359
 
5308
5360
  function prepareNgwFieldsToPropertiesFilter(fields) {
5361
+ console.log(fields);
5309
5362
  var f;
5310
5363
  var _loop_1 = function () {
5311
5364
  var field = fields[f];
@@ -5325,6 +5378,9 @@ var NgwMap = (function (exports) {
5325
5378
  fields[f] = new (Date.bind.apply(Date, __spreadArray([void 0], dt_1, false)))().toISOString();
5326
5379
  }
5327
5380
  }
5381
+ else if (f === 'id' && typeof field === 'string') {
5382
+ fields[f] = field.split(',').map(Number);
5383
+ }
5328
5384
  };
5329
5385
  for (f in fields) {
5330
5386
  _loop_1();
@@ -5336,18 +5392,37 @@ var NgwMap = (function (exports) {
5336
5392
  var filters = options.filters;
5337
5393
  if (filters) {
5338
5394
  return createFeatureFieldFilterQueries(__assign(__assign({}, options), { filters: filters })).then(function (data) {
5395
+ var _a;
5396
+ var clientFilterValidate = (_a = options.clientFilterValidate) !== null && _a !== void 0 ? _a : isFilterWithAnyCase(filters);
5339
5397
  // Additional client-side filter check
5340
- data = data.filter(function (y) {
5341
- var fields = prepareNgwFieldsToPropertiesFilter(__assign({}, y.fields));
5342
- var result = propertiesFilter(fields, filters);
5343
- return result;
5344
- });
5398
+ if (clientFilterValidate) {
5399
+ data = data.filter(function (y) {
5400
+ var fields = prepareNgwFieldsToPropertiesFilter(__assign(__assign({}, y.fields), { id: y.id }));
5401
+ var result = propertiesFilter(fields, filters);
5402
+ return result;
5403
+ });
5404
+ }
5345
5405
  return data;
5346
5406
  });
5347
5407
  }
5348
5408
  else {
5349
5409
  return fetchNgwLayerItemsRequest(options);
5350
5410
  }
5411
+ }
5412
+ function isFilterWithAnyCase(filters) {
5413
+ if (filters[0] === 'any') {
5414
+ return true;
5415
+ }
5416
+ for (var i = 1; i < filters.length; i++) {
5417
+ var p = filters[i];
5418
+ if (isArray(p)) {
5419
+ var deep = isFilterWithAnyCase(p);
5420
+ if (deep) {
5421
+ return true;
5422
+ }
5423
+ }
5424
+ }
5425
+ return false;
5351
5426
  }
5352
5427
 
5353
5428
  function fetchNgwLayerFeatures(options) {
@@ -5700,6 +5775,26 @@ var NgwMap = (function (exports) {
5700
5775
  });
5701
5776
  }
5702
5777
 
5778
+ function getImageAdapterOptions(_a) {
5779
+ var resourceId = _a.resourceId, baseUrl = _a.baseUrl, nd = _a.nd, headers = _a.headers;
5780
+ var url = baseUrl + '/api/component/render/image';
5781
+ var params = { resource: resourceId };
5782
+ if (nd) {
5783
+ params.nd = nd;
5784
+ }
5785
+ return {
5786
+ url: url,
5787
+ resourceId: resourceId,
5788
+ headers: headers,
5789
+ params: params,
5790
+ updateWmsParams: function (params_) {
5791
+ if (nd) {
5792
+ params_.nd = nd;
5793
+ }
5794
+ return updateImageParams(params_, resourceId);
5795
+ },
5796
+ };
5797
+ }
5703
5798
  function ngwApiToAdapterOptions(_a) {
5704
5799
  var options = _a.options, webMap = _a.webMap, baseUrl = _a.baseUrl;
5705
5800
  var adapter = options.adapter || 'IMAGE';
@@ -5711,16 +5806,12 @@ var NgwMap = (function (exports) {
5711
5806
  if (typeof resourceId === 'number') {
5712
5807
  if (adapter === 'IMAGE') {
5713
5808
  if (isImageAllowed) {
5714
- url = baseUrl + '/api/component/render/image';
5715
- return {
5716
- url: url,
5809
+ return getImageAdapterOptions({
5717
5810
  resourceId: resourceId,
5718
5811
  headers: options.headers,
5719
- params: { resource: resourceId, nd: nd },
5720
- updateWmsParams: function (params) {
5721
- return updateImageParams(__assign({ nd: nd }, params), resourceId);
5722
- },
5723
- };
5812
+ nd: nd,
5813
+ baseUrl: baseUrl,
5814
+ });
5724
5815
  }
5725
5816
  else {
5726
5817
  adapter = 'TILE';
@@ -7135,6 +7226,7 @@ var NgwMap = (function (exports) {
7135
7226
  NgwWebmapLayerAdapter.prototype._setBasemaps = function (baseWebmap) {
7136
7227
  var _this = this;
7137
7228
  var webMap = this.options.webMap;
7229
+ // to avoid set many basemaps on init
7138
7230
  var enabledAlreadySet = false;
7139
7231
  var _loop_1 = function (x) {
7140
7232
  createOnFirstShowNgwAdapter({
@@ -7143,9 +7235,11 @@ var NgwMap = (function (exports) {
7143
7235
  item: x,
7144
7236
  adapterOptions: { crossOrigin: this_1.options.crossOrigin },
7145
7237
  }).then(function (adapter) {
7146
- // to avoid set many basemaps on init
7147
7238
  var visibility = enabledAlreadySet ? false : x.enabled;
7148
- webMap
7239
+ if (x.enabled) {
7240
+ enabledAlreadySet = true;
7241
+ }
7242
+ return webMap
7149
7243
  .addBaseLayer(adapter, {
7150
7244
  id: WEBMAP_BASELAYER_ID_PREFIX + x.resource_id,
7151
7245
  name: x.display_name,
@@ -7155,9 +7249,6 @@ var NgwMap = (function (exports) {
7155
7249
  .then(function (l) {
7156
7250
  l.id && _this._webmapBaselayersIds.push(l.id);
7157
7251
  });
7158
- if (x.enabled) {
7159
- enabledAlreadySet = true;
7160
- }
7161
7252
  });
7162
7253
  };
7163
7254
  var this_1 = this;
@@ -7639,7 +7730,7 @@ var NgwMap = (function (exports) {
7639
7730
  function updateImageParams(params, resourceId) {
7640
7731
  var bbox = params.bbox, width = params.width, height = params.height, nd = params.nd;
7641
7732
  return {
7642
- resource: resourceId,
7733
+ resource: Array.isArray(resourceId) ? resourceId.join(',') : resourceId,
7643
7734
  extent: bbox,
7644
7735
  size: width + ',' + height,
7645
7736
  timestamp: Date.now(),
@@ -7881,7 +7972,6 @@ var NgwMap = (function (exports) {
7881
7972
 
7882
7973
  function getIdentifyItems(identify, multiple) {
7883
7974
  if (multiple === void 0) { multiple = false; }
7884
- var params;
7885
7975
  var resources = [];
7886
7976
  var paramsList = [];
7887
7977
  for (var l in identify) {
@@ -7902,14 +7992,9 @@ var NgwMap = (function (exports) {
7902
7992
  if ('features' in identifyItem) {
7903
7993
  var layerFeatures = identifyItem.features;
7904
7994
  var resourceId = Number(l);
7905
- var feature = layerFeatures[0];
7906
- if (feature) {
7907
- params = {
7908
- featureId: feature.id,
7909
- resourceId: resourceId,
7910
- feature: feature,
7911
- };
7912
- paramsList.push(params);
7995
+ var featureParams = createParamsFromFeatures(layerFeatures, resourceId, multiple);
7996
+ if (featureParams.length) {
7997
+ paramsList.push.apply(paramsList, featureParams);
7913
7998
  if (!multiple) {
7914
7999
  break;
7915
8000
  }
@@ -7918,6 +8003,22 @@ var NgwMap = (function (exports) {
7918
8003
  }
7919
8004
  return paramsList;
7920
8005
  }
8006
+ function createParamsFromFeatures(features, resourceId, multiple) {
8007
+ var featureParams = [];
8008
+ for (var _i = 0, features_1 = features; _i < features_1.length; _i++) {
8009
+ var feature = features_1[_i];
8010
+ var params = {
8011
+ featureId: feature.id,
8012
+ resourceId: resourceId,
8013
+ feature: feature,
8014
+ };
8015
+ featureParams.push(params);
8016
+ if (!multiple) {
8017
+ break;
8018
+ }
8019
+ }
8020
+ return featureParams;
8021
+ }
7921
8022
  function fetchIdentifyGeoJson(options) {
7922
8023
  var connector = options.connector, identify = options.identify;
7923
8024
  for (var l in identify) {
@@ -7947,38 +8048,45 @@ var NgwMap = (function (exports) {
7947
8048
  }
7948
8049
  return CancelablePromise.resolve(undefined);
7949
8050
  }
8051
+ function featureLayerIdentify(options) {
8052
+ var g = options.geom;
8053
+ var geom = [];
8054
+ if (Array.isArray(g)) {
8055
+ geom = g;
8056
+ }
8057
+ else {
8058
+ var polygon = g.type === 'Feature' ? g.geometry : g.type === 'Polygon' ? g : false;
8059
+ if (polygon) {
8060
+ geom = polygon.coordinates[0];
8061
+ }
8062
+ }
8063
+ if (geom) {
8064
+ // create wkt string
8065
+ var polygonStr = [];
8066
+ for (var _i = 0, geom_1 = geom; _i < geom_1.length; _i++) {
8067
+ var _a = geom_1[_i], lng = _a[0], lat = _a[1];
8068
+ var _b = degrees2meters(lng, lat), x = _b[0], y = _b[1];
8069
+ polygonStr.push(x + ' ' + y);
8070
+ }
8071
+ var wkt = "POLYGON((".concat(polygonStr.join(', '), "))");
8072
+ var layers = options.layers;
8073
+ var data = {
8074
+ geom: wkt,
8075
+ srs: 3857,
8076
+ layers: layers,
8077
+ };
8078
+ return options.connector.post('feature_layer.identify', { data: data });
8079
+ }
8080
+ else {
8081
+ throw new Error('Not valid geometry format to make intersection');
8082
+ }
8083
+ }
7950
8084
  function sendIdentifyRequest(ev, options) {
8085
+ var _a;
7951
8086
  deprecatedMapClick(ev);
7952
- var _a = ev.lngLat, lng = _a[0], lat = _a[1];
7953
- var geom = [];
7954
- if (options.geom) {
7955
- var polygon_1 = options.geom.type === 'Feature'
7956
- ? options.geom.geometry
7957
- : options.geom.type === 'Polygon'
7958
- ? options.geom
7959
- : false;
7960
- if (polygon_1) {
7961
- geom = polygon_1.coordinates[0];
7962
- }
7963
- }
7964
- if (!geom.length) {
7965
- geom = getCirclePolygonCoordinates(lng, lat, options.radius);
7966
- }
7967
- // create wkt string
7968
- var polygon = [];
7969
- geom.forEach(function (_a) {
7970
- var lng = _a[0], lat = _a[1];
7971
- var _b = degrees2meters(lng, lat), x = _b[0], y = _b[1];
7972
- polygon.push(x + ' ' + y);
7973
- });
7974
- var wkt = "POLYGON((".concat(polygon.join(', '), "))");
7975
- var layers = options.layers;
7976
- var data = {
7977
- geom: wkt,
7978
- srs: 3857,
7979
- layers: layers,
7980
- };
7981
- return options.connector.post('feature_layer.identify', { data: data });
8087
+ var _b = ev.lngLat, lng = _b[0], lat = _b[1];
8088
+ var geom = (_a = options.geom) !== null && _a !== void 0 ? _a : getCirclePolygonCoordinates(lng, lat, options.radius);
8089
+ return featureLayerIdentify(__assign(__assign({}, options), { geom: geom }));
7982
8090
  }
7983
8091
  function createIdentifyItem(opt) {
7984
8092
  return new IdentifyItem(opt);