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