From 2784cbc55586099aa59ffb2b1080ac237fc96123 Mon Sep 17 00:00:00 2001
From: 张含笑 <zhx18749296735@163.com>
Date: Tue, 28 Oct 2025 11:41:28 +0800
Subject: [PATCH] feat:地图加载
---
src/views/layerManagement/index.vue | 93 ++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 89 insertions(+), 4 deletions(-)
diff --git a/src/views/layerManagement/index.vue b/src/views/layerManagement/index.vue
index 946e9bc..c70ace5 100644
--- a/src/views/layerManagement/index.vue
+++ b/src/views/layerManagement/index.vue
@@ -10,7 +10,7 @@
<!-- 地图 -->
<div class="mapContainer">
<div id="layMap" class="ztzf-cesium"></div>
- <leftList></leftList>
+ <leftList @update:coverData="handleCoverDataUpdate"></leftList>
</div>
</div>
</basic-container>
@@ -43,12 +43,97 @@
const handleClick = tab => {
const clickedTab = tabData.value.find(item => item.type === tab.paneName);
activeName.value = clickedTab.type;
- // console.log('Clicked tab data:', clickedTab);
+
};
const layerData = ref({
selectData:[],//选中的数据
})
provide('layerData', layerData)
+const selectDataList = ref([])
+// 提取图斑坐标
+function polygonWktToTargetArray(wktPolygon, defaultHeight = 140.6) {
+ try {
+ if (!/^POLYGON\(\([\d\s,.]+\)\)$/.test(wktPolygon)) {
+ throw new Error('输入不是有效的 WKT POLYGON 格式');
+ }
+
+ const coordStr = wktPolygon
+ .replace(/^POLYGON\(\(/, '')
+ .replace(/\)\)$/, '')
+ .trim();
+
+ const coordPairs = coordStr.split(/,\s*/).filter(pair => pair.trim() !== '');
+
+ const result = coordPairs.map(pair => {
+ const [lng, lat] = pair
+ .split(/\s+/)
+ .map(Number)
+ .filter(num => !isNaN(num));
+
+ if (
+ lng === undefined ||
+ lat === undefined ||
+ lng < -180 ||
+ lng > 180 ||
+ lat < -90 ||
+ lat > 90
+ ) {
+ throw new Error(`无效的经纬度对:${pair}`);
+ }
+
+ return {
+ lng: lng,
+ lat: lat,
+ longitude: lng, // 与 lng 一致
+ latitude: lat, // 与 lat 一致
+ };
+ });
+
+ const uniqueResult = Array.from(
+ new Map(result.map(item => [`${item.lng}-${item.lat}`, item])).values()
+ );
+
+ return uniqueResult;
+ } catch (error) {
+ return []; // 异常时返回空数组
+ }
+}
+
+const handleCoverDataUpdate = (data) => {
+ selectDataList.value = data;
+ console.log('从子组件接收到的数据:', selectDataList.value);
+
+ // 数据更新后立即加载到地图
+ if (selectDataList.value.length > 0) {
+ loadDataToMap(selectDataList.value);
+ }
+};
+// 加载数据到地图
+const loadDataToMap = (dataList) => {
+ // 清空之前的绘制内容
+ drawPolygonExample.removeEntities();
+
+ // 遍历数据列表(支持多条数据,此处取第一条示例)
+ const targetData = dataList[0];
+ if (!targetData || !targetData.dkfw) return; // 检查数据和WKT字段是否存在
+
+ 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 表示可编辑)
+ );
+};
let publicCesiumInstance = null;
let viewer = null;
const viewInstance = shallowRef(null);
@@ -82,7 +167,7 @@
// 处理绘制完成后的多边形坐标(示例)
const loadPlanarRoute = async (positions = null, save = false) => {
if (!positions || positions.length < 3) return;
- console.log('绘制的多边形顶点坐标(Cartesian3):', positions);
+ // console.log('绘制的多边形顶点坐标(Cartesian3):', positions);
//坐标转换
const cartographics = Cesium.Ellipsoid.WGS84.cartesianArrayToCartographicArray(positions);
const latLngPositions = cartographics.map(cartographic => ({
@@ -90,7 +175,7 @@
lat: Cesium.Math.toDegrees(cartographic.latitude),
height: cartographic.height || 0,
}));
- console.log('转换后的经纬度坐标:', latLngPositions);
+ // console.log('转换后的经纬度坐标:', latLngPositions);
};
const throttleLoadPlanarRoute = throttle(loadPlanarRoute, 200);
--
Gitblit v1.9.3