@syncfusion/ej2-maps 27.2.2 → 28.1.33
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.
- package/.gitleaksignore +3 -3
- package/README.md +2 -2
- package/dist/ej2-maps.min.js +3 -3
- package/dist/ej2-maps.umd.min.js +3 -3
- package/dist/ej2-maps.umd.min.js.map +1 -1
- package/dist/es6/ej2-maps.es2015.js +508 -206
- package/dist/es6/ej2-maps.es2015.js.map +1 -1
- package/dist/es6/ej2-maps.es5.js +517 -215
- package/dist/es6/ej2-maps.es5.js.map +1 -1
- package/dist/global/ej2-maps.min.js +3 -3
- package/dist/global/ej2-maps.min.js.map +1 -1
- package/dist/global/index.d.ts +2 -2
- package/package.json +13 -13
- package/src/maps/layers/legend.js +23 -21
- package/src/maps/layers/marker.d.ts +8 -1
- package/src/maps/layers/marker.js +104 -33
- package/src/maps/maps-model.d.ts +8 -1
- package/src/maps/maps.d.ts +19 -3
- package/src/maps/maps.js +53 -15
- package/src/maps/model/base-model.d.ts +20 -0
- package/src/maps/model/base.d.ts +17 -0
- package/src/maps/model/base.js +9 -0
- package/src/maps/model/constants.d.ts +6 -0
- package/src/maps/model/constants.js +6 -0
- package/src/maps/model/export-image.js +4 -4
- package/src/maps/model/export-pdf.js +4 -4
- package/src/maps/model/interface.d.ts +15 -0
- package/src/maps/model/print.js +2 -2
- package/src/maps/model/theme.js +72 -0
- package/src/maps/user-interaction/tooltip.js +3 -1
- package/src/maps/user-interaction/zoom.d.ts +13 -1
- package/src/maps/user-interaction/zoom.js +136 -90
- package/src/maps/utils/enum.d.ts +4 -0
- package/src/maps/utils/helper.d.ts +4 -9
- package/src/maps/utils/helper.js +102 -46
package/dist/global/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* filename: index.d.ts
|
|
3
|
-
* version :
|
|
4
|
-
* Copyright Syncfusion Inc. 2001 -
|
|
3
|
+
* version : 28.1.33
|
|
4
|
+
* Copyright Syncfusion Inc. 2001 - 2024. All rights reserved.
|
|
5
5
|
* Use of this code is subject to the terms of our license.
|
|
6
6
|
* A copy of the current license can be obtained at any time by e-mailing
|
|
7
7
|
* licensing@syncfusion.com. Any infringement will be prosecuted under
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"_from": "@syncfusion/ej2-maps@*",
|
|
3
|
-
"_id": "@syncfusion/ej2-maps@
|
|
3
|
+
"_id": "@syncfusion/ej2-maps@16.42.7",
|
|
4
4
|
"_inBundle": false,
|
|
5
|
-
"_integrity": "sha512-
|
|
5
|
+
"_integrity": "sha512-hYdA8I18QpGdTInSRH3iZ3hdp6/U1dkGLMq7yFsKaEDDvCyl5rvajihb+XaUX1VmW8+eWdgjbI5rPTTfO219RQ==",
|
|
6
6
|
"_location": "/@syncfusion/ej2-maps",
|
|
7
7
|
"_phantomChildren": {},
|
|
8
8
|
"_requested": {
|
|
@@ -23,10 +23,10 @@
|
|
|
23
23
|
"/@syncfusion/ej2-react-maps",
|
|
24
24
|
"/@syncfusion/ej2-vue-maps"
|
|
25
25
|
],
|
|
26
|
-
"_resolved": "https://nexus.syncfusioninternal.com/repository/ej2-
|
|
27
|
-
"_shasum": "
|
|
26
|
+
"_resolved": "https://nexus.syncfusioninternal.com/repository/ej2-release/@syncfusion/ej2-maps/-/ej2-maps-16.42.7.tgz",
|
|
27
|
+
"_shasum": "36fc1e11aef49f674a3f00eeaa4618bd0aad2a95",
|
|
28
28
|
"_spec": "@syncfusion/ej2-maps@*",
|
|
29
|
-
"_where": "/jenkins/workspace/elease-
|
|
29
|
+
"_where": "/jenkins/workspace/elease-automation_release_28.1.1/packages/included",
|
|
30
30
|
"author": {
|
|
31
31
|
"name": "Syncfusion Inc."
|
|
32
32
|
},
|
|
@@ -35,13 +35,13 @@
|
|
|
35
35
|
},
|
|
36
36
|
"bundleDependencies": false,
|
|
37
37
|
"dependencies": {
|
|
38
|
-
"@syncfusion/ej2-base": "~
|
|
39
|
-
"@syncfusion/ej2-buttons": "~
|
|
40
|
-
"@syncfusion/ej2-compression": "~
|
|
41
|
-
"@syncfusion/ej2-data": "~
|
|
42
|
-
"@syncfusion/ej2-file-utils": "~
|
|
43
|
-
"@syncfusion/ej2-pdf-export": "~
|
|
44
|
-
"@syncfusion/ej2-svg-base": "~
|
|
38
|
+
"@syncfusion/ej2-base": "~28.1.33",
|
|
39
|
+
"@syncfusion/ej2-buttons": "~28.1.33",
|
|
40
|
+
"@syncfusion/ej2-compression": "~28.1.33",
|
|
41
|
+
"@syncfusion/ej2-data": "~28.1.33",
|
|
42
|
+
"@syncfusion/ej2-file-utils": "~28.1.33",
|
|
43
|
+
"@syncfusion/ej2-pdf-export": "~28.1.33",
|
|
44
|
+
"@syncfusion/ej2-svg-base": "~28.1.33"
|
|
45
45
|
},
|
|
46
46
|
"deprecated": false,
|
|
47
47
|
"description": "The Maps component is used to visualize the geographical data and represent the statistical data of a particular geographical area on earth with user interactivity, and provides various customizing options",
|
|
@@ -93,6 +93,6 @@
|
|
|
93
93
|
"url": "git+https://github.com/syncfusion/ej2-javascript-ui-controls.git"
|
|
94
94
|
},
|
|
95
95
|
"typings": "index.d.ts",
|
|
96
|
-
"version": "
|
|
96
|
+
"version": "28.1.33",
|
|
97
97
|
"sideEffects": false
|
|
98
98
|
}
|
|
@@ -200,6 +200,13 @@ var Legend = /** @class */ (function () {
|
|
|
200
200
|
else {
|
|
201
201
|
legendText = '';
|
|
202
202
|
}
|
|
203
|
+
if (legend.position === 'Left' || legend.position === 'Right') {
|
|
204
|
+
for (var i_1 = 0; i_1 < this.legendCollection.length; i_1++) {
|
|
205
|
+
var legendItem = this.legendCollection[i_1];
|
|
206
|
+
var legendTextSize = measureText(legendItem['text'], legend.textStyle);
|
|
207
|
+
this.textMaxWidth = Math.max(this.textMaxWidth, legendTextSize.width);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
203
210
|
maxTextHeight = Math.max(maxTextHeight, itemTextSize.height);
|
|
204
211
|
maxTextWidth = Math.max(maxTextWidth, itemTextSize.width);
|
|
205
212
|
if (itemTextSize.width > 0 && itemTextSize.height > 0) {
|
|
@@ -209,26 +216,26 @@ var Legend = /** @class */ (function () {
|
|
|
209
216
|
(startY - textPadding_1);
|
|
210
217
|
}
|
|
211
218
|
else {
|
|
212
|
-
textX_1 = (position_1 === 'After') ? startX - (
|
|
213
|
-
: (startX + rectWidth +
|
|
219
|
+
textX_1 = (position_1 === 'After') ? startX - (this.textMaxWidth / 2) - textPadding_1
|
|
220
|
+
: (startX + rectWidth + this.textMaxWidth / 2) + textPadding_1;
|
|
214
221
|
textY_1 = startY + (rectHeight / 2) + (itemTextSize.height / 4);
|
|
215
222
|
}
|
|
216
223
|
}
|
|
217
224
|
if (i === 0) {
|
|
218
225
|
itemStartX = (arrangement === 'Horizontal') ? startX : (position_1 === 'After') ?
|
|
219
|
-
textX_1 - (
|
|
226
|
+
textX_1 - (this.textMaxWidth / 2) : startX;
|
|
220
227
|
itemStartY = (arrangement === 'Horizontal') ? (position_1 === 'After') ? startY :
|
|
221
228
|
textY_1 - (itemTextSize.height / 2) : startY;
|
|
222
229
|
if (this.legendCollection.length === 1) {
|
|
223
230
|
legendWidth = (arrangement === 'Horizontal') ? Math.abs((startX + rectWidth) - itemStartX) :
|
|
224
|
-
(rectWidth +
|
|
231
|
+
(rectWidth + this.textMaxWidth + textPadding_1);
|
|
225
232
|
legendHeight = (arrangement === 'Horizontal') ? (rectHeight + (maxTextHeight / 2) + textPadding_1) :
|
|
226
233
|
Math.abs((startY + rectHeight) - itemStartY);
|
|
227
234
|
}
|
|
228
235
|
}
|
|
229
236
|
else if (i === this.legendCollection.length - 1) {
|
|
230
237
|
legendWidth = (arrangement === 'Horizontal') ? Math.abs((startX + rectWidth) - itemStartX) :
|
|
231
|
-
(rectWidth +
|
|
238
|
+
(rectWidth + this.textMaxWidth + textPadding_1);
|
|
232
239
|
legendHeight = (arrangement === 'Horizontal') ? (rectHeight + (maxTextHeight / 2) + textPadding_1) :
|
|
233
240
|
Math.abs((startY + rectHeight) - itemStartY);
|
|
234
241
|
}
|
|
@@ -240,8 +247,8 @@ var Legend = /** @class */ (function () {
|
|
|
240
247
|
shapeBorder: this.legendCollection[i]['shapeBorder']
|
|
241
248
|
});
|
|
242
249
|
}
|
|
243
|
-
if (this.legendCollection.length === 1
|
|
244
|
-
legendHeight =
|
|
250
|
+
if (this.legendCollection.length === 1) {
|
|
251
|
+
legendHeight = maxTextHeight + textPadding_1;
|
|
245
252
|
legendWidth = rectWidth;
|
|
246
253
|
}
|
|
247
254
|
this.legendItemRect = { x: itemStartX, y: itemStartY, width: legendWidth, height: legendHeight };
|
|
@@ -751,8 +758,8 @@ var Legend = /** @class */ (function () {
|
|
|
751
758
|
if (shapeElement !== null) {
|
|
752
759
|
var shapeMatch = true;
|
|
753
760
|
if (this.maps.legendSelectionCollection !== null) {
|
|
754
|
-
for (var
|
|
755
|
-
if (this.maps.legendSelectionCollection[
|
|
761
|
+
for (var i_2 = 0; i_2 < this.maps.legendSelectionCollection.length; i_2++) {
|
|
762
|
+
if (this.maps.legendSelectionCollection[i_2]['legendElement'] === targetElement) {
|
|
756
763
|
shapeMatch = false;
|
|
757
764
|
break;
|
|
758
765
|
}
|
|
@@ -1308,18 +1315,7 @@ var Legend = /** @class */ (function () {
|
|
|
1308
1315
|
var spacing = 10;
|
|
1309
1316
|
var trimTitle = textTrim((this.legendItemRect.width + (spacing * 2)), legendTitle, textStyle);
|
|
1310
1317
|
var textSize = measureText(trimTitle, textStyle);
|
|
1311
|
-
|
|
1312
|
-
for (var i = 0; i < this.legendRenderingCollections.length; i++) {
|
|
1313
|
-
if (this.legendRenderingCollections[i].textWidth !== this.legendRenderingCollections[0].textWidth) {
|
|
1314
|
-
sameTextWidth = false;
|
|
1315
|
-
break;
|
|
1316
|
-
}
|
|
1317
|
-
else {
|
|
1318
|
-
sameTextWidth = true;
|
|
1319
|
-
}
|
|
1320
|
-
}
|
|
1321
|
-
this.legendBorderRect = new Rect((map.theme === 'Fluent2HighContrast' && !sameTextWidth && (legend.position === 'Left' || legend.position === 'Right') && legend.mode === 'Interactive')
|
|
1322
|
-
? (this.legendItemRect.x - (spacing * 3)) : (this.legendItemRect.x - spacing), (this.legendItemRect.y - spacing - textSize.height), (this.legendItemRect.width) + (spacing * 2), (this.legendItemRect.height) + (spacing * 2) + textSize.height +
|
|
1318
|
+
this.legendBorderRect = new Rect((this.legendItemRect.x - spacing), (this.legendItemRect.y - spacing - textSize.height), (this.legendItemRect.width) + (spacing * 2), (this.legendItemRect.height) + (spacing * 2) + textSize.height +
|
|
1323
1319
|
(legend.mode === 'Interactive' ? 0 : (this.page !== 0) ? spacing : 0));
|
|
1324
1320
|
var legendBorder = {
|
|
1325
1321
|
color: legend.border.color || this.maps.themeStyle.legendBorderColor, opacity: legend.border.opacity,
|
|
@@ -2252,6 +2248,12 @@ var Legend = /** @class */ (function () {
|
|
|
2252
2248
|
this.maps.off(Browser.touchMoveEvent, this.interactiveHandler);
|
|
2253
2249
|
this.maps.off(Browser.touchEndEvent, this.interactiveHandler);
|
|
2254
2250
|
this.maps.off(click, this.legendClick);
|
|
2251
|
+
var pagingElement = document.getElementById(this.maps.element.id + '_Legend_Paging_Group');
|
|
2252
|
+
if (pagingElement) {
|
|
2253
|
+
for (var i = 0; i < pagingElement.childElementCount; i++) {
|
|
2254
|
+
EventHandler.remove(pagingElement.childNodes[i], Browser.touchStartEvent, this.changeNextPage);
|
|
2255
|
+
}
|
|
2256
|
+
}
|
|
2255
2257
|
};
|
|
2256
2258
|
Legend.prototype.getLegendData = function (
|
|
2257
2259
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
@@ -6,7 +6,6 @@ import { LayerSettings, MarkerClusterData } from '../index';
|
|
|
6
6
|
export declare class Marker {
|
|
7
7
|
private maps;
|
|
8
8
|
private isMarkerExplode;
|
|
9
|
-
private trackElements;
|
|
10
9
|
private markerSVGObject;
|
|
11
10
|
initialMarkerCluster: number[][][];
|
|
12
11
|
zoomedMarkerCluster: number[][][];
|
|
@@ -77,6 +76,14 @@ export declare class Marker {
|
|
|
77
76
|
* @private
|
|
78
77
|
*/
|
|
79
78
|
markerClusterMouseMove(e: PointerEvent): void;
|
|
79
|
+
/**
|
|
80
|
+
* This method is used to return whether the clustering is enabled in any marker settings.
|
|
81
|
+
*
|
|
82
|
+
* @param {LayerSettings} layer - Specifies the layer settings
|
|
83
|
+
* @returns {boolean} - Specifies whether the clustering is enabled in any marker settings.
|
|
84
|
+
* @private
|
|
85
|
+
*/
|
|
86
|
+
allowInnerClusterSetting(layer: LayerSettings): boolean;
|
|
80
87
|
/**
|
|
81
88
|
* @private
|
|
82
89
|
* @returns {void}
|
|
@@ -9,7 +9,6 @@ import { getElementByID, mergeSeparateCluster, clusterSeparate, removeElement, g
|
|
|
9
9
|
var Marker = /** @class */ (function () {
|
|
10
10
|
function Marker(maps) {
|
|
11
11
|
this.maps = maps;
|
|
12
|
-
this.trackElements = [];
|
|
13
12
|
this.sameMarkerData = [];
|
|
14
13
|
this.initialMarkerCluster = [];
|
|
15
14
|
this.zoomedMarkerCluster = [];
|
|
@@ -27,23 +26,43 @@ var Marker = /** @class */ (function () {
|
|
|
27
26
|
var templateFn;
|
|
28
27
|
var markerCount = 0;
|
|
29
28
|
var nullCount = 0;
|
|
29
|
+
var isMarkerTemplateNewCreation = false;
|
|
30
30
|
var markerTemplateCount = 0;
|
|
31
31
|
maps.translateType = 'marker';
|
|
32
32
|
var currentLayer = maps.layersCollection[layerIndex];
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
33
|
+
var markerElement = layerElement.querySelectorAll('#' + maps.element.id + '_Markers_Group');
|
|
34
|
+
if (markerElement.length > 0) {
|
|
35
|
+
this.markerSVGObject = markerElement[0];
|
|
36
|
+
this.markerSVGObject.innerHTML = '';
|
|
37
|
+
isMarkerTemplateNewCreation = true;
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
this.markerSVGObject = maps.renderer.createGroup({
|
|
41
|
+
id: maps.element.id + '_Markers_Group',
|
|
42
|
+
class: 'GroupElement'
|
|
43
|
+
});
|
|
44
|
+
}
|
|
37
45
|
this.markerSVGObject.style.pointerEvents = 'auto';
|
|
38
|
-
var
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
46
|
+
var secondaryElement = getElementByID(maps.element.id + '_Secondary_Element');
|
|
47
|
+
var markerTemplateElement = secondaryElement.querySelectorAll('#' + maps.element.id + '_LayerIndex_' + layerIndex + '_Markers_Template_Group');
|
|
48
|
+
var markerTemplateEle;
|
|
49
|
+
if (markerTemplateElement && markerTemplateElement.length > 0 && markerTemplateElement[0].childElementCount > 0) {
|
|
50
|
+
markerTemplateEle = getElementByID(maps.element.id + '_LayerIndex_' + layerIndex + '_Markers_Template_Group');
|
|
51
|
+
markerTemplateEle.innerHTML = '';
|
|
52
|
+
isMarkerTemplateNewCreation = true;
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
markerTemplateEle = createElement('div', {
|
|
56
|
+
id: maps.element.id + '_LayerIndex_' + layerIndex + '_Markers_Template_Group',
|
|
57
|
+
className: maps.element.id + '_template'
|
|
58
|
+
});
|
|
59
|
+
markerTemplateEle.style.cssText = 'overflow: hidden; position: absolute;pointer-events: none;' +
|
|
60
|
+
'top:' + maps.mapAreaRect.y + 'px;' +
|
|
61
|
+
'left:' + maps.mapAreaRect.x + 'px;' +
|
|
62
|
+
'height:' + maps.mapAreaRect.height + 'px;' +
|
|
63
|
+
'width:' + maps.mapAreaRect.width + 'px;';
|
|
64
|
+
}
|
|
65
|
+
var allowInnerClusterSetting = this.allowInnerClusterSetting(currentLayer);
|
|
47
66
|
var allowAnimation = (currentLayer.animationDuration !== 0 || animationMode === 'Enable') || isNullOrUndefined(maps.zoomModule);
|
|
48
67
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
49
68
|
var translatePoint;
|
|
@@ -55,13 +74,20 @@ var Marker = /** @class */ (function () {
|
|
|
55
74
|
Array.prototype.forEach.call(currentLayer.markerSettings, function (markerSettings, markerIndex) {
|
|
56
75
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
57
76
|
var markerData = markerSettings.dataSource;
|
|
77
|
+
markerCount = 0;
|
|
58
78
|
if (!isNullOrUndefined(markerSettings.dataSource)) {
|
|
59
79
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
60
80
|
Array.prototype.forEach.call(markerData, function (data, dataIndex) {
|
|
61
81
|
maps.markerNullCount = markerIndex > 0 && dataIndex === 0 ? 0 : maps.markerNullCount;
|
|
62
82
|
var eventArgs = {
|
|
63
|
-
cancel: false, name: markerRendering, fill: markerSettings.fill,
|
|
64
|
-
|
|
83
|
+
cancel: false, name: markerRendering, fill: markerSettings.fill,
|
|
84
|
+
height: (!isNullOrUndefined(markerSettings.heightValuePath) &&
|
|
85
|
+
!isNullOrUndefined(data[markerSettings.heightValuePath]) ?
|
|
86
|
+
data[markerSettings.heightValuePath] : markerSettings.height),
|
|
87
|
+
width: (!isNullOrUndefined(markerSettings.widthValuePath) &&
|
|
88
|
+
!isNullOrUndefined(data[markerSettings.widthValuePath]) ?
|
|
89
|
+
data[markerSettings.widthValuePath] : markerSettings.width),
|
|
90
|
+
imageUrl: markerSettings.imageUrl, shape: markerSettings.shape,
|
|
65
91
|
template: markerSettings.template, data: data, maps: maps, marker: markerSettings,
|
|
66
92
|
border: markerSettings.border, colorValuePath: markerSettings.colorValuePath,
|
|
67
93
|
shapeValuePath: markerSettings.shapeValuePath, imageUrlValuePath: markerSettings.imageUrlValuePath
|
|
@@ -87,12 +113,14 @@ var Marker = /** @class */ (function () {
|
|
|
87
113
|
var scale = type === 'AddMarker' ? maps.scale : translatePoint['scale'];
|
|
88
114
|
var transPoint = type === 'AddMarker' ? maps.translatePoint : translatePoint['location'];
|
|
89
115
|
if (eventArgs.template && (!isNaN(location_1.x) && !isNaN(location_1.y))) {
|
|
116
|
+
isMarkerTemplateNewCreation = false;
|
|
90
117
|
markerTemplateCount++;
|
|
91
118
|
markerTemplate(eventArgs, templateFn, markerID, data, markerIndex, markerTemplateEle, location_1, transPoint, scale, offset, maps);
|
|
92
119
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
93
120
|
maps.renderReactTemplates();
|
|
94
121
|
}
|
|
95
122
|
else if (!eventArgs.template && (!isNaN(location_1.x) && !isNaN(location_1.y))) {
|
|
123
|
+
isMarkerTemplateNewCreation = true;
|
|
96
124
|
markerCount++;
|
|
97
125
|
marker(eventArgs, markerSettings, markerData, dataIndex, location_1, transPoint, markerID, offset, scale, maps, _this.markerSVGObject);
|
|
98
126
|
}
|
|
@@ -104,32 +132,55 @@ var Marker = /** @class */ (function () {
|
|
|
104
132
|
maps.markerNullCount + 1 : maps.markerNullCount;
|
|
105
133
|
var markerDataLength = markerData.length - maps.markerNullCount;
|
|
106
134
|
var isMarkersClustered = false;
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
135
|
+
var markerGroup = (markerSettings.clusterSettings.allowClustering ||
|
|
136
|
+
(currentLayer.markerClusterSettings.allowClustering && currentLayer.markerSettings.length > 1))
|
|
137
|
+
? _this.markerSVGObject.querySelectorAll("[id*='LayerIndex_" + layerIndex + "_MarkerIndex_" + markerIndex + "']:not([id*='_Group'])")
|
|
138
|
+
: _this.markerSVGObject.childNodes;
|
|
139
|
+
var templateCount = _this.markerSVGObject.childNodes === markerGroup ? markerTemplateCount : 0;
|
|
140
|
+
if (markerGroup.length === (markerDataLength - templateCount - nullCount) && (type !== 'Template')) {
|
|
141
|
+
if (markerElement.length === 0) {
|
|
142
|
+
layerElement.appendChild(_this.markerSVGObject);
|
|
143
|
+
}
|
|
144
|
+
if (markerSettings.clusterSettings.allowClustering || !allowInnerClusterSetting &&
|
|
145
|
+
currentLayer.markerClusterSettings.allowClustering) {
|
|
146
|
+
if (markerElement.length === 0) {
|
|
147
|
+
maps.svgObject.appendChild(_this.markerSVGObject);
|
|
148
|
+
maps.element.appendChild(maps.svgObject);
|
|
149
|
+
}
|
|
112
150
|
if ((currentLayer.urlTemplate.indexOf('openstreetmap') !== -1 && isNullOrUndefined(currentLayer.shapeData))
|
|
113
151
|
&& maps.zoomSettings.enable) {
|
|
114
|
-
isMarkersClustered = clusterTemplate(currentLayer, _this.markerSVGObject, maps, layerIndex, _this.markerSVGObject, layerElement, true, false);
|
|
115
|
-
|
|
152
|
+
isMarkersClustered = clusterTemplate(currentLayer, _this.markerSVGObject, maps, layerIndex, markerIndex, _this.markerSVGObject, layerElement, true, false, null, allowInnerClusterSetting);
|
|
153
|
+
if (markerElement.length === 0) {
|
|
154
|
+
layerElement.appendChild(_this.markerSVGObject);
|
|
155
|
+
}
|
|
116
156
|
}
|
|
117
157
|
else {
|
|
118
|
-
isMarkersClustered = clusterTemplate(currentLayer, _this.markerSVGObject, maps, layerIndex, _this.markerSVGObject, layerElement, true, false);
|
|
158
|
+
isMarkersClustered = clusterTemplate(currentLayer, _this.markerSVGObject, maps, layerIndex, markerIndex, _this.markerSVGObject, layerElement, true, false, translatePoint, allowInnerClusterSetting);
|
|
119
159
|
}
|
|
120
160
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
121
161
|
maps.renderReactTemplates();
|
|
122
162
|
}
|
|
123
163
|
}
|
|
124
|
-
|
|
125
|
-
|
|
164
|
+
var markerTemplateGroup = (markerSettings.clusterSettings.allowClustering ||
|
|
165
|
+
(currentLayer.markerClusterSettings.allowClustering && currentLayer.markerSettings.length > 1))
|
|
166
|
+
? markerTemplateEle.querySelectorAll("[id*='LayerIndex_" + layerIndex + "_MarkerIndex_" + markerIndex + "']:not([id*='_Group'])")
|
|
167
|
+
: markerTemplateEle.childNodes;
|
|
168
|
+
if (markerTemplateGroup.length === (markerDataLength - markerCount - nullCount) && getElementByID(maps.element.id + '_Secondary_Element')) {
|
|
169
|
+
if (!isMarkerTemplateNewCreation) {
|
|
170
|
+
getElementByID(maps.element.id + '_Secondary_Element').appendChild(markerTemplateEle);
|
|
171
|
+
}
|
|
126
172
|
if (maps.checkInitialRender) {
|
|
127
|
-
if (
|
|
128
|
-
|
|
173
|
+
if ((markerSettings.clusterSettings.allowClustering || !allowInnerClusterSetting &&
|
|
174
|
+
currentLayer.markerClusterSettings.allowClustering) && !isMarkersClustered) {
|
|
175
|
+
clusterTemplate(currentLayer, markerTemplateEle, maps, layerIndex, markerIndex, _this.markerSVGObject, layerElement, false, false, translatePoint, allowInnerClusterSetting);
|
|
129
176
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
130
177
|
maps.renderReactTemplates();
|
|
131
178
|
}
|
|
132
179
|
}
|
|
180
|
+
if (currentLayer.markerClusterSettings.allowClustering && markerElement.length > 0) {
|
|
181
|
+
var layerCollectionEle = getElementByID(maps.element.id + '_Layer_Collections');
|
|
182
|
+
layerCollectionEle.appendChild(layerElement);
|
|
183
|
+
}
|
|
133
184
|
}
|
|
134
185
|
});
|
|
135
186
|
});
|
|
@@ -410,16 +461,18 @@ var Marker = /** @class */ (function () {
|
|
|
410
461
|
var markCollection = [];
|
|
411
462
|
var clusterCollection = [];
|
|
412
463
|
var marker;
|
|
413
|
-
this.maps.markerClusterExpand = layer.markerClusterSettings.allowClusterExpand;
|
|
414
464
|
if (target.indexOf('_MarkerIndex_') > -1) {
|
|
415
465
|
var markerIndex = parseInt(id[1].split('_MarkerIndex_')[1].split('_')[0], 10);
|
|
416
466
|
var dataIndex = parseInt(id[1].split('_dataIndex_')[1].split('_')[0], 10);
|
|
417
467
|
marker = layer.markerSettings[markerIndex];
|
|
468
|
+
var allowInnerClusterSetting = this.allowInnerClusterSetting(layer);
|
|
469
|
+
this.maps.markerClusterExpand = !allowInnerClusterSetting && layer.markerClusterSettings.allowClustering ?
|
|
470
|
+
layer.markerClusterSettings.allowClusterExpand : marker.clusterSettings.allowClusterExpand;
|
|
418
471
|
if (!isNaN(markerIndex)) {
|
|
419
472
|
data = marker.dataSource[dataIndex];
|
|
420
473
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
421
474
|
var collection_1 = [];
|
|
422
|
-
if (!marker.template && (target.indexOf('_cluster_') > -1) &&
|
|
475
|
+
if (!marker.template && (target.indexOf('_cluster_') > -1) && this.maps.markerClusterExpand) {
|
|
423
476
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
424
477
|
Array.prototype.forEach.call(marker.dataSource, function (location, index) {
|
|
425
478
|
if (location['latitude'] === data['latitude'] && location['longitude'] === data['longitude']) {
|
|
@@ -429,8 +482,10 @@ var Marker = /** @class */ (function () {
|
|
|
429
482
|
}
|
|
430
483
|
if ((target.indexOf('_cluster_') > -1)) {
|
|
431
484
|
var isClusterSame = false;
|
|
432
|
-
var
|
|
433
|
-
|
|
485
|
+
var cluster = !allowInnerClusterSetting && layer.markerClusterSettings.allowClustering ?
|
|
486
|
+
layer.markerClusterSettings : layer.markerSettings[markerIndex].clusterSettings;
|
|
487
|
+
var clusterElement = document.getElementById(target.indexOf('_datalabel_') > -1 ? cluster.shape === 'Balloon' ? target.split('_datalabel_')[0] + '_Group' : target.split('_datalabel_')[0] : cluster.shape === 'Balloon' ? target + '_Group' : target);
|
|
488
|
+
var indexes = cluster.shape === 'Balloon' ? clusterElement.children[0].textContent.split(',').map(Number) : clusterElement.textContent.split(',').map(Number);
|
|
434
489
|
collection_1 = [];
|
|
435
490
|
for (var _i = 0, indexes_1 = indexes; _i < indexes_1.length; _i++) {
|
|
436
491
|
var i = indexes_1[_i];
|
|
@@ -500,6 +555,23 @@ var Marker = /** @class */ (function () {
|
|
|
500
555
|
};
|
|
501
556
|
this.maps.trigger(markerClusterMouseMove, eventArgs);
|
|
502
557
|
};
|
|
558
|
+
/**
|
|
559
|
+
* This method is used to return whether the clustering is enabled in any marker settings.
|
|
560
|
+
*
|
|
561
|
+
* @param {LayerSettings} layer - Specifies the layer settings
|
|
562
|
+
* @returns {boolean} - Specifies whether the clustering is enabled in any marker settings.
|
|
563
|
+
* @private
|
|
564
|
+
*/
|
|
565
|
+
Marker.prototype.allowInnerClusterSetting = function (layer) {
|
|
566
|
+
var allowInnerClusterSetting = false;
|
|
567
|
+
for (var markerIndex = 0; markerIndex < layer.markerSettings.length; markerIndex++) {
|
|
568
|
+
if (layer.markerSettings[markerIndex].clusterSettings.allowClustering) {
|
|
569
|
+
allowInnerClusterSetting = true;
|
|
570
|
+
break;
|
|
571
|
+
}
|
|
572
|
+
}
|
|
573
|
+
return allowInnerClusterSetting;
|
|
574
|
+
};
|
|
503
575
|
/**
|
|
504
576
|
* @private
|
|
505
577
|
* @returns {void}
|
|
@@ -526,7 +598,6 @@ var Marker = /** @class */ (function () {
|
|
|
526
598
|
*/
|
|
527
599
|
Marker.prototype.destroy = function () {
|
|
528
600
|
this.maps = null;
|
|
529
|
-
this.trackElements = [];
|
|
530
601
|
this.markerSVGObject = null;
|
|
531
602
|
this.sameMarkerData = [];
|
|
532
603
|
this.initialMarkerCluster = [];
|
package/src/maps/maps-model.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Component, NotifyPropertyChanges, INotifyPropertyChanged, Property, Fetch } from '@syncfusion/ej2-base';import { EventHandler, Browser, EmitType, isNullOrUndefined, createElement, setValue, extend } from '@syncfusion/ej2-base';import { Event, remove, L10n, Collection, Internationalization, Complex } from '@syncfusion/ej2-base';import { ModuleDeclaration } from '@syncfusion/ej2-base';import { SvgRenderer } from '@syncfusion/ej2-svg-base';import { Size, createSvg, Point, removeElement, triggerShapeEvent, showTooltip, checkShapeDataFields, MapLocation, getMousePosition, calculateSize } from './utils/helper';import { getElement, removeClass, getTranslate, triggerItemSelectionEvent, mergeSeparateCluster, customizeStyle, querySelector } from './utils/helper';import { createStyle, getProcessedMarginValue } from './utils/helper';import { ZoomSettings, LegendSettings } from './model/base';import { LayerSettings, TitleSettings, Border, Margin, MapsAreaSettings, Annotation, CenterPosition } from './model/base';import { ZoomSettingsModel, LegendSettingsModel, LayerSettingsModel, BubbleSettingsModel, PolygonSettingsModel } from './model/base-model';import { MarkerSettingsModel, SelectionSettingsModel, InitialMarkerSelectionSettingsModel } from './model/base-model';import { TitleSettingsModel, BorderModel, MarginModel, CenterPositionModel, InitialShapeSelectionSettingsModel } from './model/base-model';import { MapsAreaSettingsModel, AnnotationModel } from './model/base-model';import { Bubble } from './layers/bubble';import { Legend } from './layers/legend';import { Marker } from './layers/marker';import { Highlight } from './user-interaction/highlight';import { Selection } from './user-interaction/selection';import { MapsTooltip } from './user-interaction/tooltip';import { Zoom } from './user-interaction/zoom';import { load, click, onclick, rightClick, doubleClick, resize, shapeSelected, zoomIn } from './model/constants';import { ProjectionType, MapsTheme, PanDirection, TooltipGesture } from './utils/enum';import { getThemeStyle, Theme } from './model/theme';import { ILoadEventArgs, ILoadedEventArgs, IMinMaxLatitudeLongitude, IMouseEventArgs, IResizeEventArgs, ITooltipRenderEventArgs } from './model/interface';import { GeoPosition, ITooltipRenderCompleteEventArgs, ILegendRenderingEventArgs } from './model/interface';import { ILayerRenderingEventArgs, IShapeRenderingEventArgs, IMarkerRenderingEventArgs, IMarkerClickEventArgs } from './model/interface';import { IMarkerMoveEventArgs, ILabelRenderingEventArgs, IBubbleMoveEventArgs, IBubbleClickEventArgs } from './model/interface';import { IMarkerClusterClickEventArgs, IMarkerClusterMoveEventArgs, IMarkerClusterRenderingEventArgs } from './model/interface';import { ISelectionEventArgs, IShapeSelectedEventArgs, IMapPanEventArgs, IMapZoomEventArgs } from './model/interface';import { IBubbleRenderingEventArgs, IAnimationCompleteEventArgs, IPrintEventArgs, IThemeStyle } from './model/interface';import { LayerPanel } from './layers/layer-panel';import { GeoLocation, Rect, RectOption, measureText, getElementByID, MapAjax, processResult, getElementsByClassName } from '../maps/utils/helper';import { findPosition, textTrim, TextOption, renderTextElement, calculateZoomLevel, convertTileLatLongToPoint, convertGeoToPoint} from '../maps/utils/helper';import { Annotations } from '../maps/user-interaction/annotation';import { FontModel, DataLabel, MarkerSettings, IAnnotationRenderingEventArgs, IMarkerDragEventArgs, BingMap } from './index';import { NavigationLineSettingsModel, changeBorderWidth } from './index';import { NavigationLine } from './layers/navigation-selected-line';import { Polygon } from './layers/polygon';import { DataManager, Query } from '@syncfusion/ej2-data';import { ExportType } from '../maps/utils/enum';import { PdfPageOrientation } from '@syncfusion/ej2-pdf-export';import { Print } from './model/print';import { PdfExport } from './model/export-pdf';import { ImageExport } from './model/export-image';
|
|
1
|
+
import { Component, NotifyPropertyChanges, INotifyPropertyChanged, Property, Fetch } from '@syncfusion/ej2-base';import { EventHandler, Browser, EmitType, isNullOrUndefined, createElement, setValue, extend } from '@syncfusion/ej2-base';import { Event, remove, L10n, Collection, Internationalization, Complex } from '@syncfusion/ej2-base';import { ModuleDeclaration } from '@syncfusion/ej2-base';import { SvgRenderer } from '@syncfusion/ej2-svg-base';import { Size, createSvg, Point, removeElement, triggerShapeEvent, showTooltip, checkShapeDataFields, MapLocation, getMousePosition, calculateSize } from './utils/helper';import { getElement, removeClass, getTranslate, triggerItemSelectionEvent, mergeSeparateCluster, customizeStyle, querySelector } from './utils/helper';import { createStyle, getProcessedMarginValue } from './utils/helper';import { ZoomSettings, LegendSettings } from './model/base';import { LayerSettings, TitleSettings, Border, Margin, MapsAreaSettings, Annotation, CenterPosition } from './model/base';import { ZoomSettingsModel, LegendSettingsModel, LayerSettingsModel, BubbleSettingsModel, PolygonSettingsModel } from './model/base-model';import { MarkerSettingsModel, SelectionSettingsModel, InitialMarkerSelectionSettingsModel } from './model/base-model';import { TitleSettingsModel, BorderModel, MarginModel, CenterPositionModel, InitialShapeSelectionSettingsModel } from './model/base-model';import { MapsAreaSettingsModel, AnnotationModel } from './model/base-model';import { Bubble } from './layers/bubble';import { Legend } from './layers/legend';import { Marker } from './layers/marker';import { Highlight } from './user-interaction/highlight';import { Selection } from './user-interaction/selection';import { MapsTooltip } from './user-interaction/tooltip';import { Zoom } from './user-interaction/zoom';import { load, click, onclick, rightClick, doubleClick, resize, shapeSelected, zoomIn, mouseMove } from './model/constants';import { ProjectionType, MapsTheme, PanDirection, TooltipGesture } from './utils/enum';import { getThemeStyle, Theme } from './model/theme';import { ILoadEventArgs, ILoadedEventArgs, IMinMaxLatitudeLongitude, IMouseEventArgs, IMouseMoveEventArgs, IResizeEventArgs, ITooltipRenderEventArgs } from './model/interface';import { GeoPosition, ITooltipRenderCompleteEventArgs, ILegendRenderingEventArgs } from './model/interface';import { ILayerRenderingEventArgs, IShapeRenderingEventArgs, IMarkerRenderingEventArgs, IMarkerClickEventArgs } from './model/interface';import { IMarkerMoveEventArgs, ILabelRenderingEventArgs, IBubbleMoveEventArgs, IBubbleClickEventArgs } from './model/interface';import { IMarkerClusterClickEventArgs, IMarkerClusterMoveEventArgs, IMarkerClusterRenderingEventArgs } from './model/interface';import { ISelectionEventArgs, IShapeSelectedEventArgs, IMapPanEventArgs, IMapZoomEventArgs } from './model/interface';import { IBubbleRenderingEventArgs, IAnimationCompleteEventArgs, IPrintEventArgs, IThemeStyle } from './model/interface';import { LayerPanel } from './layers/layer-panel';import { GeoLocation, Rect, RectOption, measureText, getElementByID, MapAjax, processResult, getElementsByClassName } from '../maps/utils/helper';import { findPosition, textTrim, TextOption, renderTextElement, calculateZoomLevel, convertTileLatLongToPoint, convertGeoToPoint} from '../maps/utils/helper';import { Annotations } from '../maps/user-interaction/annotation';import { FontModel, DataLabel, MarkerSettings, IAnnotationRenderingEventArgs, IMarkerDragEventArgs, BingMap } from './index';import { NavigationLineSettingsModel, changeBorderWidth } from './index';import { NavigationLine } from './layers/navigation-selected-line';import { Polygon } from './layers/polygon';import { DataManager, Query } from '@syncfusion/ej2-data';import { ExportType } from '../maps/utils/enum';import { PdfPageOrientation } from '@syncfusion/ej2-pdf-export';import { Print } from './model/print';import { PdfExport } from './model/export-pdf';import { ImageExport } from './model/export-image';
|
|
2
2
|
import {ComponentModel} from '@syncfusion/ej2-base';
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -329,6 +329,13 @@ export interface MapsModel extends ComponentModel{
|
|
|
329
329
|
*/
|
|
330
330
|
markerMouseMove?: EmitType<IMarkerMoveEventArgs>;
|
|
331
331
|
|
|
332
|
+
/**
|
|
333
|
+
* This event is triggered when the mouse pointer moves over the map.
|
|
334
|
+
*
|
|
335
|
+
* @event mouseMove
|
|
336
|
+
*/
|
|
337
|
+
mouseMove?: EmitType<IMouseMoveEventArgs>;
|
|
338
|
+
|
|
332
339
|
/**
|
|
333
340
|
* Triggers before the data-label gets rendered.
|
|
334
341
|
*
|
package/src/maps/maps.d.ts
CHANGED
|
@@ -21,7 +21,7 @@ import { MapsTooltip } from './user-interaction/tooltip';
|
|
|
21
21
|
import { Zoom } from './user-interaction/zoom';
|
|
22
22
|
import { ProjectionType, MapsTheme, PanDirection, TooltipGesture } from './utils/enum';
|
|
23
23
|
import { MapsModel } from './maps-model';
|
|
24
|
-
import { ILoadEventArgs, ILoadedEventArgs, IMinMaxLatitudeLongitude, IMouseEventArgs, IResizeEventArgs, ITooltipRenderEventArgs } from './model/interface';
|
|
24
|
+
import { ILoadEventArgs, ILoadedEventArgs, IMinMaxLatitudeLongitude, IMouseEventArgs, IMouseMoveEventArgs, IResizeEventArgs, ITooltipRenderEventArgs } from './model/interface';
|
|
25
25
|
import { GeoPosition, ITooltipRenderCompleteEventArgs, ILegendRenderingEventArgs } from './model/interface';
|
|
26
26
|
import { ILayerRenderingEventArgs, IShapeRenderingEventArgs, IMarkerRenderingEventArgs, IMarkerClickEventArgs } from './model/interface';
|
|
27
27
|
import { IMarkerMoveEventArgs, ILabelRenderingEventArgs, IBubbleMoveEventArgs, IBubbleClickEventArgs } from './model/interface';
|
|
@@ -416,6 +416,12 @@ export declare class Maps extends Component<HTMLElement> implements INotifyPrope
|
|
|
416
416
|
* @event markerMouseMove
|
|
417
417
|
*/
|
|
418
418
|
markerMouseMove: EmitType<IMarkerMoveEventArgs>;
|
|
419
|
+
/**
|
|
420
|
+
* This event is triggered when the mouse pointer moves over the map.
|
|
421
|
+
*
|
|
422
|
+
* @event mouseMove
|
|
423
|
+
*/
|
|
424
|
+
mouseMove: EmitType<IMouseMoveEventArgs>;
|
|
419
425
|
/**
|
|
420
426
|
* Triggers before the data-label gets rendered.
|
|
421
427
|
*
|
|
@@ -536,8 +542,10 @@ export declare class Maps extends Component<HTMLElement> implements INotifyPrope
|
|
|
536
542
|
private resizeTo;
|
|
537
543
|
/**
|
|
538
544
|
* Resize the map
|
|
545
|
+
*
|
|
546
|
+
* @private
|
|
539
547
|
*/
|
|
540
|
-
|
|
548
|
+
isResize: boolean;
|
|
541
549
|
/**
|
|
542
550
|
* @private
|
|
543
551
|
*/
|
|
@@ -998,6 +1006,14 @@ export declare class Maps extends Component<HTMLElement> implements INotifyPrope
|
|
|
998
1006
|
* @private
|
|
999
1007
|
*/
|
|
1000
1008
|
mouseMoveOnMap(e: PointerEvent): void;
|
|
1009
|
+
/**
|
|
1010
|
+
* To check and trigger mouse move event on maps.
|
|
1011
|
+
*
|
|
1012
|
+
* @param {PointerEvent} e - Specifies the pointer event on maps.
|
|
1013
|
+
* @returns {void}
|
|
1014
|
+
* @private
|
|
1015
|
+
*/
|
|
1016
|
+
private mouseMoveEvent;
|
|
1001
1017
|
/**
|
|
1002
1018
|
* This method is used to perform operations when mouse move event is performed on maps.
|
|
1003
1019
|
*
|
|
@@ -1053,7 +1069,7 @@ export declare class Maps extends Component<HTMLElement> implements INotifyPrope
|
|
|
1053
1069
|
* @param {MarkerSettingsModel[]} markerCollection - Specifies the settings of the marker to be added.
|
|
1054
1070
|
* @returns {void}
|
|
1055
1071
|
*/
|
|
1056
|
-
addMarker(layerIndex
|
|
1072
|
+
addMarker(layerIndex?: number, markerCollection?: MarkerSettingsModel[]): void;
|
|
1057
1073
|
/**
|
|
1058
1074
|
* This method is used to select the geometric shape element in the maps.
|
|
1059
1075
|
*
|