From 6c4bd2467bb6651c6edcf8a9741dcd4e9b1aa6d3 Mon Sep 17 00:00:00 2001
From: 张含笑 <zhx18749296735@163.com>
Date: Fri, 30 Jan 2026 14:42:36 +0800
Subject: [PATCH] feat:权限按钮

---
 applications/drone-command/src/utils/cesium/DrawPolygon.js |   27 ++++++++++++++++++++-------
 1 files changed, 20 insertions(+), 7 deletions(-)

diff --git a/applications/drone-command/src/utils/cesium/DrawPolygon.js b/applications/drone-command/src/utils/cesium/DrawPolygon.js
index 4a4f10c..6bea7f4 100644
--- a/applications/drone-command/src/utils/cesium/DrawPolygon.js
+++ b/applications/drone-command/src/utils/cesium/DrawPolygon.js
@@ -2,7 +2,8 @@
 import * as turf from '@turf/turf'
 import { boxTransformScale } from '@/utils/turfFunc'
 import { ElMessage } from 'element-plus'
-import { flyVisual, getPointPositionsHeight } from '@/utils/cesium/mapUtil'
+import { getPointPositionsHeight } from '@/utils/cesium/mapUtil'
+import { flyVisual } from '@ztzf/utils'
 
 /**
  * 多边形绘制与编辑工具类
@@ -714,7 +715,8 @@
 		this.initHandler(viewer)
 		this.isPureSpotPreview = isPurePreview
 		this.startDrawing()
-		let newPosition = positions.map(item => {
+		const normalizedPositions = this.normalizePolygonPositions(positions)
+		let newPosition = normalizedPositions.map(item => {
 			return Cesium.Cartesian3.fromDegrees(Number(item.lng), Number(item.lat), Number(item?.height || 0))
 		})
 		// 预览航线的时候调用
@@ -727,17 +729,14 @@
 		})
 
 		// 视角飞入区域
-		const newBox = boxTransformScale(
-			positions.map(item => [item.lng, item.lat]),
-			5
-		)
+		const newBox = boxTransformScale(normalizedPositions.map(item => [item.lng, item.lat]), 5)
 		viewer.camera.flyTo({
 			destination: Cesium.Rectangle.fromDegrees(...newBox),
 			offset: new Cesium.HeadingPitchRange(0, Cesium.Math.toRadians(-90), 0),
 			duration: 0.5,
 		})
 
-		let pointList = await getPointPositionsHeight(positions, viewer)
+		let pointList = await getPointPositionsHeight(normalizedPositions, viewer)
 		flyVisual({ positionsData: pointList.map(item => [item.lng, item.lat, item.ASL]), viewer })
 
 		this.drawingMode = false
@@ -747,6 +746,20 @@
 		this.rebuildMidPoints()
 	}
 
+	// 规范化多边形点位:如果首尾重复,去掉末尾闭合点
+	normalizePolygonPositions(positions) {
+		if (!Array.isArray(positions) || positions.length < 2) return positions || []
+		const first = positions[0]
+		const last = positions[positions.length - 1]
+		const sameLng = Number(first?.lng) === Number(last?.lng)
+		const sameLat = Number(first?.lat) === Number(last?.lat)
+		const sameHeight = Number(first?.height || 0) === Number(last?.height || 0)
+		if (sameLng && sameLat && sameHeight) {
+			return positions.slice(0, -1)
+		}
+		return positions
+	}
+
 	// 初始化事件处理器
 	initHandler(viewer) {
 		this.viewer = viewer

--
Gitblit v1.9.3