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.
- package/.husky/pre-commit +1 -1
- package/.prettierrc.json +17 -17
- package/README.md +467 -2
- package/dist/index.js +127 -7
- package/dist/index.js.map +1 -1
- package/docs/classes/MapUtils.md +153 -0
- package/docs/functions/createMapUtils.md +18 -0
- package/docs/functions/initMapSource.md +14 -0
- package/docs/globals.md +11 -0
- package/examples/1_init.html +23 -23
- package/examples/2_mapInit.html +48 -48
- package/examples/3_MarkerLayer.html +565 -565
- package/examples/4_LabelMarkerLayer.html +574 -574
- package/examples/5_markerCluster.html +528 -0
- package/index.html +134 -134
- package/package.json +54 -51
- package/scripts/cleanDocs.js +220 -0
- package/scripts/mergeDocs.js +129 -0
- package/src/LayerManager.ts +17 -1
- package/src/MapSourceImport.ts +23 -23
- package/src/MapUtils.ts +198 -22
- package/src/gdMap/gdHelper.ts +113 -85
- package/src/index.ts +3 -1
- package/src/layers/baseMarkerLayer/LabelMarkerLayer.ts +240 -240
- package/src/layers/baseMarkerLayer/MarkerLayer.ts +208 -208
- package/src/layers/baseMarkerLayer/index.ts +369 -354
- package/src/layers/clusterMarkerLayer/MarkerClusterLayer.ts +53 -53
- package/src/layers/clusterMarkerLayer/index.ts +204 -177
- package/src/layers/index.ts +9 -9
- package/src/types/MapUtils.d.ts +53 -53
- package/src/types/amap.d.ts +11 -11
- package/src/types/{BaseMarkerLayer.d.ts → baseMarkerLayer.d.ts} +86 -87
- package/src/types/clusterMarkerLayer.d.ts +89 -88
- package/src/types/index.d.ts +14 -14
- package/tsconfig.json +26 -26
- package/typedoc.json +22 -0
- package/webpack.config.js +125 -126
- 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;
|