From 3ec8d3625e6fb7614e2ec4bb02ed99a3cdf4cdb7 Mon Sep 17 00:00:00 2001
From: shuishen <1109946754@qq.com>
Date: Thu, 12 Feb 2026 11:28:47 +0800
Subject: [PATCH] Merge branch 'master' of http://139.196.74.78:10010/r/jagzwxm/ja_web

---
 applications/drone-command/src/components/map-container/common-cesium-map.vue |   42 +++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 41 insertions(+), 1 deletions(-)

diff --git a/applications/drone-command/src/components/map-container/common-cesium-map.vue b/applications/drone-command/src/components/map-container/common-cesium-map.vue
index e728ff2..33b95c8 100644
--- a/applications/drone-command/src/components/map-container/common-cesium-map.vue
+++ b/applications/drone-command/src/components/map-container/common-cesium-map.vue
@@ -3,6 +3,8 @@
 </template>
 
 <script setup>
+import * as Cesium from 'cesium'
+
 import { onBeforeUnmount, onMounted, watch } from 'vue'
 import { PublicCesium } from '@/utils/cesium/publicCesium'
 import { loadJaAdminBoundary, removeJaAdminBoundary } from '@/utils/cesium/adminBoundary'
@@ -172,11 +174,49 @@
 	})
 }
 
+const zoomToAdminBoundary = async () => {
+	if (!viewer) return
+	const resolveSources = () => {
+		if (adminBoundarySources) return adminBoundarySources
+		const boundarySource = viewer.dataSources.getByName(ADMIN_BOUNDARY_NAMES.boundary)?.[0] ?? null
+		const lineSource = viewer.dataSources.getByName(ADMIN_BOUNDARY_NAMES.line)?.[0] ?? null
+		const labelSource = viewer.dataSources.getByName(ADMIN_BOUNDARY_NAMES.label)?.[0] ?? null
+		if (boundarySource || lineSource || labelSource) {
+			adminBoundarySources = { boundarySource, lineSource, labelSource }
+		}
+		return adminBoundarySources
+	}
+	let sources = resolveSources()
+	if (!sources?.boundarySource) {
+		sources = await loadJaAdminBoundary(viewer, { zoomTo: false })
+		adminBoundarySources = sources
+	}
+	const target = sources?.boundarySource
+	if (!target) return
+	await viewer.flyTo(target, {
+		duration: 0,
+		offset: new Cesium.HeadingPitchRange(0, Cesium.Math.toRadians(-75), 0),
+	})
+}
+
 const getMap = () => ({ viewer, publicCesium: viewInstance })
 const getViewer = () => viewer
 const getPublicCesium = () => viewInstance
 
-defineExpose({ getMap, getViewer, getPublicCesium, setAdminBoundaryVisible })
+const flyToPoint = (options) => {
+	const { longitude, latitude, height } = options.position
+
+	viewer.camera.setView({
+		destination: Cesium.Cartesian3.fromDegrees(longitude, latitude, height),
+		orientation: {
+			heading: Cesium.Math.toRadians(0), // 方向
+			pitch: Cesium.Math.toRadians(-90), // 仰角
+			roll: Cesium.Math.toRadians(0) // 翻滚角
+		}
+	})
+}
+
+defineExpose({ getMap, getViewer, getPublicCesium, flyToPoint, setAdminBoundaryVisible, zoomToAdminBoundary })
 </script>
 
 <style scoped lang="scss">

--
Gitblit v1.9.3