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 |   70 +++++++++++++++++++++-------------
 1 files changed, 43 insertions(+), 27 deletions(-)

diff --git a/src/views/Home/useMapAggregation/useMapAggregation.js b/src/views/Home/useMapAggregation/useMapAggregation.js
index 5fd86b1..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
@@ -131,8 +132,8 @@
   const defaultDir =  `${VITE_APP_BASE}${VITE_APP_ENV === 'development' ? 'public/' : ''}geoJson/100000/`;
 
   const getFiler = async url => {
-    const gJson = await import(/* @vite-ignore */ url);
-    return JSON.parse(JSON.stringify(gJson));
+    const res = await fetch(url);
+    return  await res.json()
   };
   const getOutLine = async (jsonPathPre, hierarchy) => {
     const parentGJson = await getFiler(`${defaultDir}${jsonPathPre}/index.json`);
@@ -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