gdmap-utils 1.2.0 → 1.2.2

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 (34) hide show
  1. package/.husky/pre-commit +1 -1
  2. package/.prettierrc.json +17 -17
  3. package/README.md +2 -50
  4. package/dist/index.js +1 -83
  5. package/dist/index.js.map +1 -1
  6. package/examples/1_init.html +23 -23
  7. package/examples/2_mapInit.html +48 -48
  8. package/examples/3_MarkerLayer.html +565 -565
  9. package/examples/4_LabelMarkerLayer.html +574 -574
  10. package/index.html +134 -134
  11. package/package.json +48 -48
  12. package/src/LayerManager.ts +49 -49
  13. package/src/MapSourceImport.ts +23 -23
  14. package/src/MapUtils.ts +154 -154
  15. package/src/gdMap/gdHelper.js +194 -194
  16. package/src/gdMap/gdHelper.ts +85 -85
  17. package/src/gdMapUtils.js +377 -377
  18. package/src/index.ts +1 -1
  19. package/src/layers/baseMarkerLayer/LabelMarkerLayer.ts +238 -238
  20. package/src/layers/baseMarkerLayer/MarkerLayer.ts +206 -206
  21. package/src/layers/baseMarkerLayer/index.ts +354 -354
  22. package/src/{layers copy/MarkerClusterLayer.js → layers/clusterMarkerLayer/MarkerClusterLayer.js} +155 -155
  23. package/src/layers/{MarkerClusterLayer.ts → clusterMarkerLayer/MarkerClusterLayer.ts} +30 -30
  24. package/src/layers/index.ts +5 -5
  25. package/src/types/BaseMarkerLayer.d.ts +87 -87
  26. package/src/types/MapUtils.d.ts +53 -53
  27. package/src/types/amap.d.ts +11 -11
  28. package/src/types/index.d.ts +12 -12
  29. package/tsconfig.json +26 -26
  30. package/webpack.config.js +126 -126
  31. package/src/layers copy/LabelMarkerLayer.js +0 -122
  32. package/src/layers copy/MarkerLayer.js +0 -267
  33. package/src/layers copy/OverlayGroupManager.js +0 -254
  34. package/src/layers copy/index.ts +0 -0
package/src/index.ts CHANGED
@@ -1 +1 @@
1
- export { initMapSource, createMapUtils, MapUtils } from './MapUtils';
1
+ export { initMapSource, createMapUtils, MapUtils } from './MapUtils';
@@ -1,238 +1,238 @@
1
- import type { OverlaysLayer, mapIns, OverlayData } from '@/types';
2
- import type { MapUtilsConstructor } from '@/MapUtils';
3
- import { MapUtils } from '@/MapUtils';
4
-
5
- class LabelMarkerLayer {
6
- rawLayer: AMap.LabelsLayer;
7
-
8
- map: mapIns;
9
-
10
- events = new Map<AMap.EventType, () => void>();
11
-
12
- constructor(map: mapIns, opts?: AMap.LabelsLayerOptions) {
13
- this.map = map;
14
-
15
- this.rawLayer = new AMap.LabelsLayer({
16
- collision: true,
17
- opacity: 1,
18
- zIndex: 120,
19
- allowCollision: true,
20
- ...opts,
21
- });
22
-
23
- this.map.add(this.rawLayer);
24
- }
25
-
26
- /**
27
- * 将覆盖物数据转换为标记配置
28
- * @param item 覆盖物数据
29
- * @param index 索引
30
- * @param getIconUrl 获取图标URL的方法
31
- * @param getOverlayOpts 动态获取覆盖物配置的方法
32
- * @param MapUtils MapUtils构造函数
33
- * @returns 标记配置
34
- */
35
- static convertOverlayDataToOvlOpts<U extends {}>(
36
- item: OverlayData<U>,
37
- index: number,
38
- getIconUrl: (item: OverlayData<U>) => string,
39
- getOverlayOpts: (
40
- item: OverlayData<U>,
41
- index: number,
42
- MapUtils: MapUtilsConstructor
43
- ) => any,
44
- MapUtils: MapUtilsConstructor
45
- ): AMap.LabelMarkerOptions {
46
- const {
47
- overlayData: { lon, lat, extData, title },
48
- } = item;
49
-
50
- // 获取当前覆盖物项的动态配置
51
- const itemOpts = getOverlayOpts(item, index, MapUtils);
52
-
53
- const ovlOpts: AMap.LabelMarkerOptions = {
54
- position: [lon, lat],
55
- extData,
56
- ...itemOpts,
57
- };
58
-
59
- if (!item.labelShowed) {
60
- const textOpts = ovlOpts.text ?? {
61
- content: title,
62
- direction: 'top',
63
- style: {
64
- fontSize: 16,
65
- strokeWidth: 5,
66
- },
67
- zooms: [5, 20],
68
- };
69
-
70
- textOpts.content = '';
71
-
72
- ovlOpts.text = textOpts;
73
- } else {
74
- ovlOpts.text = ovlOpts.text ?? {
75
- content: title,
76
- direction: 'top',
77
- style: {
78
- fontSize: 16,
79
- strokeWidth: 5,
80
- },
81
- zooms: [5, 20],
82
- };
83
- }
84
-
85
- const imageUrl = getIconUrl(item);
86
-
87
- const icon = {
88
- image: '',
89
- size: [25, 34] as [number, number],
90
- anchor: 'bottom-center',
91
- };
92
-
93
- ovlOpts.icon = ovlOpts.icon ?? icon;
94
-
95
- ovlOpts.icon.image = imageUrl;
96
-
97
- return ovlOpts as AMap.LabelMarkerOptions;
98
- }
99
-
100
- bindEventOverlay(clickType: AMap.EventType, callback: () => void) {
101
- if (typeof callback !== 'function') {
102
- MapUtils.error('Please provide an event callback function');
103
- return;
104
- }
105
-
106
- this.on(clickType, callback);
107
-
108
- this.events.set(clickType, callback);
109
- }
110
-
111
- addOverlayBindEvent(marker: InstanceType<typeof AMap.LabelMarker>) {
112
- this.events.forEach((callback, clickType) => {
113
- marker.on(clickType, callback);
114
- });
115
- }
116
-
117
- createOverlays(ovOptList: Array<AMap.LabelMarkerOptions>) {
118
- const labelMarkers = ovOptList.map(item => {
119
- const labelMarker = new AMap.LabelMarker(item); //包装吗?
120
- this.addOverlayBindEvent(labelMarker);
121
- return labelMarker;
122
- });
123
-
124
- //@ts-expect-error
125
- this.rawLayer.add(labelMarkers);
126
-
127
- return labelMarkers;
128
- }
129
-
130
- add(markers: Array<AMap.LabelMarkerOptions>) {
131
- this.createOverlays(markers);
132
- }
133
-
134
- remove(markers: Array<AMap.LabelMarker>) {
135
- //@ts-expect-error
136
- this.rawLayer.remove(markers);
137
- }
138
-
139
- hide() {
140
- this.rawLayer.hide();
141
- }
142
-
143
- show() {
144
- this.rawLayer.show();
145
- }
146
-
147
- getAllOverlay(): AMap.LabelMarker[] {
148
- //@ts-expect-error
149
- return this.rawLayer.getAllOverlays();
150
- }
151
-
152
- destroy() {
153
- // @ts-expect-error
154
- this.rawLayer.clear();
155
-
156
- this.map.remove(this.rawLayer);
157
- }
158
-
159
- reload() {
160
- // @ts-expect-error
161
- this.rawLayer.clear();
162
- }
163
-
164
- clearAllOvl() {
165
- // @ts-expect-error
166
- this.rawLayer.clear();
167
- }
168
-
169
- overlayFitMap() {
170
- const labelMarkers = this.getAllOverlay();
171
- this.map.setFitView(labelMarkers);
172
- }
173
-
174
- findLayerOverlay(markerId: string | number) {
175
- if (!markerId) {
176
- MapUtils.error('Please provide a markerId');
177
- return null;
178
- }
179
-
180
- const labelMarkers: InstanceType<typeof AMap.LabelMarker>[] =
181
- this.getAllOverlay();
182
-
183
- const labelMarker = labelMarkers.find(item => {
184
- return item.getExtData().id === markerId;
185
- });
186
-
187
- return labelMarker;
188
- }
189
-
190
- refreshOverlayIcon(
191
- labelMarker: InstanceType<typeof AMap.LabelMarker>,
192
- iconOpts: AMap.LabelMarkerIconOptions
193
- ) {
194
- if (!labelMarker) {
195
- MapUtils.error('labelMarker is not found');
196
- return;
197
- }
198
-
199
- labelMarker.setIcon(iconOpts);
200
- }
201
-
202
- refreshOverlayLabel(
203
- labelMarker: InstanceType<typeof AMap.LabelMarker>,
204
- labelOpts?: AMap.LabelMarkerTextOptions
205
- ) {
206
- if (!labelMarker) {
207
- MapUtils.error('labelMarker is not found');
208
- return;
209
- }
210
-
211
- if (labelOpts) {
212
- labelMarker.setText(labelOpts);
213
- } else {
214
- const currentLabel = labelMarker.getText();
215
- labelMarker.setText({
216
- ...currentLabel,
217
- content: '', //清空可以生效吗
218
- });
219
- }
220
- }
221
-
222
- /**
223
- *
224
- * labelLayer不存在on方法
225
- * @param {AMap.EventType} clickType 事件类型
226
- * @param {() => void} callback 事件函数
227
- * @memberof LabelMarkerLayer
228
- */
229
- on(clickType: AMap.EventType, callback: () => void) {
230
- const labelMarkers = this.getAllOverlay();
231
-
232
- labelMarkers.forEach(labelMarker => {
233
- labelMarker.on(clickType, callback);
234
- });
235
- }
236
- }
237
-
238
- export default LabelMarkerLayer;
1
+ import type { OverlaysLayer, mapIns, OverlayData } from '@/types';
2
+ import type { MapUtilsConstructor } from '@/MapUtils';
3
+ import { MapUtils } from '@/MapUtils';
4
+
5
+ class LabelMarkerLayer {
6
+ rawLayer: AMap.LabelsLayer;
7
+
8
+ map: mapIns;
9
+
10
+ events = new Map<AMap.EventType, () => void>();
11
+
12
+ constructor(map: mapIns, opts?: AMap.LabelsLayerOptions) {
13
+ this.map = map;
14
+
15
+ this.rawLayer = new AMap.LabelsLayer({
16
+ collision: true,
17
+ opacity: 1,
18
+ zIndex: 120,
19
+ allowCollision: true,
20
+ ...opts,
21
+ });
22
+
23
+ this.map.add(this.rawLayer);
24
+ }
25
+
26
+ /**
27
+ * 将覆盖物数据转换为标记配置
28
+ * @param item 覆盖物数据
29
+ * @param index 索引
30
+ * @param getIconUrl 获取图标URL的方法
31
+ * @param getOverlayOpts 动态获取覆盖物配置的方法
32
+ * @param MapUtils MapUtils构造函数
33
+ * @returns 标记配置
34
+ */
35
+ static convertOverlayDataToOvlOpts<U extends {}>(
36
+ item: OverlayData<U>,
37
+ index: number,
38
+ getIconUrl: (item: OverlayData<U>) => string,
39
+ getOverlayOpts: (
40
+ item: OverlayData<U>,
41
+ index: number,
42
+ MapUtils: MapUtilsConstructor
43
+ ) => any,
44
+ MapUtils: MapUtilsConstructor
45
+ ): AMap.LabelMarkerOptions {
46
+ const {
47
+ overlayData: { lon, lat, extData, title },
48
+ } = item;
49
+
50
+ // 获取当前覆盖物项的动态配置
51
+ const itemOpts = getOverlayOpts(item, index, MapUtils);
52
+
53
+ const ovlOpts: AMap.LabelMarkerOptions = {
54
+ position: [lon, lat],
55
+ extData,
56
+ ...itemOpts,
57
+ };
58
+
59
+ if (!item.labelShowed) {
60
+ const textOpts = ovlOpts.text ?? {
61
+ content: title,
62
+ direction: 'top',
63
+ style: {
64
+ fontSize: 16,
65
+ strokeWidth: 5,
66
+ },
67
+ zooms: [5, 20],
68
+ };
69
+
70
+ textOpts.content = '';
71
+
72
+ ovlOpts.text = textOpts;
73
+ } else {
74
+ ovlOpts.text = ovlOpts.text ?? {
75
+ content: title,
76
+ direction: 'top',
77
+ style: {
78
+ fontSize: 16,
79
+ strokeWidth: 5,
80
+ },
81
+ zooms: [5, 20],
82
+ };
83
+ }
84
+
85
+ const imageUrl = getIconUrl(item);
86
+
87
+ const icon = {
88
+ image: '',
89
+ size: [25, 34] as [number, number],
90
+ anchor: 'bottom-center',
91
+ };
92
+
93
+ ovlOpts.icon = ovlOpts.icon ?? icon;
94
+
95
+ ovlOpts.icon.image = imageUrl;
96
+
97
+ return ovlOpts as AMap.LabelMarkerOptions;
98
+ }
99
+
100
+ bindEventOverlay(clickType: AMap.EventType, callback: () => void) {
101
+ if (typeof callback !== 'function') {
102
+ MapUtils.error('Please provide an event callback function');
103
+ return;
104
+ }
105
+
106
+ this.on(clickType, callback);
107
+
108
+ this.events.set(clickType, callback);
109
+ }
110
+
111
+ addOverlayBindEvent(marker: InstanceType<typeof AMap.LabelMarker>) {
112
+ this.events.forEach((callback, clickType) => {
113
+ marker.on(clickType, callback);
114
+ });
115
+ }
116
+
117
+ createOverlays(ovOptList: Array<AMap.LabelMarkerOptions>) {
118
+ const labelMarkers = ovOptList.map(item => {
119
+ const labelMarker = new AMap.LabelMarker(item); //包装吗?
120
+ this.addOverlayBindEvent(labelMarker);
121
+ return labelMarker;
122
+ });
123
+
124
+ //@ts-expect-error
125
+ this.rawLayer.add(labelMarkers);
126
+
127
+ return labelMarkers;
128
+ }
129
+
130
+ add(markers: Array<AMap.LabelMarkerOptions>) {
131
+ this.createOverlays(markers);
132
+ }
133
+
134
+ remove(markers: Array<AMap.LabelMarker>) {
135
+ //@ts-expect-error
136
+ this.rawLayer.remove(markers);
137
+ }
138
+
139
+ hide() {
140
+ this.rawLayer.hide();
141
+ }
142
+
143
+ show() {
144
+ this.rawLayer.show();
145
+ }
146
+
147
+ getAllOverlay(): AMap.LabelMarker[] {
148
+ //@ts-expect-error
149
+ return this.rawLayer.getAllOverlays();
150
+ }
151
+
152
+ destroy() {
153
+ // @ts-expect-error
154
+ this.rawLayer.clear();
155
+
156
+ this.map.remove(this.rawLayer);
157
+ }
158
+
159
+ reload() {
160
+ // @ts-expect-error
161
+ this.rawLayer.clear();
162
+ }
163
+
164
+ clearAllOvl() {
165
+ // @ts-expect-error
166
+ this.rawLayer.clear();
167
+ }
168
+
169
+ overlayFitMap() {
170
+ const labelMarkers = this.getAllOverlay();
171
+ this.map.setFitView(labelMarkers);
172
+ }
173
+
174
+ findLayerOverlay(markerId: string | number) {
175
+ if (!markerId) {
176
+ MapUtils.error('Please provide a markerId');
177
+ return null;
178
+ }
179
+
180
+ const labelMarkers: InstanceType<typeof AMap.LabelMarker>[] =
181
+ this.getAllOverlay();
182
+
183
+ const labelMarker = labelMarkers.find(item => {
184
+ return item.getExtData().id === markerId;
185
+ });
186
+
187
+ return labelMarker;
188
+ }
189
+
190
+ refreshOverlayIcon(
191
+ labelMarker: InstanceType<typeof AMap.LabelMarker>,
192
+ iconOpts: AMap.LabelMarkerIconOptions
193
+ ) {
194
+ if (!labelMarker) {
195
+ MapUtils.error('labelMarker is not found');
196
+ return;
197
+ }
198
+
199
+ labelMarker.setIcon(iconOpts);
200
+ }
201
+
202
+ refreshOverlayLabel(
203
+ labelMarker: InstanceType<typeof AMap.LabelMarker>,
204
+ labelOpts?: AMap.LabelMarkerTextOptions
205
+ ) {
206
+ if (!labelMarker) {
207
+ MapUtils.error('labelMarker is not found');
208
+ return;
209
+ }
210
+
211
+ if (labelOpts) {
212
+ labelMarker.setText(labelOpts);
213
+ } else {
214
+ const currentLabel = labelMarker.getText();
215
+ labelMarker.setText({
216
+ ...currentLabel,
217
+ content: '', //清空可以生效吗
218
+ });
219
+ }
220
+ }
221
+
222
+ /**
223
+ *
224
+ * labelLayer不存在on方法
225
+ * @param {AMap.EventType} clickType 事件类型
226
+ * @param {() => void} callback 事件函数
227
+ * @memberof LabelMarkerLayer
228
+ */
229
+ on(clickType: AMap.EventType, callback: () => void) {
230
+ const labelMarkers = this.getAllOverlay();
231
+
232
+ labelMarkers.forEach(labelMarker => {
233
+ labelMarker.on(clickType, callback);
234
+ });
235
+ }
236
+ }
237
+
238
+ export default LabelMarkerLayer;