@syncfusion/ej2-maps 31.2.2 → 32.1.19

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.
Files changed (69) hide show
  1. package/.gitleaksignore +8 -8
  2. package/README.md +11 -2
  3. package/aceconfig.js +17 -0
  4. package/dist/ej2-maps.min.js +1 -10
  5. package/dist/ej2-maps.umd.min.js +1 -10
  6. package/dist/ej2-maps.umd.min.js.map +1 -1
  7. package/dist/es6/ej2-maps.es2015.js +87 -50
  8. package/dist/es6/ej2-maps.es2015.js.map +1 -1
  9. package/dist/es6/ej2-maps.es5.js +90 -53
  10. package/dist/es6/ej2-maps.es5.js.map +1 -1
  11. package/dist/global/ej2-maps.min.js +1 -10
  12. package/dist/global/ej2-maps.min.js.map +1 -1
  13. package/dist/global/index.d.ts +0 -9
  14. package/package.json +18 -53
  15. package/src/maps/layers/layer-panel.js +89 -52
  16. package/dist/ts/index.d.ts +0 -4
  17. package/dist/ts/index.ts +0 -4
  18. package/dist/ts/maps/index.d.ts +0 -28
  19. package/dist/ts/maps/index.ts +0 -28
  20. package/dist/ts/maps/layers/bing-map.d.ts +0 -21
  21. package/dist/ts/maps/layers/bing-map.ts +0 -51
  22. package/dist/ts/maps/layers/bubble.d.ts +0 -77
  23. package/dist/ts/maps/layers/bubble.ts +0 -304
  24. package/dist/ts/maps/layers/color-mapping.d.ts +0 -36
  25. package/dist/ts/maps/layers/color-mapping.ts +0 -230
  26. package/dist/ts/maps/layers/data-label.d.ts +0 -45
  27. package/dist/ts/maps/layers/data-label.ts +0 -457
  28. package/dist/ts/maps/layers/layer-panel.d.ts +0 -144
  29. package/dist/ts/maps/layers/layer-panel.ts +0 -1455
  30. package/dist/ts/maps/layers/legend.d.ts +0 -173
  31. package/dist/ts/maps/layers/legend.ts +0 -2465
  32. package/dist/ts/maps/layers/marker.d.ts +0 -105
  33. package/dist/ts/maps/layers/marker.ts +0 -632
  34. package/dist/ts/maps/layers/navigation-selected-line.d.ts +0 -33
  35. package/dist/ts/maps/layers/navigation-selected-line.ts +0 -171
  36. package/dist/ts/maps/layers/polygon.d.ts +0 -30
  37. package/dist/ts/maps/layers/polygon.ts +0 -68
  38. package/dist/ts/maps/maps-model.d.ts +0 -409
  39. package/dist/ts/maps/maps.d.ts +0 -1247
  40. package/dist/ts/maps/maps.ts +0 -3416
  41. package/dist/ts/maps/model/base-model.d.ts +0 -2107
  42. package/dist/ts/maps/model/base.d.ts +0 -1840
  43. package/dist/ts/maps/model/base.ts +0 -2257
  44. package/dist/ts/maps/model/constants.d.ts +0 -225
  45. package/dist/ts/maps/model/constants.ts +0 -226
  46. package/dist/ts/maps/model/export-image.d.ts +0 -39
  47. package/dist/ts/maps/model/export-image.ts +0 -194
  48. package/dist/ts/maps/model/export-pdf.d.ts +0 -40
  49. package/dist/ts/maps/model/export-pdf.ts +0 -183
  50. package/dist/ts/maps/model/interface.d.ts +0 -892
  51. package/dist/ts/maps/model/interface.ts +0 -929
  52. package/dist/ts/maps/model/print.d.ts +0 -45
  53. package/dist/ts/maps/model/print.ts +0 -125
  54. package/dist/ts/maps/model/theme.d.ts +0 -98
  55. package/dist/ts/maps/model/theme.ts +0 -919
  56. package/dist/ts/maps/user-interaction/annotation.d.ts +0 -27
  57. package/dist/ts/maps/user-interaction/annotation.ts +0 -133
  58. package/dist/ts/maps/user-interaction/highlight.d.ts +0 -63
  59. package/dist/ts/maps/user-interaction/highlight.ts +0 -272
  60. package/dist/ts/maps/user-interaction/selection.d.ts +0 -85
  61. package/dist/ts/maps/user-interaction/selection.ts +0 -342
  62. package/dist/ts/maps/user-interaction/tooltip.d.ts +0 -78
  63. package/dist/ts/maps/user-interaction/tooltip.ts +0 -500
  64. package/dist/ts/maps/user-interaction/zoom.d.ts +0 -334
  65. package/dist/ts/maps/user-interaction/zoom.ts +0 -2523
  66. package/dist/ts/maps/utils/enum.d.ts +0 -328
  67. package/dist/ts/maps/utils/enum.ts +0 -343
  68. package/dist/ts/maps/utils/helper.d.ts +0 -1318
  69. package/dist/ts/maps/utils/helper.ts +0 -3811
@@ -6363,35 +6363,40 @@ class LayerPanel {
6363
6363
  }
6364
6364
  this.rectBounds = null;
6365
6365
  const shapeSettings = this.currentLayer.shapeSettings;
6366
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
6367
- Array.prototype.forEach.call(renderData, (geometryData) => {
6368
- if (!isNullOrUndefined(geometryData['geometry']) || !isNullOrUndefined(geometryData['coordinates'])) {
6369
- const type = !isNullOrUndefined(geometryData['geometry']) ? geometryData['geometry']['type'] : geometryData['type'];
6366
+ for (let r = 0; r < renderData.length; r++) {
6367
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
6368
+ const geometryData = renderData[r];
6369
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
6370
+ const geom = geometryData['geometry'];
6371
+ const hasGeom = !isNullOrUndefined(geom);
6372
+ const hasCoords = !isNullOrUndefined(geometryData['coordinates']);
6373
+ if (hasGeom || hasCoords) {
6374
+ const type = hasGeom ? geom['type'] : geometryData['type'];
6370
6375
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
6371
- const coords = !isNullOrUndefined(geometryData['geometry']) ? geometryData['geometry']['coordinates'] :
6372
- geometryData['coordinates'];
6376
+ const coords = hasGeom ? geom['coordinates'] : geometryData['coordinates'];
6373
6377
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
6374
- const data = geometryData['geometry'];
6378
+ const data = geom;
6375
6379
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
6376
6380
  const properties = geometryData['properties'];
6377
6381
  this.generatePoints(type, coords, data, properties);
6378
6382
  }
6379
- });
6383
+ }
6380
6384
  this.currentLayer.rectBounds = this.rectBounds;
6381
6385
  if (isNullOrUndefined(this.mapObject.baseMapRectBounds) && this.currentLayer.isBaseLayer) {
6382
6386
  this.mapObject.baseMapRectBounds = this.rectBounds;
6383
6387
  }
6384
6388
  const colors = (!isNullOrUndefined(shapeSettings.palette) && shapeSettings.palette.length > 1) ?
6385
6389
  shapeSettings.palette : getShapeColor(this.mapObject.theme);
6390
+ const areaRect = this.mapObject.mapAreaRect;
6386
6391
  const labelTemplateEle = createElement('div', {
6387
6392
  id: this.mapObject.element.id + '_LayerIndex_' + layerIndex + '_Label_Template_Group',
6388
6393
  className: this.mapObject.element.id + '_template'
6389
6394
  });
6390
6395
  labelTemplateEle.style.cssText = 'pointer-events: none; overflow: hidden; position: absolute;' +
6391
- 'top:' + this.mapObject.mapAreaRect.y + 'px;' +
6392
- 'left:' + this.mapObject.mapAreaRect.x + 'px;' +
6393
- 'height:' + this.mapObject.mapAreaRect.height + 'px;' +
6394
- 'width:' + this.mapObject.mapAreaRect.width + 'px;';
6396
+ 'top:' + areaRect.y + 'px;' +
6397
+ 'left:' + areaRect.x + 'px;' +
6398
+ 'height:' + areaRect.height + 'px;' +
6399
+ 'width:' + areaRect.width + 'px;';
6395
6400
  if (this.currentLayer.layerData.length !== 0) {
6396
6401
  for (let i = 0; i < this.currentLayer.layerData.length; i++) {
6397
6402
  let k;
@@ -6436,11 +6441,13 @@ class LayerPanel {
6436
6441
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
6437
6442
  this.currentLayer.dataSource, currentShapeData['property'], this.currentLayer.shapeDataPath, this.currentLayer.shapePropertyPath, this.currentLayer);
6438
6443
  if (k !== null) {
6439
- if (this.currentLayer.dataSource[k][shapeSettings.borderColorValuePath]) {
6440
- borderValue.color = this.currentLayer.dataSource[k][shapeSettings.borderColorValuePath];
6444
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
6445
+ const currentDataSource = this.currentLayer.dataSource[k];
6446
+ if (currentDataSource[shapeSettings.borderColorValuePath]) {
6447
+ borderValue.color = currentDataSource[shapeSettings.borderColorValuePath];
6441
6448
  }
6442
- if (this.currentLayer.dataSource[k][shapeSettings.borderWidthValuePath]) {
6443
- borderValue.width = this.currentLayer.dataSource[k][shapeSettings.borderWidthValuePath];
6449
+ if (currentDataSource[shapeSettings.borderWidthValuePath]) {
6450
+ borderValue.width = currentDataSource[shapeSettings.borderWidthValuePath];
6444
6451
  }
6445
6452
  }
6446
6453
  }
@@ -6503,17 +6510,26 @@ class LayerPanel {
6503
6510
  switch (drawingType) {
6504
6511
  case 'Polygon':
6505
6512
  if (!currentShapeData['_isMultiPolygon']) {
6506
- path += 'M' + (currentShapeData[0]['point']['x']) + ' ' + (currentShapeData[0]['point']['y']);
6507
6513
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
6508
- currentShapeData.map((shapeData) => {
6509
- path += ' L ' + (shapeData['point']['x']) + ' ' + (shapeData['point']['y']);
6510
- });
6514
+ const shapeData = currentShapeData;
6515
+ if (shapeData.length > 0) {
6516
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
6517
+ const firstPoint = shapeData[0]['point'];
6518
+ const pathSegments = ['M', String(firstPoint['x']), String(firstPoint['y'])];
6519
+ for (let index = 0; index < shapeData.length; index++) {
6520
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
6521
+ const point = shapeData[index]['point'];
6522
+ pathSegments.push('L', String(point['x']), String(point['y']));
6523
+ }
6524
+ pathSegments.push('z');
6525
+ path = pathSegments.join(' ');
6526
+ }
6511
6527
  }
6512
6528
  else {
6513
6529
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
6514
6530
  path = this.generateMultiPolygonPath(currentShapeData);
6531
+ path += ' z ';
6515
6532
  }
6516
- path += ' z ';
6517
6533
  if (path.length > 3) {
6518
6534
  pathOptions = new PathOption(shapeID, eventArgs.fill, eventArgs.border.width, eventArgs.border.color, opacity, eventArgs.border.opacity, shapeSettings.dashArray, path);
6519
6535
  pathEle = this.mapObject.renderer.drawPath(pathOptions);
@@ -6732,19 +6748,21 @@ class LayerPanel {
6732
6748
  */
6733
6749
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
6734
6750
  generateMultiPolygonPath(currentShapeData) {
6735
- let path = '';
6736
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
6737
- let shape;
6738
- for (let j = 0; j < currentShapeData.length; j++) {
6739
- path += 'M' + (currentShapeData[j][0]['point']['x']) + ' ' + (currentShapeData[j][0]['point']['y']);
6740
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
6741
- shape = currentShapeData[j];
6742
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
6743
- shape.map((shapeData) => {
6744
- path += ' L ' + (shapeData['point']['x']) + ' ' + (shapeData['point']['y']);
6745
- });
6751
+ const parts = [];
6752
+ for (const shape of currentShapeData) {
6753
+ if (!shape || shape.length === 0) {
6754
+ continue;
6755
+ }
6756
+ const startX = shape[0].point.x;
6757
+ const startY = shape[0].point.y;
6758
+ parts.push(`M${startX} ${startY}`);
6759
+ for (let i = 1; i < shape.length; i++) {
6760
+ const x = shape[i].point.x;
6761
+ const y = shape[i].point.y;
6762
+ parts.push(` L ${x} ${y}`);
6763
+ }
6746
6764
  }
6747
- return path;
6765
+ return parts.join(' ');
6748
6766
  }
6749
6767
  /**
6750
6768
  * To render bubble.
@@ -7068,32 +7086,51 @@ class LayerPanel {
7068
7086
  }
7069
7087
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
7070
7088
  calculatePolygonBox(coordinates) {
7089
+ // Use a simple for-loop, cache frequent lookups, and update rectBounds once
7071
7090
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
7072
7091
  const newData = [];
7073
7092
  const bounds = this.mapObject.baseMapBounds;
7074
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
7075
- coordinates.map((currentPoint) => {
7093
+ const lonMin = bounds.longitude.min;
7094
+ const lonMax = bounds.longitude.max;
7095
+ const latMin = bounds.latitude.min;
7096
+ const latMax = bounds.latitude.max;
7097
+ let minX;
7098
+ let minY;
7099
+ let maxX;
7100
+ let maxY;
7101
+ for (let i = 0; i < coordinates.length; i++) {
7102
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
7103
+ const currentPoint = coordinates[i];
7076
7104
  const latitude = currentPoint[1];
7077
7105
  const longitude = currentPoint[0];
7078
- if ((longitude >= bounds.longitude.min && longitude <= bounds.longitude.max)
7079
- && (latitude >= bounds.latitude.min && latitude <= bounds.latitude.max)) {
7106
+ if (longitude >= lonMin && longitude <= lonMax && latitude >= latMin && latitude <= latMax) {
7080
7107
  const point = convertGeoToPoint(latitude, longitude, this.currentFactor, this.currentLayer, this.mapObject);
7081
- if (isNullOrUndefined(this.rectBounds)) {
7082
- this.rectBounds = { min: { x: point.x, y: point.y }, max: { x: point.x, y: point.y } };
7108
+ if (minX === undefined) {
7109
+ minX = maxX = point.x;
7110
+ minY = maxY = point.y;
7083
7111
  }
7084
7112
  else {
7085
- this.rectBounds['min']['x'] = Math.min(this.rectBounds['min']['x'], point.x);
7086
- this.rectBounds['min']['y'] = Math.min(this.rectBounds['min']['y'], point.y);
7087
- this.rectBounds['max']['x'] = Math.max(this.rectBounds['max']['x'], point.x);
7088
- this.rectBounds['max']['y'] = Math.max(this.rectBounds['max']['y'], point.y);
7089
- }
7090
- newData.push({
7091
- point: point,
7092
- lat: latitude,
7093
- lng: longitude
7094
- });
7113
+ // Update local bounds only
7114
+ minX = Math.min(minX, point.x);
7115
+ minY = Math.min(minY, point.y);
7116
+ maxX = Math.max(maxX, point.x);
7117
+ maxY = Math.max(maxY, point.y);
7118
+ }
7119
+ newData.push({ point: point, lat: latitude, lng: longitude });
7095
7120
  }
7096
- });
7121
+ }
7122
+ // Apply the accumulated bounds once to reduce repeated property access
7123
+ if (newData.length) {
7124
+ if (isNullOrUndefined(this.rectBounds)) {
7125
+ this.rectBounds = { min: { x: minX, y: minY }, max: { x: maxX, y: maxY } };
7126
+ }
7127
+ else {
7128
+ this.rectBounds.min.x = Math.min(this.rectBounds.min.x, minX);
7129
+ this.rectBounds.min.y = Math.min(this.rectBounds.min.y, minY);
7130
+ this.rectBounds.max.x = Math.max(this.rectBounds.max.x, maxX);
7131
+ this.rectBounds.max.y = Math.max(this.rectBounds.max.y, maxY);
7132
+ }
7133
+ }
7097
7134
  return newData;
7098
7135
  }
7099
7136
  // eslint-disable-next-line @typescript-eslint/no-explicit-any