From 239294beefc5366087dbcf1fa09273a726cb08db Mon Sep 17 00:00:00 2001
From: 罗广辉 <guanghui.luo@foxmail.com>
Date: Sat, 31 Jan 2026 11:06:44 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 applications/drone-command/src/components/map-container/common-cesium-map.vue |   29 ++++++++++++++++++++++++++++-
 1 files changed, 28 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..5a93db0 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,36 @@
 	})
 }
 
+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 })
+defineExpose({ getMap, getViewer, getPublicCesium, setAdminBoundaryVisible, zoomToAdminBoundary })
 </script>
 
 <style scoped lang="scss">

--
Gitblit v1.9.3