gdmap-utils 1.2.3 → 1.2.5

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 (38) hide show
  1. package/.husky/pre-commit +1 -1
  2. package/.prettierrc.json +17 -17
  3. package/README.md +467 -2
  4. package/dist/index.js +127 -7
  5. package/dist/index.js.map +1 -1
  6. package/docs/classes/MapUtils.md +153 -0
  7. package/docs/functions/createMapUtils.md +18 -0
  8. package/docs/functions/initMapSource.md +14 -0
  9. package/docs/globals.md +11 -0
  10. package/examples/1_init.html +23 -23
  11. package/examples/2_mapInit.html +48 -48
  12. package/examples/3_MarkerLayer.html +565 -565
  13. package/examples/4_LabelMarkerLayer.html +574 -574
  14. package/examples/5_markerCluster.html +528 -0
  15. package/index.html +134 -134
  16. package/package.json +54 -51
  17. package/scripts/cleanDocs.js +220 -0
  18. package/scripts/mergeDocs.js +129 -0
  19. package/src/LayerManager.ts +17 -1
  20. package/src/MapSourceImport.ts +23 -23
  21. package/src/MapUtils.ts +198 -22
  22. package/src/gdMap/gdHelper.ts +113 -85
  23. package/src/index.ts +3 -1
  24. package/src/layers/baseMarkerLayer/LabelMarkerLayer.ts +240 -240
  25. package/src/layers/baseMarkerLayer/MarkerLayer.ts +208 -208
  26. package/src/layers/baseMarkerLayer/index.ts +369 -354
  27. package/src/layers/clusterMarkerLayer/MarkerClusterLayer.ts +53 -53
  28. package/src/layers/clusterMarkerLayer/index.ts +204 -177
  29. package/src/layers/index.ts +9 -9
  30. package/src/types/MapUtils.d.ts +53 -53
  31. package/src/types/amap.d.ts +11 -11
  32. package/src/types/{BaseMarkerLayer.d.ts → baseMarkerLayer.d.ts} +86 -87
  33. package/src/types/clusterMarkerLayer.d.ts +89 -88
  34. package/src/types/index.d.ts +14 -14
  35. package/tsconfig.json +26 -26
  36. package/typedoc.json +22 -0
  37. package/webpack.config.js +125 -126
  38. package/src/gdMap/gdHelper.js +0 -194
@@ -1,208 +1,208 @@
1
- import type { OverlaysLayer, mapIns, OverlayData } from '@/types/index.d';
2
- import { MapUtils } from '@/MapUtils';
3
- import type { MapUtilsConstructor } from '@/MapUtils';
4
-
5
- // 接口约束类暂时去掉implements OverlaysLayer<AMap.Marker, AMap.OverlayGroup>
6
- class MarkerLayer {
7
- rawLayer = new AMap.OverlayGroup();
8
-
9
- map: mapIns;
10
-
11
- events = new Map<AMap.EventType, () => void>();
12
-
13
- constructor(map: mapIns) {
14
- this.map = map;
15
- //@ts-ignore
16
- this.map.add(this.rawLayer);
17
- }
18
-
19
- /**
20
- * 将覆盖物数据转换为标记配置
21
- * @param item 覆盖物数据
22
- * @param index 索引
23
- * @param getIconUrl 获取图标URL的方法
24
- * @param getOverlayOpts 动态获取覆盖物配置的方法
25
- * @param MapUtils MapUtils构造函数
26
- * @returns 标记配置
27
- */
28
- static convertOverlayDataToOvlOpts<U extends {}>(
29
- item: OverlayData<U>,
30
- index: number,
31
- getIconUrl: (item: OverlayData<U>) => string,
32
- getOverlayOpts: (
33
- item: OverlayData<U>,
34
- index: number,
35
- MapUtils: MapUtilsConstructor
36
- ) => any,
37
- MapUtils: MapUtilsConstructor
38
- ): AMap.MarkerOptions {
39
- const {
40
- overlayData: { lon, lat, extData },
41
- } = item;
42
-
43
- // 获取当前覆盖物项的动态配置
44
- const itemOpts = getOverlayOpts(item, index, MapUtils);
45
-
46
- const ovlOpts: AMap.MarkerOptions = {
47
- position: [lon, lat],
48
- extData,
49
- ...itemOpts,
50
- };
51
-
52
- if (!item.labelShowed) {
53
- ovlOpts.label = undefined;
54
- } else {
55
- ovlOpts.label = ovlOpts.label ?? {
56
- content: `<div class="markerLayer">${item.overlayData.title}</div>`,
57
- offset: MapUtils.Pixel(0, -5),
58
- direction: 'top',
59
- };
60
- }
61
-
62
- ovlOpts.icon =
63
- ovlOpts.icon ??
64
- MapUtils.createIcon({
65
- size: [25, 34],
66
- image: '',
67
- imageSize: [25, 34],
68
- imageOffset: [0, 0],
69
- });
70
-
71
- const imageUrl = getIconUrl(item);
72
-
73
- if (typeof ovlOpts.icon === 'string') {
74
- ovlOpts.icon = imageUrl;
75
- } else {
76
- (ovlOpts.icon as AMap.Icon).setImage(imageUrl);
77
- }
78
-
79
- return ovlOpts as AMap.MarkerOptions;
80
- }
81
-
82
- bindEventOverlay(clickType: AMap.EventType, callback: () => void) {
83
- if (typeof callback !== 'function') {
84
- MapUtils.error('Please provide an event callback function');
85
- return;
86
- }
87
-
88
- // 获取地图的所有点位,绑定上事件
89
- this.rawLayer.on(clickType, callback);
90
-
91
- // 保存事件
92
- this.events.set(clickType, callback);
93
- }
94
- //高德地图,marker新添加会自动绑定事件
95
- addOverlayBindEvent(marker: InstanceType<typeof AMap.Marker>) {
96
- this.events.forEach((callback, clickType) => {
97
- marker.on(clickType, callback);
98
- });
99
- }
100
-
101
- createOverlays(ovOptList: Array<AMap.MarkerOptions>) {
102
- const markers = ovOptList.map(item => MapUtils.createAMapMarker(item));
103
-
104
- this.rawLayer.addOverlays(markers);
105
-
106
- return markers;
107
- }
108
-
109
- add(markers: Array<AMap.MarkerOptions>) {
110
- this.createOverlays(markers);
111
- }
112
-
113
- remove(markers: Array<AMap.Marker>) {
114
- this.rawLayer.removeOverlays(markers);
115
- }
116
-
117
- hide() {
118
- this.rawLayer.hide();
119
- }
120
-
121
- show() {
122
- this.rawLayer.show();
123
- }
124
-
125
- getAllOverlay(): Array<AMap.Marker> {
126
- return this.rawLayer.getOverlays();
127
- }
128
-
129
- destroy() {
130
- this.rawLayer.clearOverlays();
131
- //@ts-expect-error
132
- this.rawLayer.setMap(null);
133
- //@ts-expect-error
134
- this.rawLayer = null;
135
- }
136
-
137
- reload() {
138
- this.rawLayer.clearOverlays();
139
- }
140
-
141
- clearAllOvl() {
142
- this.rawLayer.clearOverlays();
143
- }
144
-
145
- overlayFitMap() {
146
- const makers = this.getAllOverlay();
147
-
148
- this.map.setFitView(makers);
149
- }
150
-
151
- findLayerOverlay(markerId: string | number) {
152
- if (!markerId) {
153
- MapUtils.error('Please provide a markerId');
154
- return;
155
- }
156
-
157
- const markers: InstanceType<typeof AMap.Marker>[] = this.getAllOverlay();
158
-
159
- const marker = markers.find(item => {
160
- return item.getExtData().id === markerId;
161
- });
162
-
163
- return marker; // 如果没有找到,返回null
164
- }
165
-
166
- // 设置激活的marker
167
- refreshOverlayIcon(
168
- marker: InstanceType<typeof AMap.Marker>,
169
- icon: string | AMap.Icon
170
- ) {
171
- if (!marker) {
172
- // 如果没有找到对应的marker
173
- return MapUtils.error('marker is not found');
174
- }
175
- // 获取点击的标记对象
176
- marker.setIcon(icon);
177
- }
178
-
179
- /*
180
- DOM过多页面会卡顿, 用到才创建
181
- */
182
- refreshOverlayLabel(
183
- marker: InstanceType<typeof AMap.Marker>,
184
- labelOpts?: {
185
- content: string;
186
- direction: string;
187
- offset: [number, number] | Array<number>;
188
- }
189
- ) {
190
- if (!marker) {
191
- // 如果没有找到对应的marker
192
- return MapUtils.error('marker is not found');
193
- }
194
-
195
- if (labelOpts) {
196
- marker.setLabel(labelOpts);
197
- } else {
198
- let labelOpts = marker.getLabel();
199
-
200
- marker.setLabel({
201
- ...labelOpts,
202
- content: '',
203
- });
204
- }
205
- }
206
- }
207
-
208
- export default MarkerLayer;
1
+ import type { OverlaysLayer, mapIns, OverlayData } from '@/types/index.d';
2
+ import { MapUtils } from '@/MapUtils';
3
+ import type { MapUtilsConstructor } from '@/MapUtils';
4
+
5
+ // 接口约束类暂时去掉implements OverlaysLayer<AMap.Marker, AMap.OverlayGroup>
6
+ class MarkerLayer {
7
+ rawLayer = new AMap.OverlayGroup();
8
+
9
+ map: mapIns;
10
+
11
+ events = new Map<AMap.EventType, () => void>();
12
+
13
+ constructor(map: mapIns) {
14
+ this.map = map;
15
+ //@ts-ignore
16
+ this.map.add(this.rawLayer);
17
+ }
18
+
19
+ /**
20
+ * 将覆盖物数据转换为标记配置
21
+ * @param item 覆盖物数据
22
+ * @param index 索引
23
+ * @param getIconUrl 获取图标URL的方法
24
+ * @param getOverlayOpts 动态获取覆盖物配置的方法
25
+ * @param MapUtils MapUtils构造函数
26
+ * @returns 标记配置
27
+ */
28
+ static convertOverlayDataToOvlOpts<U extends {}>(
29
+ item: OverlayData<U>,
30
+ index: number,
31
+ getIconUrl: (item: OverlayData<U>) => string,
32
+ getOverlayOpts: (
33
+ item: OverlayData<U>,
34
+ index: number,
35
+ MapUtils: MapUtilsConstructor
36
+ ) => any,
37
+ MapUtils: MapUtilsConstructor
38
+ ): AMap.MarkerOptions {
39
+ const {
40
+ overlayData: { lon, lat, extData },
41
+ } = item;
42
+
43
+ // 获取当前覆盖物项的动态配置
44
+ const itemOpts = getOverlayOpts(item, index, MapUtils);
45
+
46
+ const ovlOpts: AMap.MarkerOptions = {
47
+ position: [lon, lat],
48
+ extData,
49
+ ...itemOpts,
50
+ };
51
+
52
+ if (!item.labelShowed) {
53
+ ovlOpts.label = undefined;
54
+ } else {
55
+ ovlOpts.label = ovlOpts.label ?? {
56
+ content: `<div class="markerLayer">${item.overlayData.title}</div>`,
57
+ offset: MapUtils.Pixel(0, -5),
58
+ direction: 'top',
59
+ };
60
+ }
61
+
62
+ ovlOpts.icon =
63
+ ovlOpts.icon ??
64
+ MapUtils.createIcon({
65
+ size: [25, 34],
66
+ image: '',
67
+ imageSize: [25, 34],
68
+ imageOffset: [0, 0],
69
+ });
70
+
71
+ const imageUrl = getIconUrl(item);
72
+
73
+ if (typeof ovlOpts.icon === 'string') {
74
+ ovlOpts.icon = imageUrl;
75
+ } else {
76
+ (ovlOpts.icon as AMap.Icon).setImage(imageUrl);
77
+ }
78
+
79
+ return ovlOpts as AMap.MarkerOptions;
80
+ }
81
+
82
+ bindEventOverlay(clickType: AMap.EventType, callback: () => void) {
83
+ if (typeof callback !== 'function') {
84
+ MapUtils.error('Please provide an event callback function');
85
+ return;
86
+ }
87
+
88
+ // 获取地图的所有点位,绑定上事件
89
+ this.rawLayer.on(clickType, callback);
90
+
91
+ // 保存事件
92
+ this.events.set(clickType, callback);
93
+ }
94
+ //高德地图,marker新添加会自动绑定事件
95
+ addOverlayBindEvent(marker: InstanceType<typeof AMap.Marker>) {
96
+ this.events.forEach((callback, clickType) => {
97
+ marker.on(clickType, callback);
98
+ });
99
+ }
100
+
101
+ createOverlays(ovOptList: Array<AMap.MarkerOptions>) {
102
+ const markers = ovOptList.map(item => MapUtils.createAMapMarker(item));
103
+
104
+ this.rawLayer.addOverlays(markers);
105
+
106
+ return markers;
107
+ }
108
+
109
+ add(markers: Array<AMap.MarkerOptions>) {
110
+ this.createOverlays(markers);
111
+ }
112
+
113
+ remove(markers: Array<AMap.Marker>) {
114
+ this.rawLayer.removeOverlays(markers);
115
+ }
116
+
117
+ hide() {
118
+ this.rawLayer.hide();
119
+ }
120
+
121
+ show() {
122
+ this.rawLayer.show();
123
+ }
124
+
125
+ getAllOverlay(): Array<AMap.Marker> {
126
+ return this.rawLayer.getOverlays();
127
+ }
128
+
129
+ destroy() {
130
+ this.rawLayer.clearOverlays();
131
+ //@ts-expect-error
132
+ this.rawLayer.setMap(null);
133
+ //@ts-expect-error
134
+ this.rawLayer = null;
135
+ }
136
+
137
+ reload() {
138
+ this.rawLayer.clearOverlays();
139
+ }
140
+
141
+ clearAllOvl() {
142
+ this.rawLayer.clearOverlays();
143
+ }
144
+
145
+ overlayFitMap() {
146
+ const makers = this.getAllOverlay();
147
+
148
+ this.map.setFitView(makers);
149
+ }
150
+
151
+ findLayerOverlay(markerId: string | number) {
152
+ if (!markerId) {
153
+ MapUtils.error('Please provide a markerId');
154
+ return;
155
+ }
156
+
157
+ const markers: InstanceType<typeof AMap.Marker>[] = this.getAllOverlay();
158
+
159
+ const marker = markers.find(item => {
160
+ return item.getExtData().id === markerId;
161
+ });
162
+
163
+ return marker; // 如果没有找到,返回null
164
+ }
165
+
166
+ // 设置激活的marker
167
+ refreshOverlayIcon(
168
+ marker: InstanceType<typeof AMap.Marker>,
169
+ icon: string | AMap.Icon
170
+ ) {
171
+ if (!marker) {
172
+ // 如果没有找到对应的marker
173
+ return MapUtils.error('marker is not found');
174
+ }
175
+ // 获取点击的标记对象
176
+ marker.setIcon(icon);
177
+ }
178
+
179
+ /*
180
+ DOM过多页面会卡顿, 用到才创建
181
+ */
182
+ refreshOverlayLabel(
183
+ marker: InstanceType<typeof AMap.Marker>,
184
+ labelOpts?: {
185
+ content: string;
186
+ direction: string;
187
+ offset: [number, number] | Array<number>;
188
+ }
189
+ ) {
190
+ if (!marker) {
191
+ // 如果没有找到对应的marker
192
+ return MapUtils.error('marker is not found');
193
+ }
194
+
195
+ if (labelOpts) {
196
+ marker.setLabel(labelOpts);
197
+ } else {
198
+ let labelOpts = marker.getLabel();
199
+
200
+ marker.setLabel({
201
+ ...labelOpts,
202
+ content: '',
203
+ });
204
+ }
205
+ }
206
+ }
207
+
208
+ export default MarkerLayer;