From 4cd17f4e640ae22ec64eb170468d1154d9a1eff5 Mon Sep 17 00:00:00 2001
From: 罗广辉 <guanghui.luo@foxmail.com>
Date: Sat, 31 Jan 2026 16:09:27 +0800
Subject: [PATCH] feat: 地图提示挪走

---
 applications/drone-command/src/utils/cesium/shapeTools/edit/EditEllipseTool.js                       |    8 +-
 packages/utils/map/index.js                                                                          |   25 +-------
 applications/drone-command/src/utils/cesium/shapeTools/draw/DrawEllipseTool.js                       |    2 
 applications/drone-command/src/utils/cesium/shapeTools/draw/DrawRectangleTool.js                     |    2 
 applications/drone-command/src/utils/cesium/shapeTools/draw/DrawPolygonTool.js                       |    7 -
 applications/drone-command/src/utils/cesium/shapeTools/edit/EditRectangleTool.js                     |    6 -
 applications/drone-command/src/views/areaManage/sceneManage/FormDiaLog.vue                           |   30 +++------
 packages/utils/map/MapTooltip.js                                                                     |   11 ---
 applications/drone-command/src/utils/cesium/shapeTools/index.js                                      |   12 +++
 applications/drone-command/src/views/areaManage/precinctInfo/FormDiaLog.vue                          |    2 
 applications/drone-command/src/views/detectionCountermeasure/detectionRange/DetectionRangeDialog.vue |   39 ++++---------
 applications/drone-command/src/utils/cesium/shapeTools/edit/EditPolygonTool.js                       |    7 -
 applications/drone-command/src/utils/cesium/shapeTools/edit/EditBufferCircleTool.js                  |    2 
 applications/drone-command/src/utils/cesium/shapeTools/draw/DrawBufferCircleTool.js                  |    2 
 14 files changed, 52 insertions(+), 103 deletions(-)

diff --git a/applications/drone-command/src/utils/cesium/shapeTools/draw/DrawBufferCircleTool.js b/applications/drone-command/src/utils/cesium/shapeTools/draw/DrawBufferCircleTool.js
index 937ce48..71e04c8 100644
--- a/applications/drone-command/src/utils/cesium/shapeTools/draw/DrawBufferCircleTool.js
+++ b/applications/drone-command/src/utils/cesium/shapeTools/draw/DrawBufferCircleTool.js
@@ -1,5 +1,5 @@
 import * as Cesium from 'cesium'
-import { MapTooltip } from '../Tooltip'
+import { MapTooltip } from '@ztzf/utils'
 import { ToolBase } from '../ToolBase'
 import { buildEllipsePositions } from '../shapeUtils'
 
diff --git a/applications/drone-command/src/utils/cesium/shapeTools/draw/DrawEllipseTool.js b/applications/drone-command/src/utils/cesium/shapeTools/draw/DrawEllipseTool.js
index 5f48d80..7cb42ca 100644
--- a/applications/drone-command/src/utils/cesium/shapeTools/draw/DrawEllipseTool.js
+++ b/applications/drone-command/src/utils/cesium/shapeTools/draw/DrawEllipseTool.js
@@ -1,5 +1,5 @@
 import * as Cesium from 'cesium'
-import { MapTooltip } from '../Tooltip'
+import { MapTooltip } from '@ztzf/utils'
 import { ToolBase } from '../ToolBase'
 import { buildEllipsePositions } from '../shapeUtils'
 
diff --git a/applications/drone-command/src/utils/cesium/shapeTools/draw/DrawPolygonTool.js b/applications/drone-command/src/utils/cesium/shapeTools/draw/DrawPolygonTool.js
index 9202105..3293890 100644
--- a/applications/drone-command/src/utils/cesium/shapeTools/draw/DrawPolygonTool.js
+++ b/applications/drone-command/src/utils/cesium/shapeTools/draw/DrawPolygonTool.js
@@ -1,5 +1,5 @@
 import * as Cesium from 'cesium'
-import { MapTooltip } from '../Tooltip'
+import { MapTooltip } from '@ztzf/utils'
 import { ToolBase } from '../ToolBase'
 
 const POINT_ENTITY_NAME = 'draw-polygon-point'
@@ -125,10 +125,7 @@
 
 		this.polygonEntity = this.dataSource.entities.add({
 			polygon: {
-				hierarchy: new Cesium.CallbackProperty(
-					() => new Cesium.PolygonHierarchy(getPreviewPositions()),
-					false
-				),
+				hierarchy: new Cesium.CallbackProperty(() => new Cesium.PolygonHierarchy(getPreviewPositions()), false),
 				material: this.style.fill,
 				outline: false,
 				heightReference: Cesium.HeightReference.CLAMP_TO_GROUND,
diff --git a/applications/drone-command/src/utils/cesium/shapeTools/draw/DrawRectangleTool.js b/applications/drone-command/src/utils/cesium/shapeTools/draw/DrawRectangleTool.js
index 574f6b6..bf89199 100644
--- a/applications/drone-command/src/utils/cesium/shapeTools/draw/DrawRectangleTool.js
+++ b/applications/drone-command/src/utils/cesium/shapeTools/draw/DrawRectangleTool.js
@@ -1,5 +1,5 @@
 import * as Cesium from 'cesium'
-import { MapTooltip } from '../Tooltip'
+import { MapTooltip } from '@ztzf/utils'
 import { ToolBase } from '../ToolBase'
 import { getBoundsFromCartesians, rectanglePositionsFromBounds } from '../shapeUtils'
 
diff --git a/applications/drone-command/src/utils/cesium/shapeTools/edit/EditBufferCircleTool.js b/applications/drone-command/src/utils/cesium/shapeTools/edit/EditBufferCircleTool.js
index 61e40b4..a12aaa3 100644
--- a/applications/drone-command/src/utils/cesium/shapeTools/edit/EditBufferCircleTool.js
+++ b/applications/drone-command/src/utils/cesium/shapeTools/edit/EditBufferCircleTool.js
@@ -1,5 +1,5 @@
 import * as Cesium from 'cesium'
-import { MapTooltip } from '../Tooltip'
+import { MapTooltip } from '@ztzf/utils'
 import { ToolBase } from '../ToolBase'
 import { buildEllipsePositions, cartesianToLocal } from '../shapeUtils'
 
diff --git a/applications/drone-command/src/utils/cesium/shapeTools/edit/EditEllipseTool.js b/applications/drone-command/src/utils/cesium/shapeTools/edit/EditEllipseTool.js
index 228eae3..7d41ec1 100644
--- a/applications/drone-command/src/utils/cesium/shapeTools/edit/EditEllipseTool.js
+++ b/applications/drone-command/src/utils/cesium/shapeTools/edit/EditEllipseTool.js
@@ -1,5 +1,5 @@
 import * as Cesium from 'cesium'
-import { MapTooltip } from '../Tooltip'
+import { MapTooltip } from '@ztzf/utils'
 import { ToolBase } from '../ToolBase'
 import {
 	getBoundsFromLngLats,
@@ -81,10 +81,8 @@
 			const minorFromMeta = Number.isFinite(meta?.semiMinor) ? Number(meta.semiMinor) : 0
 			const majorPoint = resolveCartographic(meta?.majorPoint)
 			const minorPoint = resolveCartographic(meta?.minorPoint)
-			const majorDistance =
-				majorFromMeta || (majorPoint ? getMetersBetween(centerCarto, majorPoint) : 0)
-			const minorDistance =
-				minorFromMeta || (minorPoint ? getMetersBetween(centerCarto, minorPoint) : 0)
+			const majorDistance = majorFromMeta || (majorPoint ? getMetersBetween(centerCarto, majorPoint) : 0)
+			const minorDistance = minorFromMeta || (minorPoint ? getMetersBetween(centerCarto, minorPoint) : 0)
 			if (majorDistance > 0) this.semiMajor = Math.max(1, majorDistance)
 			if (minorDistance > 0) this.semiMinor = Math.max(1, minorDistance)
 			if (this.semiMinor > this.semiMajor) this.semiMinor = this.semiMajor
diff --git a/applications/drone-command/src/utils/cesium/shapeTools/edit/EditPolygonTool.js b/applications/drone-command/src/utils/cesium/shapeTools/edit/EditPolygonTool.js
index 0e5cd6e..bdb7a1a 100644
--- a/applications/drone-command/src/utils/cesium/shapeTools/edit/EditPolygonTool.js
+++ b/applications/drone-command/src/utils/cesium/shapeTools/edit/EditPolygonTool.js
@@ -1,5 +1,5 @@
 import * as Cesium from 'cesium'
-import { MapTooltip } from '../Tooltip'
+import { MapTooltip } from '@ztzf/utils'
 import { ToolBase } from '../ToolBase'
 
 const POINT_ENTITY_NAME = 'edit-polygon-point'
@@ -101,10 +101,7 @@
 	createEntities() {
 		this.polygonEntity = this.dataSource.entities.add({
 			polygon: {
-				hierarchy: new Cesium.CallbackProperty(
-					() => new Cesium.PolygonHierarchy(this.positions),
-					false
-				),
+				hierarchy: new Cesium.CallbackProperty(() => new Cesium.PolygonHierarchy(this.positions), false),
 				material: this.style.fill,
 				outline: false,
 				heightReference: Cesium.HeightReference.CLAMP_TO_GROUND,
diff --git a/applications/drone-command/src/utils/cesium/shapeTools/edit/EditRectangleTool.js b/applications/drone-command/src/utils/cesium/shapeTools/edit/EditRectangleTool.js
index d7dc3cd..fd8f20e 100644
--- a/applications/drone-command/src/utils/cesium/shapeTools/edit/EditRectangleTool.js
+++ b/applications/drone-command/src/utils/cesium/shapeTools/edit/EditRectangleTool.js
@@ -1,5 +1,5 @@
 import * as Cesium from 'cesium'
-import { MapTooltip } from '../Tooltip'
+import { MapTooltip } from '@ztzf/utils'
 import { ToolBase } from '../ToolBase'
 import { getBoundsFromLngLats, rectanglePositionsFromBounds } from '../shapeUtils'
 
@@ -139,9 +139,7 @@
 	}
 
 	getCornerCartographics() {
-		return rectanglePositionsFromBounds(this.bounds).map(position =>
-			Cesium.Cartographic.fromCartesian(position)
-		)
+		return rectanglePositionsFromBounds(this.bounds).map(position => Cesium.Cartographic.fromCartesian(position))
 	}
 
 	getPositionFromScreen(screenPosition) {
diff --git a/applications/drone-command/src/utils/cesium/shapeTools/index.js b/applications/drone-command/src/utils/cesium/shapeTools/index.js
index 89f1ecc..53fd3a5 100644
--- a/applications/drone-command/src/utils/cesium/shapeTools/index.js
+++ b/applications/drone-command/src/utils/cesium/shapeTools/index.js
@@ -1,6 +1,14 @@
 export { DrawManager } from './DrawManager'
 export { EditManager } from './EditManager'
-export { buildEllipsePositions, getBoundsFromCartesians, getBoundsFromLngLats, rectanglePositionsFromBounds, getCenterFromBounds, getMetersBetween, cartesianToLocal } from './shapeUtils'
+export {
+	buildEllipsePositions,
+	getBoundsFromCartesians,
+	getBoundsFromLngLats,
+	rectanglePositionsFromBounds,
+	getCenterFromBounds,
+	getMetersBetween,
+	cartesianToLocal,
+} from './shapeUtils'
 export { DrawPolygonTool } from './draw/DrawPolygonTool'
 export { DrawRectangleTool } from './draw/DrawRectangleTool'
 export { DrawEllipseTool } from './draw/DrawEllipseTool'
@@ -10,4 +18,4 @@
 export { EditEllipseTool } from './edit/EditEllipseTool'
 export { EditBufferCircleTool } from './edit/EditBufferCircleTool'
 export { ToolBase } from './ToolBase'
-export { MapTooltip as Tooltip } from './Tooltip'
+export { MapTooltip as Tooltip } from '@ztzf/utils'
diff --git a/applications/drone-command/src/views/areaManage/precinctInfo/FormDiaLog.vue b/applications/drone-command/src/views/areaManage/precinctInfo/FormDiaLog.vue
index f698ff7..9875138 100644
--- a/applications/drone-command/src/views/areaManage/precinctInfo/FormDiaLog.vue
+++ b/applications/drone-command/src/views/areaManage/precinctInfo/FormDiaLog.vue
@@ -121,7 +121,7 @@
 import { saveOperationLog } from '@ztzf/apis'
 import { useRoute } from 'vue-router'
 import positionIcon from '@/assets/images/areaManage/positionIcon.png'
-import { MapTooltip } from '@/utils/cesium/shapeTools/Tooltip'
+import { MapTooltip } from '@ztzf/utils'
 
 const initForm = () => ({
 	address: '', // 位置
diff --git a/applications/drone-command/src/views/areaManage/sceneManage/FormDiaLog.vue b/applications/drone-command/src/views/areaManage/sceneManage/FormDiaLog.vue
index da80178..579e0f5 100644
--- a/applications/drone-command/src/views/areaManage/sceneManage/FormDiaLog.vue
+++ b/applications/drone-command/src/views/areaManage/sceneManage/FormDiaLog.vue
@@ -111,12 +111,7 @@
 						/>
 					</el-form-item>
 					<el-form-item label="指挥点位置" prop="longitude">
-						<el-input
-							class="command-input"
-							:model-value="commandPointText"
-							disabled
-							placeholder="请选择指挥点位置"
-						>
+						<el-input class="command-input" :model-value="commandPointText" disabled placeholder="请选择指挥点位置">
 							<template #suffix>
 								<span class="suffix-action">地图选点</span>
 							</template>
@@ -160,7 +155,7 @@
 import { buildEllipsePositions } from '@/utils/cesium/shapeTools'
 import { cartesian3Convert } from '@/utils/cesium/mapUtil'
 import { AREA_TYPE_STYLE_MAP, BUFFER_LEVEL_STYLES, DEFAULT_AREA_STYLE } from '@ztzf/constants'
-import { MapTooltip } from '@/utils/cesium/shapeTools/Tooltip'
+import { MapTooltip } from '@ztzf/utils'
 
 // 初始化表单数据
 const initForm = () => ({
@@ -175,12 +170,12 @@
 })
 
 const commandPointText = computed(() => {
-  // 你也可以改成 `${lng}, ${lat}`
-  if (!formData.value.longitude) {
-	return ''
-  }
-  return `${formData.value.longitude}, ${formData.value.latitude}`;
-});
+	// 你也可以改成 `${lng}, ${lat}`
+	if (!formData.value.longitude) {
+		return ''
+	}
+	return `${formData.value.longitude}, ${formData.value.latitude}`
+})
 
 const emit = defineEmits(['success'])
 const formRef = ref(null) // 表单实例
@@ -396,9 +391,7 @@
 					const resolved = resolveLngLatPoint(point)
 					const normalized = normalizeShapePoint(resolved)
 					if (!normalized) return
-					positions.push(
-						Cesium.Cartesian3.fromDegrees(normalized.lng, normalized.lat, normalized.height)
-					)
+					positions.push(Cesium.Cartesian3.fromDegrees(normalized.lng, normalized.lat, normalized.height))
 				})
 			}
 			if (shape?.drawType === 'buffer' && shape?.meta?.center && Array.isArray(shape?.meta?.bufferRadii)) {
@@ -538,7 +531,6 @@
 	sceneConfigList.value = res?.data?.data ?? []
 }
 
-
 // 获取场景配置名称
 function getSceneConfigName(id) {
 	if (!id) return ''
@@ -669,8 +661,7 @@
 	fitViewToSceneAreas()
 }
 
-onMounted(() => {
-})
+onMounted(() => {})
 
 watch(
 	() => formData.value.defenseSceneId,
@@ -689,7 +680,6 @@
 		}
 	}
 )
-
 
 defineExpose({
 	open,
diff --git a/applications/drone-command/src/views/detectionCountermeasure/detectionRange/DetectionRangeDialog.vue b/applications/drone-command/src/views/detectionCountermeasure/detectionRange/DetectionRangeDialog.vue
index b2fa130..446ff64 100644
--- a/applications/drone-command/src/views/detectionCountermeasure/detectionRange/DetectionRangeDialog.vue
+++ b/applications/drone-command/src/views/detectionCountermeasure/detectionRange/DetectionRangeDialog.vue
@@ -23,7 +23,7 @@
 			<div class="right-container">
 				<div class="header">
 					<span>{{ formTitle }}</span>
-				
+
 					<el-icon class="close-btn" @click.stop="visible = false"><Close /></el-icon>
 				</div>
 
@@ -88,34 +88,17 @@
 						</el-select>
 					</el-form-item>
 					<el-form-item label="设备位置" prop="deployLocation">
-						<el-input
-							class="command-input"
-							v-model="formData.deployLocation"
-							disabled
-							placeholder="请选择位置"
-						>
+						<el-input class="command-input" v-model="formData.deployLocation" disabled placeholder="请选择位置">
 							<template #suffix>
 								<span class="suffix-action">地图选点</span>
 							</template>
 						</el-input>
 					</el-form-item>
 					<el-form-item label="设备编号" prop="deviceSn">
-						<el-input
-							class="command-input"
-							v-model="formData.deviceSn"
-							disabled
-							placeholder="请输入"
-							clearable
-						/>
+						<el-input class="command-input" v-model="formData.deviceSn" disabled placeholder="请输入" clearable />
 					</el-form-item>
 					<el-form-item label="设备型号" prop="deviceModel">
-						<el-input
-							class="command-input"
-							v-model="formData.deviceModel"
-							disabled
-							placeholder="请输入"
-							clearable
-						/>
+						<el-input class="command-input" v-model="formData.deviceModel" disabled placeholder="请输入" clearable />
 					</el-form-item>
 					<el-form-item label="覆盖范围(m)" prop="effectiveRangeKm">
 						<el-input-number
@@ -130,7 +113,9 @@
 					</el-form-item>
 				</el-form>
 				<div class="footer">
-					<el-button v-if="dialogMode != 'view'" color="#2B2B4C" @click="handleCancel">{{ dialogReadonly ? '关闭' : '取消' }}</el-button>
+					<el-button v-if="dialogMode != 'view'" color="#2B2B4C" @click="handleCancel">
+						{{ dialogReadonly ? '关闭' : '取消' }}
+					</el-button>
 					<el-button
 						color="#284FE3"
 						v-if="!dialogReadonly"
@@ -163,7 +148,7 @@
 import * as Cesium from 'cesium'
 import { saveOperationLog } from '@ztzf/apis'
 import { useRoute } from 'vue-router'
-import { MapTooltip } from '@/utils/cesium/shapeTools/Tooltip'
+import { MapTooltip } from '@ztzf/utils'
 
 import equipment from '@/assets/images/dataCockpit/legend/equipment.png'
 
@@ -254,7 +239,7 @@
 	if (!isValid) return
 	submitting.value = true
 	try {
-		const {longitude, latitude} = parseDeployLocation(formData.value.deployLocation)
+		const { longitude, latitude } = parseDeployLocation(formData.value.deployLocation)
 		const normalizedRange = normalizeRange(formData.value.effectiveRangeKm)
 
 		const payload = {
@@ -262,7 +247,7 @@
 			effectiveRangeKmIsNotNull: normalizedRange != null ? 1 : 2,
 			effectiveRangeKm: normalizedRange,
 			longitude,
-			latitude
+			latitude,
 		}
 		formData.value.effectiveRangeKm = normalizedRange
 		delete payload.deviceId
@@ -272,7 +257,7 @@
 		saveOperationLog({
 			requestUri: route.path,
 			title: `${route.name || '侦测范围管理'}-${actionText}`,
-			type: 1
+			type: 1,
 		})
 
 		ElMessage.success(dialogMode.value === 'add' ? '新增成功' : '更新成功')
@@ -295,7 +280,7 @@
 		current: 1,
 		size: 200,
 		effectiveRangeKmIsNotNull: 2,
-		isTrack: 1
+		isTrack: 1,
 	})
 	const records = res?.data?.data?.records ?? []
 	deviceOptions.value = records.map(item => ({
diff --git a/applications/drone-command/src/utils/cesium/shapeTools/Tooltip.js b/packages/utils/map/MapTooltip.js
similarity index 91%
rename from applications/drone-command/src/utils/cesium/shapeTools/Tooltip.js
rename to packages/utils/map/MapTooltip.js
index 6ad6aef..4e07abf 100644
--- a/applications/drone-command/src/utils/cesium/shapeTools/Tooltip.js
+++ b/packages/utils/map/MapTooltip.js
@@ -1,4 +1,4 @@
-export class MapTooltip {
+export class MapTooltip {
 	constructor(viewer, options = {}) {
 		this.viewer = viewer
 		this.options = options
@@ -40,14 +40,7 @@
 		if (!this.tooltipEl || !position) return
 		const width = this.container?.clientWidth ?? 0
 		const height = this.container?.clientHeight ?? 0
-		if (
-			!width ||
-			!height ||
-			position.x < 0 ||
-			position.y < 0 ||
-			position.x > width ||
-			position.y > height
-		) {
+		if (!width || !height || position.x < 0 || position.y < 0 || position.x > width || position.y > height) {
 			this.hide()
 			return
 		}
diff --git a/packages/utils/map/index.js b/packages/utils/map/index.js
index b2bee02..2503669 100644
--- a/packages/utils/map/index.js
+++ b/packages/utils/map/index.js
@@ -1,24 +1,5 @@
 import * as Cesium from 'cesium'
-
-// 获取正射影像4至点
-export function getOrthoImageBoundaryPoints (data) {
-	const arr = JSON.parse(data)
-
-	if (arr.length !== 4) return undefined
-
-	const west = Math.min(arr[0], arr[2])
-	const east = Math.max(arr[0], arr[2])
-	const south = Math.min(arr[1], arr[3])
-	const north = Math.max(arr[1], arr[3])
-
-	return Cesium.Rectangle.fromDegrees(
-		west,
-		south,
-		east,
-		north
-	)
-}
-
+import { MapTooltip } from './MapTooltip'
 /**
  * 飞到中心点并且所有点在可视范围
  *  @param positionsData 二维数组,每项为 [lon, lat] 或 三维数组 [lon, lat, height]
@@ -26,7 +7,7 @@
  *  @param multiple 缩放倍数-默认为4
  *  @param pitch 俯仰角-默认为-90
  */
-export function flyVisual({ positionsData, viewer, multiple = 4, pitch = -90 }) {
+function flyVisual({ positionsData, viewer, multiple = 4, pitch = -90 }) {
 	if (!Array.isArray(positionsData) || positionsData.length === 0) return
 
 	// 如果是一个点,加两个点方便后续生成外包围盒
@@ -79,3 +60,5 @@
 		},
 	})
 }
+
+export { MapTooltip, flyVisual }

--
Gitblit v1.9.3