|
|
|
@ -23,13 +23,6 @@ interface ServiceInstances { |
|
|
|
fenceDrawService: FenceDrawService | null |
|
|
|
} |
|
|
|
|
|
|
|
interface LayerRefs { |
|
|
|
markerLayer: any |
|
|
|
rippleLayer: any |
|
|
|
trajectoryLayer: any |
|
|
|
fenceLayer: any |
|
|
|
} |
|
|
|
|
|
|
|
export const useMapServices = () => { |
|
|
|
// 服务实例状态
|
|
|
|
const services = reactive<ServiceInstances>({ |
|
|
|
@ -42,9 +35,6 @@ export const useMapServices = () => { |
|
|
|
fenceDrawService: null |
|
|
|
}) |
|
|
|
|
|
|
|
// 图层引用状态
|
|
|
|
const layerRefs = ref<LayerRefs | null>(null) |
|
|
|
|
|
|
|
/** |
|
|
|
* 初始化地图和图层 |
|
|
|
*/ |
|
|
|
@ -66,33 +56,16 @@ export const useMapServices = () => { |
|
|
|
services.fenceDrawService = new FenceDrawService(map) |
|
|
|
|
|
|
|
// 创建marker图层
|
|
|
|
const markerLayer = services.markerService.createMarkerLayer(props) |
|
|
|
services.markerService.createMarkerLayer(props) |
|
|
|
// 创建波纹图层
|
|
|
|
const rippleLayer = services.animationService.createRippleLayer( |
|
|
|
props.markers || [], |
|
|
|
props.enableCluster |
|
|
|
) |
|
|
|
services.animationService.createRippleLayer(props.markers || [], props.enableCluster) |
|
|
|
// 创建轨迹图层
|
|
|
|
const trajectoryLayer = services.trajectoryService.createTrajectoryLayer() |
|
|
|
services.trajectoryService.createTrajectoryLayer() |
|
|
|
// 创建围栏图层
|
|
|
|
const fenceLayer = services.fenceService.createFenceLayer(props.fences || []) |
|
|
|
|
|
|
|
// // 添加图层到地图
|
|
|
|
// map.addLayer(markerLayer)
|
|
|
|
map.addLayer(rippleLayer) |
|
|
|
map.addLayer(trajectoryLayer) |
|
|
|
map.addLayer(fenceLayer) |
|
|
|
|
|
|
|
services.fenceService.createFenceLayer(props.fences || []) |
|
|
|
// 初始化围栏绘制服务
|
|
|
|
services.fenceDrawService.createDrawLayer() |
|
|
|
|
|
|
|
// 存储图层引用
|
|
|
|
layerRefs.value = { |
|
|
|
markerLayer, |
|
|
|
rippleLayer, |
|
|
|
trajectoryLayer, |
|
|
|
fenceLayer |
|
|
|
} |
|
|
|
return { |
|
|
|
map, |
|
|
|
popupOverlay |
|
|
|
@ -103,18 +76,12 @@ export const useMapServices = () => { |
|
|
|
* 设置标记显示状态 |
|
|
|
*/ |
|
|
|
const setMarkersVisible = (visible: boolean) => { |
|
|
|
if (!layerRefs.value || !services.animationService) return |
|
|
|
|
|
|
|
const { markerLayer, rippleLayer } = layerRefs.value |
|
|
|
|
|
|
|
if (visible) { |
|
|
|
markerLayer.setVisible(true) |
|
|
|
rippleLayer.setVisible(true) |
|
|
|
services.animationService.startAnimation() |
|
|
|
services.markerService?.show() |
|
|
|
services.animationService?.show() |
|
|
|
} else { |
|
|
|
markerLayer.setVisible(false) |
|
|
|
rippleLayer.setVisible(false) |
|
|
|
services.animationService.stopAnimation() |
|
|
|
services.markerService?.hide() |
|
|
|
services.animationService?.hide() |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@ -139,9 +106,9 @@ export const useMapServices = () => { |
|
|
|
if (!services.fenceService) return |
|
|
|
|
|
|
|
if (visible) { |
|
|
|
services.fenceService.showFences() |
|
|
|
services.fenceService.show() |
|
|
|
} else { |
|
|
|
services.fenceService.hideFences() |
|
|
|
services.fenceService.hide() |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@ -174,20 +141,11 @@ export const useMapServices = () => { |
|
|
|
* 更新标记数据 |
|
|
|
*/ |
|
|
|
const updateMarkers = (markers: any[], currentProps?: MapProps) => { |
|
|
|
if ( |
|
|
|
services.markerService && |
|
|
|
services.animationService && |
|
|
|
layerRefs.value?.markerLayer && |
|
|
|
layerRefs.value?.rippleLayer |
|
|
|
) { |
|
|
|
if (services.markerService && services.animationService) { |
|
|
|
const map = services.mapService?.getMap() |
|
|
|
const enableCluster = currentProps?.enableCluster ?? true |
|
|
|
if (map) { |
|
|
|
// 从地图中移除旧的marker layer
|
|
|
|
// map.removeLayer(layerRefs.value.markerLayer)
|
|
|
|
// map.removeLayer(layerRefs.value.rippleLayer)
|
|
|
|
console.log('updateMarkers', markers); |
|
|
|
|
|
|
|
console.log('updateMarkers', markers) |
|
|
|
// 更新marker service(这会创建新的layer)
|
|
|
|
services.markerService.createMarkerLayer({ |
|
|
|
...currentProps, |
|
|
|
@ -196,17 +154,6 @@ export const useMapServices = () => { |
|
|
|
|
|
|
|
// 重新创建波纹图层
|
|
|
|
services.animationService.createRippleLayer(markers, enableCluster) |
|
|
|
|
|
|
|
// 获取新的layer并添加到地图
|
|
|
|
// const newMarkerLayer = services.markerService.getMarkerLayer()
|
|
|
|
// if (newMarkerLayer && newRippleLayer) {
|
|
|
|
// // // 确保markerService有最新的地图实例
|
|
|
|
// // services.markerService.setMap(map)
|
|
|
|
// map.addLayer(newMarkerLayer)
|
|
|
|
// map.addLayer(newRippleLayer)
|
|
|
|
// layerRefs.value.markerLayer = newMarkerLayer
|
|
|
|
// layerRefs.value.rippleLayer = newRippleLayer
|
|
|
|
// }
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
@ -248,9 +195,6 @@ export const useMapServices = () => { |
|
|
|
services.trajectoryService = null |
|
|
|
services.fenceService = null |
|
|
|
services.fenceDrawService = null |
|
|
|
|
|
|
|
// 重置图层引用
|
|
|
|
layerRefs.value = null |
|
|
|
} |
|
|
|
|
|
|
|
// 组件卸载时自动清理
|
|
|
|
@ -261,7 +205,6 @@ export const useMapServices = () => { |
|
|
|
return { |
|
|
|
// 状态
|
|
|
|
services, |
|
|
|
layerRefs, |
|
|
|
|
|
|
|
// 方法
|
|
|
|
|
|
|
|
|