From 867d40310ee35d618dfd94a64dfb3df01106ce5e Mon Sep 17 00:00:00 2001
From: 罗广辉 <guanghui.luo@foxmail.com>
Date: Thu, 03 Apr 2025 10:26:20 +0800
Subject: [PATCH] fix: 未正确绑定
---
src/views/Home/useMapAggregation/useMapAggregation.js | 66 ++++++++++++++++++++------------
1 files changed, 41 insertions(+), 25 deletions(-)
diff --git a/src/views/Home/useMapAggregation/useMapAggregation.js b/src/views/Home/useMapAggregation/useMapAggregation.js
index 1617249..1e4f0b2 100644
--- a/src/views/Home/useMapAggregation/useMapAggregation.js
+++ b/src/views/Home/useMapAggregation/useMapAggregation.js
@@ -46,13 +46,10 @@
const store = useStore();
const userAreaCode = computed(() => store.state.user.userInfo.detail.areaCode);
const selectedAreaCode = computed(() => store.state.user.selectedAreaCode);
- const listenerHeight = () => {
- determineScaling();
- viewer.camera.moveEnd.addEventListener(determineScaling);
- };
+
// 确定缩放比例
- const determineScaling = index => {
+ const determineScaling = () => {
console.log('确定缩放比例');
if (!viewer) return;
let height = viewer.camera.positionCartographic.height;
@@ -64,6 +61,7 @@
active = item.name;
removeEntities();
removeLabel();
+ if (!item.gJson && !item.splashedList?.length) return;
item.gJson ? aggregation(item) : splashed(item);
renderOutline(item);
break;
@@ -71,6 +69,7 @@
}
};
+ // 转换为目录结构, 返回数组,
function convertToHierarchy(code) {
const codeStr = code.toString();
const provinceCode = codeStr.slice(0, 2) + '0000';
@@ -83,18 +82,20 @@
return [provinceCode, cityCode, code];
}
+ // 获取设备聚合
function getDeviceCount(areaCode) {
return getDeviceRegionCount({ areaCode }).then(res => {
- return (res?.data?.data || []).map(i=>({...i,type:'deviceAggregation'}));
+ return (res?.data?.data || [])
});
}
-
+ // 获取设备散点
function getDeviceList(areaCode) {
return getDeviceRegion({ areaCode }).then(res => {
return (res?.data?.data || []).map(i =>({...i,type}));
});
}
+ // 事件散点
let eventList = []
function processChildren(childrens) {
return (childrens || []).map(item => {
@@ -106,7 +107,6 @@
total_device_count: item.number,
region_code: item.id,
region_name: item.name,
- type:'eventAggregation'
};
if (arr.length !== 0) {
returnObj.childrens = arr;
@@ -115,6 +115,7 @@
});
}
+ // 获取事件聚合
function getMapEventCount(areaCode) {
return getMapEvents({ areaCode }).then(res => {
const resData= res?.data?.data
@@ -145,7 +146,10 @@
const injectData = (gJson, dataList) => {
return {
...gJson,
- features: gJson.features.map(item => ({ ...item, data: dataList.find(item1 => findFun(item1, item)) })),
+ features: gJson.features.map(item => {
+ const findData = dataList.find(item1 => findFun(item1, item))
+ return { ...item, data: {...findData,type: type + 'Aggregation'} }
+ }),
};
};
@@ -172,13 +176,15 @@
if (hierarchy.length === 1) {
const gJson1 = await getFiler(`${defaultDir}${jsonPath}/indexDistrict.json`);
const gJson2 = await getFiler(`${defaultDir}${jsonPath}/index.json`);
+
scalingJudgment[1].gJson = {
...gJson1,
- features: gJson1.features.map(item => ({
- ...item,
- data: list.flatMap(item => item.childrens || []).find(item1 => findFun(item1, item)),
- })),
+ features: gJson1.features.map(item => {
+ const findData = list.flatMap(item => item.childrens || []).find(item1 => findFun(item1, item))
+ return { ...item, data: {...findData,type: type + 'Aggregation'} }
+ }),
};
+ console.log(injectData(gJson2, list));
scalingJudgment[2].gJson = injectData(gJson2, list);
const { lng, lat } = getCenterPoint(gJson2.features.map(item => item.properties.center));
flyTo({ longitude: lng, latitude: lat }, 0, scalingJudgment[2].height);
@@ -208,7 +214,11 @@
watch(
selectedAreaCode,
async (newValue, oldValue) => {
- initMapData(newValue);
+ if (!viewer) return
+ viewer.scene.postRender.removeEventListener(determineScaling)
+ initMapData(newValue).then(()=>{
+ viewer.scene.postRender.addEventListener(determineScaling)
+ })
},
{ deep: true }
);
@@ -273,12 +283,15 @@
// 聚合机巢
const aggregation = (item, flyTo) => {
if (!item.gJson) return;
- const featuresList = item.gJson.features.map(item => ({
- name: item.properties.name,
- position: item.properties.center,
- data: item.data,
- id: item.region_code,
- }));
+ const featuresList = item.gJson.features.map(item1 => {
+ // const {lng,lat} = getCenterPoint(item1.geometry.coordinates[0][0])
+ return {
+ name: item1.properties.name,
+ position: item1.properties.center,
+ data: item1.data,
+ id: item1.region_code,
+ }
+ });
// 遍历特征并添加实体
featuresList.forEach(feature => {
if (!feature.position) return;
@@ -382,7 +395,7 @@
if (!positionC3) return;
removeLabel();
const customData = entity.properties.customData._value.data;
-
+ console.log('customData', customData);
switch (customData.type) {
case 'deviceAggregation':
viewer.scene.postRender.addEventListener(labelBoxRender);
@@ -423,7 +436,8 @@
const removeAll = () => {
removeEntities();
removeLabel();
- viewer.camera.moveEnd.removeEventListener(determineScaling);
+ // viewer.camera.moveEnd.removeEventListener(determineScaling);
+ viewer.scene.postRender.removeEventListener(determineScaling)
handler?.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK);
handler?.destroy();
viewer = null;
@@ -433,11 +447,14 @@
currentEntity = null;
};
const init = () => {
- initMapData(selectedAreaCode.value || userAreaCode.value);
viewer = window.$viewer;
+ viewer.scene.postRender.removeEventListener(determineScaling)
+ initMapData(selectedAreaCode.value || userAreaCode.value).then(()=>{
+ viewer.scene.postRender.addEventListener(determineScaling)
+ })
handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);
handler.setInputAction(singleMachineEvent, Cesium.ScreenSpaceEventType.LEFT_CLICK);
- listenerHeight();
+
};
onBeforeUnmount(() => {});
// onMounted(() => {
@@ -445,7 +462,6 @@
// viewer = window.$viewer;
// handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);
// handler.setInputAction(singleMachineEvent, Cesium.ScreenSpaceEventType.LEFT_CLICK);
- // listenerHeight();
// });
// });
--
Gitblit v1.9.3