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.
- package/.husky/pre-commit +1 -1
- package/.prettierrc.json +17 -17
- package/README.md +2 -50
- package/dist/index.js +1 -83
- package/dist/index.js.map +1 -1
- 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/index.html +134 -134
- package/package.json +48 -48
- package/src/LayerManager.ts +49 -49
- package/src/MapSourceImport.ts +23 -23
- package/src/MapUtils.ts +154 -154
- package/src/gdMap/gdHelper.js +194 -194
- package/src/gdMap/gdHelper.ts +85 -85
- package/src/gdMapUtils.js +377 -377
- package/src/index.ts +1 -1
- package/src/layers/baseMarkerLayer/LabelMarkerLayer.ts +238 -238
- package/src/layers/baseMarkerLayer/MarkerLayer.ts +206 -206
- package/src/layers/baseMarkerLayer/index.ts +354 -354
- package/src/{layers copy/MarkerClusterLayer.js → layers/clusterMarkerLayer/MarkerClusterLayer.js} +155 -155
- package/src/layers/{MarkerClusterLayer.ts → clusterMarkerLayer/MarkerClusterLayer.ts} +30 -30
- package/src/layers/index.ts +5 -5
- package/src/types/BaseMarkerLayer.d.ts +87 -87
- package/src/types/MapUtils.d.ts +53 -53
- package/src/types/amap.d.ts +11 -11
- package/src/types/index.d.ts +12 -12
- package/tsconfig.json +26 -26
- package/webpack.config.js +126 -126
- package/src/layers copy/LabelMarkerLayer.js +0 -122
- package/src/layers copy/MarkerLayer.js +0 -267
- package/src/layers copy/OverlayGroupManager.js +0 -254
- package/src/layers copy/index.ts +0 -0
|
@@ -1,267 +0,0 @@
|
|
|
1
|
-
import GdMapUtils from '@/utils/gdMap/gdMapUtils.js';
|
|
2
|
-
|
|
3
|
-
export default class MarkerLayer {
|
|
4
|
-
dataList = []; // 数据列表
|
|
5
|
-
|
|
6
|
-
// 去掉私密属性标识
|
|
7
|
-
updatePointerTimer = null;
|
|
8
|
-
|
|
9
|
-
layerInstance = null; // 图层实例
|
|
10
|
-
|
|
11
|
-
isLayerCreated = false; // 图层是否已创建
|
|
12
|
-
|
|
13
|
-
detectingPosition = null; //检测位置的变化
|
|
14
|
-
|
|
15
|
-
activeNames = [];
|
|
16
|
-
/**
|
|
17
|
-
* 经纬度坐标,用来描述地图上的一个点位置
|
|
18
|
-
* @param {Object} config 图层的config
|
|
19
|
-
* @param {Function} createOverlay 创建marker的方法
|
|
20
|
-
* @param {Function} noWrap requestCallback 拉去marker请求数据并按规定格式返回
|
|
21
|
-
* @param {Boolean} detectingPosition 是否检测位置变化
|
|
22
|
-
*/
|
|
23
|
-
constructor({
|
|
24
|
-
//!没有文档还需要了解内部细节,耗费时间精力
|
|
25
|
-
config,
|
|
26
|
-
createOverlay,
|
|
27
|
-
requestCallback,
|
|
28
|
-
detectingPosition = false,
|
|
29
|
-
}) {
|
|
30
|
-
this.config = config ?? {}; //保存图层配置
|
|
31
|
-
|
|
32
|
-
this.createOverlay = createOverlay;
|
|
33
|
-
|
|
34
|
-
this.requestCallback = requestCallback; //
|
|
35
|
-
|
|
36
|
-
this.detectingPosition = detectingPosition; // 是否检测位置变化
|
|
37
|
-
|
|
38
|
-
this.activeNames = [
|
|
39
|
-
...(this?.config?.extraActiveName ?? []),
|
|
40
|
-
this.config.name,
|
|
41
|
-
]; //! 图层啥时候激活
|
|
42
|
-
|
|
43
|
-
// 添加页面可见性变化监听
|
|
44
|
-
document.addEventListener(
|
|
45
|
-
'visibilitychange',
|
|
46
|
-
this.handleVisibilityChange.bind(this)
|
|
47
|
-
);
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
// 获取地图工具类实例
|
|
51
|
-
getGdMapUtilsIns(id = 'gisMap') {
|
|
52
|
-
return GdMapUtils.mapInstance.get(id);
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
// 处理页面可见性变化
|
|
56
|
-
handleVisibilityChange() {
|
|
57
|
-
const gdMapUtils = this.getGdMapUtilsIns();
|
|
58
|
-
if (document.hidden) {
|
|
59
|
-
// 页面隐藏时停止检测
|
|
60
|
-
this.stopDetectingPositionChange();
|
|
61
|
-
} else {
|
|
62
|
-
// 页面显示时启动检测
|
|
63
|
-
if (this.detectingPosition && this.layerInstance) {
|
|
64
|
-
this.startDetectingPositionChange(gdMapUtils);
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
// 创建图层
|
|
70
|
-
async createLayer(gdMapUtils) {
|
|
71
|
-
// 获取数据
|
|
72
|
-
this.dataList = await this.requestCallback();
|
|
73
|
-
|
|
74
|
-
if (!this.shouldCreationLayer(this.config.name)) return; // 接口请求缓慢,避免用户切换菜单
|
|
75
|
-
|
|
76
|
-
// 处理数据
|
|
77
|
-
this.dataList.forEach(item => {
|
|
78
|
-
this.createOverlay(gdMapUtils, this.config, item);
|
|
79
|
-
});
|
|
80
|
-
|
|
81
|
-
this.layerInstance = gdMapUtils.getOverlayGroupManager(
|
|
82
|
-
this.config.className
|
|
83
|
-
); // 获取图层对象
|
|
84
|
-
|
|
85
|
-
const markers = this.layerInstance.OverlayGroup.getOverlays();
|
|
86
|
-
//HACK 名字不够可读
|
|
87
|
-
gdMapUtils.trigger('markerShowed', markers);
|
|
88
|
-
|
|
89
|
-
//! 不需要响应click的marker如何处理
|
|
90
|
-
gdMapUtils.bindEventMarker(this.config.className, 'click', e => {
|
|
91
|
-
const marker = e.target;
|
|
92
|
-
|
|
93
|
-
if (marker.getExtData().type === this.config.className) {
|
|
94
|
-
this.layerInstance.resetActiveMarker(); // 重置激活的标记
|
|
95
|
-
this.layerInstance.setActiveMarker(marker); // 设置激活的标记
|
|
96
|
-
marker.setzIndex(1001);
|
|
97
|
-
gdMapUtils.trigger(
|
|
98
|
-
'pointerClick',
|
|
99
|
-
marker,
|
|
100
|
-
e,
|
|
101
|
-
gdMapUtils.map,
|
|
102
|
-
this.config
|
|
103
|
-
);
|
|
104
|
-
}
|
|
105
|
-
});
|
|
106
|
-
|
|
107
|
-
// 检测车辆经纬度是否发生变化
|
|
108
|
-
this.startDetectingPositionChange(gdMapUtils);
|
|
109
|
-
|
|
110
|
-
this.isLayerCreated = true; // 设置图层显示状态为true
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
// 显示图层
|
|
114
|
-
showLayer() {
|
|
115
|
-
if (
|
|
116
|
-
this.layerInstance &&
|
|
117
|
-
this.dataList.length &&
|
|
118
|
-
this.shouldCreationLayer()
|
|
119
|
-
) {
|
|
120
|
-
this.layerInstance.showOverlay(); // 显示图层
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
// 隐藏图层
|
|
125
|
-
hideLayer() {
|
|
126
|
-
if (this.layerInstance && this.dataList.length) {
|
|
127
|
-
this.layerInstance.hideOverlay(); // 隐藏图层
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
// 手动触发高亮某个点位
|
|
132
|
-
highlightMarker(id) {
|
|
133
|
-
const layerInstance = this.layerInstance;
|
|
134
|
-
|
|
135
|
-
if (!layerInstance) return; // 如果图层不存在,则不执行后续操作
|
|
136
|
-
|
|
137
|
-
const marker = layerInstance.findLayerMarker(id);
|
|
138
|
-
if (marker) {
|
|
139
|
-
layerInstance.resetActiveMarker(); // 重置激活的标记
|
|
140
|
-
layerInstance.setActiveMarker(marker); // 设置激活的标记
|
|
141
|
-
marker.setzIndex(1001); // 设置zIndex
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
// 由get 访问器描述符 相较于getter函数不能传递更多参数
|
|
146
|
-
shouldCreationLayer(activeName = this.config.name) {
|
|
147
|
-
return this.activeNames.includes(activeName);
|
|
148
|
-
}
|
|
149
|
-
// 启动检测车辆经纬度变化
|
|
150
|
-
startDetectingPositionChange(getGdMapUtilsIns) {
|
|
151
|
-
if (!this.layerInstance || !this.detectingPosition) return;
|
|
152
|
-
this.stopDetectingPositionChange(); //先停止在开启,避免多次执行
|
|
153
|
-
// 修改定时器属性引用
|
|
154
|
-
this.updatePointerTimer = setInterval(
|
|
155
|
-
() => this.updatePointer(getGdMapUtilsIns),
|
|
156
|
-
this.config.updateTime
|
|
157
|
-
);
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
// 停止检测车辆经纬度变化
|
|
161
|
-
stopDetectingPositionChange() {
|
|
162
|
-
// 修改定时器属性引用
|
|
163
|
-
clearInterval(this.updatePointerTimer);
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
// 更新车辆位置
|
|
167
|
-
async updatePointer(getGdMapUtilsIns) {
|
|
168
|
-
if (!this.layerInstance) return; // 如果图层不存在,则不执行后续操作
|
|
169
|
-
// 获取车辆数据
|
|
170
|
-
const newestDataList = await this.requestCallback();
|
|
171
|
-
|
|
172
|
-
if (this.config.name !== this.envSanStore.mapActiveType) return; // 接口请求缓慢,避免用户切换菜单
|
|
173
|
-
|
|
174
|
-
// 比较新旧数据,找出需要更新的标记
|
|
175
|
-
const changedData = this.differenceWith(newestDataList, this.dataList);
|
|
176
|
-
|
|
177
|
-
changedData.forEach(item => {
|
|
178
|
-
const marker = this.layerInstance.findLayerMarker(item.id);
|
|
179
|
-
|
|
180
|
-
const iconImage = item.extData.onLine
|
|
181
|
-
? this.config.onLineIcon
|
|
182
|
-
: this.config.icon;
|
|
183
|
-
// 激活图标不需要更新位置和图标
|
|
184
|
-
const activesMarkerIds = this.layerInstance.activesMarkerIds; // 获取激活的markerId
|
|
185
|
-
|
|
186
|
-
if (!activesMarkerIds.includes(item.id)) {
|
|
187
|
-
if (marker) {
|
|
188
|
-
//存在的marker需要更新位置和图标
|
|
189
|
-
|
|
190
|
-
marker.setPosition(getGdMapUtilsIns.LngLat(item.jd, item.wd));
|
|
191
|
-
|
|
192
|
-
const icon = getGdMapUtilsIns.createIcon(
|
|
193
|
-
this.config.size,
|
|
194
|
-
iconImage,
|
|
195
|
-
this.config.size
|
|
196
|
-
);
|
|
197
|
-
|
|
198
|
-
marker.setIcon(icon);
|
|
199
|
-
} else {
|
|
200
|
-
//没有的marker需要重新创建
|
|
201
|
-
this.createOverlay(getGdMapUtilsIns, iconImage, item);
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
});
|
|
205
|
-
|
|
206
|
-
this.dataList = newestDataList; // 更新数据列表
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
// 比较新旧数据,找出经纬度发生变化的项
|
|
210
|
-
differenceWith(newData, oldData) {
|
|
211
|
-
return newData.filter(nItem => {
|
|
212
|
-
const oldItem = oldData.find(oItem => oItem.id === nItem.id); // 没有直接返回
|
|
213
|
-
return !oldItem || nItem.jd !== oldItem.jd || nItem.wd !== oldItem.wd;
|
|
214
|
-
});
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
// 处理地图类型变化
|
|
218
|
-
handleMapTypeChange(newVal, oldVal, id) {
|
|
219
|
-
const gdMapUtils = this.getGdMapUtilsIns(id); // 获取地图实例
|
|
220
|
-
|
|
221
|
-
if (!gdMapUtils) return; // 如果地图实例不存在,则不执行后续操作
|
|
222
|
-
if (this.shouldCreationLayer(newVal)) {
|
|
223
|
-
if (this.isLayerCreated) {
|
|
224
|
-
this.showLayer(); // 显示图层
|
|
225
|
-
} else {
|
|
226
|
-
this.createLayer(gdMapUtils); // 创建图层
|
|
227
|
-
}
|
|
228
|
-
} else {
|
|
229
|
-
this.hideLayer(); // 隐藏图层
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
// 离开中转页时,停止检测车辆经纬度变化
|
|
233
|
-
if (this.shouldCreationLayer(oldVal) && !this.shouldCreationLayer(newVal)) {
|
|
234
|
-
this.stopDetectingPositionChange();
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
// 进入中转页时,启动检测车辆经纬度变化
|
|
238
|
-
if (this.shouldCreationLayer(newVal) && !this.shouldCreationLayer(oldVal)) {
|
|
239
|
-
this.startDetectingPositionChange(gdMapUtils);
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
// 销毁实例时移除事件监听
|
|
244
|
-
destroy() {
|
|
245
|
-
document.removeEventListener(
|
|
246
|
-
'visibilitychange',
|
|
247
|
-
this.handleVisibilityChange.bind(this)
|
|
248
|
-
);
|
|
249
|
-
|
|
250
|
-
this.layerInstance.OverlayGroup.clearOverlays();
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
// 获取所有marker
|
|
254
|
-
get markerList() {
|
|
255
|
-
//HACK 暂时注释掉
|
|
256
|
-
if (!this.layerInstance) return;
|
|
257
|
-
|
|
258
|
-
const markers = this.layerInstance.OverlayGroup.getOverlays();
|
|
259
|
-
|
|
260
|
-
return markers;
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
get dataOfLayer() {
|
|
264
|
-
return this.dataList;
|
|
265
|
-
}
|
|
266
|
-
}
|
|
267
|
-
// 扩展事件
|
|
@@ -1,254 +0,0 @@
|
|
|
1
|
-
import { addClassToDiv } from '@/utils/ruoyi.js';
|
|
2
|
-
export default class OverlayGroupManager {
|
|
3
|
-
//
|
|
4
|
-
|
|
5
|
-
_overlayType = null; //统一管理的marker类型
|
|
6
|
-
|
|
7
|
-
OverlayGroup = null; //分组管理对象
|
|
8
|
-
|
|
9
|
-
events = new Map(); //保存事件的集合
|
|
10
|
-
|
|
11
|
-
activesMarkerIds = []; //保存激活的marker集合
|
|
12
|
-
|
|
13
|
-
overlayActiveIcon = null; //激活的图标
|
|
14
|
-
|
|
15
|
-
overlayDefaultIcon = null;
|
|
16
|
-
|
|
17
|
-
allPointTitlesShow = false; //标识点位title是否打开
|
|
18
|
-
|
|
19
|
-
map = null; //图层关联的Map对象
|
|
20
|
-
// 构造函数
|
|
21
|
-
constructor(options) {
|
|
22
|
-
if (!options || AMap === undefined) {
|
|
23
|
-
return this.error('AMap is undefined or options is undefined');
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
const { overlayType, overlays, map } = options;
|
|
27
|
-
|
|
28
|
-
this.OverlayGroup = new AMap.OverlayGroup(overlays);
|
|
29
|
-
|
|
30
|
-
this._overlayType = overlayType; //图层类型
|
|
31
|
-
|
|
32
|
-
this.overlayActiveIcon = overlays?.activeIcon || null; //图层激活的图标
|
|
33
|
-
|
|
34
|
-
this.overlayDefaultIcon = overlays?.defaultIcon || null; //图层默认的图标
|
|
35
|
-
|
|
36
|
-
this.map = map; //保存图层关联的Map对象
|
|
37
|
-
|
|
38
|
-
this.OverlayGroup.setMap(map); //设置图层的地图对象
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
// 添加覆盖物
|
|
42
|
-
addOverlay(overlays) {
|
|
43
|
-
if (!overlays) {
|
|
44
|
-
this.error('请传入图层对象');
|
|
45
|
-
return;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
let overlayList = [].concat(overlays); // 处理传入的参数为数组
|
|
49
|
-
|
|
50
|
-
overlayList.forEach(item => {
|
|
51
|
-
this.addMarkerBindEvent(item); // 绑定事件
|
|
52
|
-
});
|
|
53
|
-
|
|
54
|
-
this.OverlayGroup.addOverlays(overlayList);
|
|
55
|
-
}
|
|
56
|
-
// 移除覆盖物
|
|
57
|
-
removeOverlay(overlays) {
|
|
58
|
-
if (!overlays) {
|
|
59
|
-
this.error('请传入图层对象');
|
|
60
|
-
return;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
let overlayList = [].concat(overlays); // 处理传入的参数为数组
|
|
64
|
-
|
|
65
|
-
this.OverlayGroup.removeOverlays(overlayList);
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
hideOverlay() {
|
|
69
|
-
this?.OverlayGroup?.hide();
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
showOverlay() {
|
|
73
|
-
this?.OverlayGroup?.show();
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
//给所有的marker绑定事件
|
|
77
|
-
bindEventMarker(clickType, callback) {
|
|
78
|
-
if (typeof callback !== 'function') {
|
|
79
|
-
this.error('请传入事件回调函数');
|
|
80
|
-
return;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
// 获取地图的所有点位,绑定上事件
|
|
84
|
-
this.OverlayGroup.on(clickType, callback);
|
|
85
|
-
|
|
86
|
-
// 保存事件
|
|
87
|
-
this.events.set(clickType, callback);
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
addMarkerBindEvent(marker) {
|
|
91
|
-
// 获取对应marker的事件,绑定给对应的marker
|
|
92
|
-
for (const element of this.events) {
|
|
93
|
-
// 遍历事件集合,给marker绑定事件
|
|
94
|
-
const [clickType, callback] = element;
|
|
95
|
-
|
|
96
|
-
marker.on(clickType, callback);
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
// 查找图层对象中的某一个marker
|
|
101
|
-
findLayerMarker(markerId) {
|
|
102
|
-
if (!markerId) {
|
|
103
|
-
this.error('请传入markerId');
|
|
104
|
-
return;
|
|
105
|
-
}
|
|
106
|
-
if (markerId instanceof AMap.Marker) {
|
|
107
|
-
return markerId; // 如果传入的是marker对象,直接返回
|
|
108
|
-
}
|
|
109
|
-
const marker = this.OverlayGroup.getOverlays().find(item => {
|
|
110
|
-
return item.getExtData().id === markerId;
|
|
111
|
-
});
|
|
112
|
-
|
|
113
|
-
return marker || null; // 如果没有找到,返回null
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
// 设置激活的marker
|
|
117
|
-
setActiveMarker(marker) {
|
|
118
|
-
if (this.overlayActiveIcon === null) return; //表明用户不需要激活
|
|
119
|
-
marker = this.findLayerMarker(marker); // 查找图层对象中的某一个marker
|
|
120
|
-
|
|
121
|
-
if (!marker) {
|
|
122
|
-
// 如果没有找到对应的marker
|
|
123
|
-
return this.error('marker is not found');
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
const curOpts = marker.getIcon()._opts;
|
|
127
|
-
|
|
128
|
-
const activeIcon = marker._originOpts.activeIcon;
|
|
129
|
-
|
|
130
|
-
const icon = this.createIcon(activeIcon, curOpts); // 创建新图标
|
|
131
|
-
|
|
132
|
-
// 获取点击的标记对象
|
|
133
|
-
marker.setIcon(icon);
|
|
134
|
-
|
|
135
|
-
const labelParams = marker.getLabel(); //保存配置
|
|
136
|
-
|
|
137
|
-
// 激活始终显示title
|
|
138
|
-
labelParams.content = labelParams.content.replace('display-none', '');
|
|
139
|
-
|
|
140
|
-
marker.setLabel(labelParams);
|
|
141
|
-
|
|
142
|
-
// 保存激活状态
|
|
143
|
-
this.activesMarkerIds.push(marker.getExtData().id);
|
|
144
|
-
}
|
|
145
|
-
//[ ] 待重构
|
|
146
|
-
toggleAllPointTitles(selector, val) {
|
|
147
|
-
// this.refreshMap(); //重新加载图层
|
|
148
|
-
const elms = document.querySelectorAll('.amap-marker'); //获取所有的marker元素
|
|
149
|
-
this.allPointTitlesShow = val;
|
|
150
|
-
if (!val) {
|
|
151
|
-
elms.forEach(elm => {
|
|
152
|
-
elm.querySelector(selector).classList.add('display-none');
|
|
153
|
-
elm.querySelector('.amap-marker-label').style.pointerEvents = 'none';
|
|
154
|
-
});
|
|
155
|
-
} else {
|
|
156
|
-
elms.forEach(elm => {
|
|
157
|
-
elm.querySelector(selector).classList.remove('display-none');
|
|
158
|
-
elm.querySelector('.amap-marker-label').style.pointerEvents = '';
|
|
159
|
-
});
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
//业务场景是单个图标为激活状态 重置激活的marker
|
|
164
|
-
resetActiveMarker() {
|
|
165
|
-
// 遍历所有的marker,重置 their icon
|
|
166
|
-
this.OverlayGroup.getOverlays().forEach(item => {
|
|
167
|
-
if (this.activesMarkerIds.includes(item.getExtData().id)) {
|
|
168
|
-
const curOpts = item.getIcon()._opts;
|
|
169
|
-
|
|
170
|
-
const defaultIcon = item._originOpts.defaultIcon;
|
|
171
|
-
|
|
172
|
-
const icon = this.createIcon(defaultIcon, curOpts); // 创建新图标
|
|
173
|
-
|
|
174
|
-
// 如果是激活的marker,重置图标
|
|
175
|
-
item.setIcon(icon); // 设置默认图标
|
|
176
|
-
|
|
177
|
-
let labelParams = item.getLabel();
|
|
178
|
-
if (!this.allPointTitlesShow) {
|
|
179
|
-
labelParams.content = addClassToDiv(
|
|
180
|
-
labelParams?.content || '',
|
|
181
|
-
'display-none'
|
|
182
|
-
);
|
|
183
|
-
} else {
|
|
184
|
-
labelParams.content = labelParams.content.replace('display-none', '');
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
item.setLabel(labelParams);
|
|
188
|
-
}
|
|
189
|
-
});
|
|
190
|
-
// 清空激活状态
|
|
191
|
-
this.activesMarkerIds = [];
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
// 获取点位存储的marker数据
|
|
195
|
-
getDataOfMarkers() {
|
|
196
|
-
if (!this.OverlayGroup) return [];
|
|
197
|
-
return this.OverlayGroup.getOverlays().map(item => item.getExtData());
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
// 错误提示
|
|
201
|
-
error(msg) {
|
|
202
|
-
console.error(`[OverlayGroupManager Error]:${msg}`);
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
//业务场景是单个图标为激活状态 重置激活的marker
|
|
206
|
-
resetActiveNavMarker() {
|
|
207
|
-
// 遍历所有的marker,重置 their icon
|
|
208
|
-
this.OverlayGroup.getOverlays().forEach(item => {
|
|
209
|
-
if (this.activesMarkerIds.includes(item.getExtData().id)) {
|
|
210
|
-
const curOpts = item.getIcon()._opts;
|
|
211
|
-
|
|
212
|
-
const markerOpts = item._opts;
|
|
213
|
-
|
|
214
|
-
const icon = this.createIcon(this.overlayDefaultIcon, curOpts); // 创建新图标
|
|
215
|
-
|
|
216
|
-
// 如果是激活的marker,重置图标
|
|
217
|
-
item.setIcon(icon); // 设置默认图标
|
|
218
|
-
|
|
219
|
-
item.setLabel(markerOpts.originLabel);
|
|
220
|
-
}
|
|
221
|
-
});
|
|
222
|
-
// 清空激活状态
|
|
223
|
-
this.activesMarkerIds = [];
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
const gdMixin = {
|
|
228
|
-
// 提取创建 Icon 的逻辑
|
|
229
|
-
createIcon(imageUrl, iconOpts) {
|
|
230
|
-
//HACK 单一原则
|
|
231
|
-
return new AMap.Icon({
|
|
232
|
-
image: imageUrl, // 图标图片 URL
|
|
233
|
-
size: new AMap.Size(...iconOpts.size), // 图标大小
|
|
234
|
-
imageSize: new AMap.Size(...iconOpts.imageSize), // 图片实际大小
|
|
235
|
-
});
|
|
236
|
-
},
|
|
237
|
-
};
|
|
238
|
-
|
|
239
|
-
// 混入mixin
|
|
240
|
-
Object.assign(OverlayGroupManager.prototype, gdMixin);
|
|
241
|
-
/*
|
|
242
|
-
责单一原则:
|
|
243
|
-
|
|
244
|
-
gdMixin 的职责是封装与 AMap.Icon 相关的逻辑,即创建图标。
|
|
245
|
-
setIcon 是直接操作 marker 对象的方法,属于业务逻辑的一部分,与 AMap.Icon 的创建逻辑分离更符合职责单一原则。
|
|
246
|
-
复用性
|
|
247
|
-
|
|
248
|
-
createIcon 方法可以在多个地方复用,例如在 setActiveMarker 和 resetActiveMarker 中。
|
|
249
|
-
setIcon 是直接操作 marker 的方法,通常只在特定的业务逻辑中使用,复用性较低。
|
|
250
|
-
代码清晰性:
|
|
251
|
-
|
|
252
|
-
将 setIcon 保留在业务逻辑中,可以让代码更直观,便于理解。
|
|
253
|
-
如果将其放入 gdMixin 中,可能会让混入的逻辑变得复杂,降低代码的可读性。
|
|
254
|
-
*/
|
package/src/layers copy/index.ts
DELETED
|
File without changes
|