From fb39a7bb69cc55d2e1ce61d47e0677aa40540f95 Mon Sep 17 00:00:00 2001
From: chenyao <1219716595@qq.com>
Date: Fri, 30 Jan 2026 16:20:33 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 applications/drone-command/src/utils/cesium/shapeTools/edit/EditBufferCircleTool.js |   45 +++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 41 insertions(+), 4 deletions(-)

diff --git a/applications/drone-command/src/views/areaManage/partition/shapeTools/edit/EditBufferCircleTool.js b/applications/drone-command/src/utils/cesium/shapeTools/edit/EditBufferCircleTool.js
similarity index 88%
rename from applications/drone-command/src/views/areaManage/partition/shapeTools/edit/EditBufferCircleTool.js
rename to applications/drone-command/src/utils/cesium/shapeTools/edit/EditBufferCircleTool.js
index 1808125..61e40b4 100644
--- a/applications/drone-command/src/views/areaManage/partition/shapeTools/edit/EditBufferCircleTool.js
+++ b/applications/drone-command/src/utils/cesium/shapeTools/edit/EditBufferCircleTool.js
@@ -9,6 +9,26 @@
 		lat: point.lat ?? point.latitude,
 	}))
 
+const resolveLngLat = point => {
+	if (!point) return null
+	const lng = point.lng ?? point.longitude
+	const lat = point.lat ?? point.latitude
+	if (Number.isFinite(lng) && Number.isFinite(lat)) {
+		return { lng: Number(lng), lat: Number(lat), height: Number(point.height) || 0 }
+	}
+	return null
+}
+
+const resolveCartesian = point => {
+	if (!point) return null
+	if (Number.isFinite(point.x) && Number.isFinite(point.y) && Number.isFinite(point.z)) {
+		return new Cesium.Cartesian3(point.x, point.y, point.z)
+	}
+	const lngLat = resolveLngLat(point)
+	if (!lngLat) return null
+	return Cesium.Cartesian3.fromDegrees(lngLat.lng, lngLat.lat, lngLat.height || 0)
+}
+
 export class EditBufferCircleTool extends ToolBase {
 	constructor(viewer) {
 		super(viewer)
@@ -34,10 +54,15 @@
 	start(data = []) {
 		const inputPoints = Array.isArray(data?.points) ? data.points : data
 		const normalized = normalizePoints(inputPoints)
-		if (!normalized.length) return
-		const centerLng = normalized.reduce((sum, p) => sum + p.lng, 0) / normalized.length
-		const centerLat = normalized.reduce((sum, p) => sum + p.lat, 0) / normalized.length
-		this.centerCartesian = Cesium.Cartesian3.fromDegrees(centerLng, centerLat)
+		const metaCenter = resolveCartesian(data?.meta?.center)
+		if (metaCenter) {
+			this.centerCartesian = metaCenter
+		} else {
+			if (!normalized.length) return
+			const centerLng = normalized.reduce((sum, p) => sum + p.lng, 0) / normalized.length
+			const centerLat = normalized.reduce((sum, p) => sum + p.lat, 0) / normalized.length
+			this.centerCartesian = Cesium.Cartesian3.fromDegrees(centerLng, centerLat)
+		}
 		const radii = Array.isArray(data?.meta?.bufferRadii) ? data.meta.bufferRadii : null
 		if (radii?.length) {
 			const [r1, r2, r3] = radii
@@ -124,6 +149,12 @@
 			meta: {
 				center: this.centerCartesian,
 				bufferRadii: [this.radiusLevel1, this.radiusLevel2, this.radiusLevel3],
+				controlPoints: [
+					this.centerCartesian,
+					this.getRadiusPoint(this.radiusLevel1),
+					this.getRadiusPoint(this.radiusLevel2),
+					this.getRadiusPoint(this.radiusLevel3),
+				],
 			},
 		})
 	}
@@ -256,6 +287,12 @@
 			meta: {
 				center: this.centerCartesian,
 				bufferRadii: [this.radiusLevel1, this.radiusLevel2, this.radiusLevel3],
+				controlPoints: [
+					this.centerCartesian,
+					this.getRadiusPoint(this.radiusLevel1),
+					this.getRadiusPoint(this.radiusLevel2),
+					this.getRadiusPoint(this.radiusLevel3),
+				],
 			},
 		}
 	}

--
Gitblit v1.9.3