From b4fc9cc11229924fd7520f21bf1f2592aa450c8a Mon Sep 17 00:00:00 2001
From: 张含笑 <zhx18749296735@163.com>
Date: Tue, 28 Oct 2025 15:16:13 +0800
Subject: [PATCH] feat:接口获取数据

---
 src/views/layerManagement/index.vue |   87 +++++++++++++++++++++----------------------
 1 files changed, 43 insertions(+), 44 deletions(-)

diff --git a/src/views/layerManagement/index.vue b/src/views/layerManagement/index.vue
index c70ace5..01dd32c 100644
--- a/src/views/layerManagement/index.vue
+++ b/src/views/layerManagement/index.vue
@@ -2,7 +2,7 @@
   <basic-container>
     <div class="layerContainer">
       <div>
-        <el-tabs v-model="activeName" @tab-click="handleClick">
+        <el-tabs v-model="activeType" @tab-click="handleClick">
           <el-tab-pane v-for="tab in tabData" :key="tab.type" :label="tab.name" :name="tab.type">
           </el-tab-pane>
         </el-tabs>
@@ -10,7 +10,7 @@
       <!-- 地图 -->
       <div class="mapContainer">
         <div id="layMap" class="ztzf-cesium"></div>
-        <leftList @update:coverData="handleCoverDataUpdate"></leftList>
+        <leftList @update:coverData="handleCoverDataUpdate" :activeName="activeName"></leftList>
       </div>
     </div>
   </basic-container>
@@ -24,7 +24,8 @@
 import { PublicCesium } from '@/utils/cesium/publicCesium';
 import _, { cloneDeep, throttle } from 'lodash';
 import { ElButton } from 'element-plus';
-const activeName = ref('0');
+const activeName = ref('电子围栏');
+const activeType = ref('0');
 const tabData = ref([
   {
     name: '电子围栏',
@@ -42,14 +43,31 @@
 
 const handleClick = tab => {
   const clickedTab = tabData.value.find(item => item.type === tab.paneName);
-  activeName.value = clickedTab.type;
-
+  activeType.value = clickedTab.type;
+  activeName.value = clickedTab.name;
 };
-const layerData = ref({
-  selectData:[],//选中的数据
-})
-provide('layerData', layerData)
-const selectDataList = ref([])
+// 解析 geo_data 并转换为 DrawPolygon 所需的坐标格式
+const parseGeoDataToPositions = (geoDataStr, altitude) => {
+  try {
+    // 解析 JSON 字符串为 GeoJSON 对象
+    const geoData = JSON.parse(geoDataStr);
+    // 仅处理 Polygon 类型的地理数据
+    if (geoData.type !== 'Polygon') return [];
+
+    // 提取 coordinates(取第一个面,忽略孔洞),并补充高度
+    const coordinates = geoData.coordinates[0];
+    return coordinates.map(([lng, lat]) => ({
+      lng: Number(lng),
+      lat: Number(lat),
+      height: Number(altitude) || 0, // 高度默认取数据中的 altitude,无则为 0
+    }));
+  } catch (error) {
+    console.error('解析 geo_data 失败:', error);
+    return [];
+  }
+};
+
+const selectDataList = ref([]);
 // 提取图斑坐标
 function polygonWktToTargetArray(wktPolygon, defaultHeight = 140.6) {
   try {
@@ -98,42 +116,30 @@
     return []; // 异常时返回空数组
   }
 }
- 
-const handleCoverDataUpdate = (data) => {
+
+const handleCoverDataUpdate = data => {
   selectDataList.value = data;
-  console.log('从子组件接收到的数据:', selectDataList.value);
-  
-  // 数据更新后立即加载到地图
+// console.log('获取的',selectDataList.value);
+
   if (selectDataList.value.length > 0) {
     loadDataToMap(selectDataList.value);
+  } else {
+    drawPolygonExample.removeEntities();
   }
 };
-// 加载数据到地图
-const loadDataToMap = (dataList) => {
+const loadDataToMap = dataList => {
   // 清空之前的绘制内容
   drawPolygonExample.removeEntities();
-  
-  //  遍历数据列表(支持多条数据,此处取第一条示例)
-  const targetData = dataList[0];
-  if (!targetData || !targetData.dkfw) return; // 检查数据和WKT字段是否存在
+  dataList.forEach(item => {
+    // 转换坐标格式
+    const positions = parseGeoDataToPositions(item.geo_data, item.altitude);
+    if (positions.length < 3) return; // 少于3个点无法构成多边形
 
-  const wktPoints = polygonWktToTargetArray(targetData.dkfw);
-  if (wktPoints.length < 3) {
-    console.error("解析后的坐标点不足3个,无法形成多边形");
-    return;
-  }
-  const positionsWithHeight = wktPoints.map(point => ({
-    ...point,
-    height: 140.6 
-  }));
-
-
-  drawPolygonExample.initPolygon(
-    viewer,                // Cesium viewer 实例
-    positionsWithHeight,   // 带高程的经纬度坐标数组
-    false                  // 是否纯预览模式(false 表示可编辑)
-  );
+    // 调用 DrawPolygon 的 initPolygon 方法渲染多边形
+    drawPolygonExample.initPolygon(viewer, positions, true);
+  });
 };
+
 let publicCesiumInstance = null;
 let viewer = null;
 const viewInstance = shallowRef(null);
@@ -156,13 +162,6 @@
   viewInstance.value = publicCesiumInstance;
   drawPolygonExample.initHandler(viewer);
 };
-
-// // 开启绘制模式(按钮点击触发)
-// const startDraw = () => {
-//   // 清除之前的绘制内容,重新开启绘制
-//   drawPolygonExample.removeEntities();
-//   drawPolygonExample.startDrawing();
-// };
 
 // 处理绘制完成后的多边形坐标(示例)
 const loadPlanarRoute = async (positions = null, save = false) => {

--
Gitblit v1.9.3