From 2dbd3103d91934a6ec6ef48baa288b56a4843472 Mon Sep 17 00:00:00 2001
From: 罗广辉 <guanghui.luo@foxmail.com>
Date: Mon, 12 Jan 2026 19:41:26 +0800
Subject: [PATCH] feat: 完成区域

---
 applications/drone-command/src/utils/cesium/DrawPolygon.js |   70 +++++++++++++++++-----------------
 1 files changed, 35 insertions(+), 35 deletions(-)

diff --git a/applications/drone-command/src/utils/cesium/DrawPolygon.js b/applications/drone-command/src/utils/cesium/DrawPolygon.js
index 59cbf6c..6c37a35 100644
--- a/applications/drone-command/src/utils/cesium/DrawPolygon.js
+++ b/applications/drone-command/src/utils/cesium/DrawPolygon.js
@@ -88,18 +88,18 @@
 	// ============ 发布订阅机制 ============
 
 	// 外部订阅数据变化
-	subscribe (key, listener) {
+	subscribe(key, listener) {
 		this.listeners.push({ key, listener })
 	}
 
 	// 通知订阅者
-	notify (key, data) {
+	notify(key, data) {
 		this.listeners.filter(subscriber => subscriber.key === key).forEach(subscriber => subscriber.listener(data))
 	}
 
 	// ============ 绘制相关 ============
 	// 编辑图斑
-	editThePatch (data) {
+	editThePatch(data) {
 		this.isPreviewMode = data
 		// 关闭编辑能力时隐藏端点/中点,并清空中点,避免残留交互
 		if (!this.isPreviewMode) {
@@ -117,12 +117,12 @@
 		}
 	}
 	// 删除测区
-	deleteTheArea (data) {
+	deleteTheArea(data) {
 		this.isDeleteTheArea = data
 	}
 
 	// 开始绘制
-	startDrawing () {
+	startDrawing() {
 		this.drawingMode = true
 		this.curPolygon = new Cesium.PolygonHierarchy()
 
@@ -150,7 +150,7 @@
 	}
 
 	// 创建多边形实体(含边界线)
-	createPolygonEntity () {
+	createPolygonEntity() {
 		this.polygonEntity = this.editPolygonDataSource.entities.add({
 			name: DrawPolygon.ENTITY_NAMES.POLYGON,
 			id: DrawPolygon.ENTITY_NAMES.POLYGON_ID,
@@ -174,7 +174,7 @@
 	}
 
 	// 创建端点实体
-	createPointEntity (position, isAdd) {
+	createPointEntity(position, isAdd) {
 		const pointIndex = isAdd ? this.curPolygon.positions.length - 2 : this.curPolygon.positions.length - 1
 
 		this.editPolygonPointDataSource.entities.add({
@@ -193,7 +193,7 @@
 		})
 	}
 
-	createMidPointEntity (startInd, position) {
+	createMidPointEntity(startInd, position) {
 		// 使用 CallbackProperty 让中点位置随端点拖拽实时计算
 		// startInd 表示该中点属于边:(startInd) -> (startInd + 1)
 		const updatePosition = () => {
@@ -224,7 +224,7 @@
 		})
 	}
 
-	rebuildEditPoints () {
+	rebuildEditPoints() {
 		// 插入/删除端点后:端点实体 id 与 customData.ind 需要全量重建,保证索引与 positions 一致
 		if (!this.isPreviewMode) return
 		if (!this.editPolygonPointDataSource || !this.curPolygon?.positions) return
@@ -248,7 +248,7 @@
 		})
 	}
 
-	rebuildMidPoints () {
+	rebuildMidPoints() {
 		// 仅在“顶点数量变化/切换编辑态”时维护中点实体数量
 		// 拖拽过程中中点位置由 CallbackProperty 自动更新,不需要重建
 		if (!this.isPreviewMode) return
@@ -286,7 +286,7 @@
 		})
 	}
 
-	insertPointFromMidPoint (midPointEntity) {
+	insertPointFromMidPoint(midPointEntity) {
 		// 点击中点:在对应边上插入一个新端点(白点),并立即进入拖拽态
 		if (!this.isPreviewMode) return
 		if (!this.editingMode) return
@@ -319,7 +319,7 @@
 		this.notify('getPolygonPositions', this.curPolygon.positions)
 	}
 	// 清除不在范围内的点
-	removeLastInvalidPoint () {
+	removeLastInvalidPoint() {
 		const posLen = this.curPolygon.positions.length
 		if (posLen === 0) return
 
@@ -348,7 +348,7 @@
 		}
 	}
 	// 添加一个点
-	addPosition (position, isAdd = true) {
+	addPosition(position, isAdd = true) {
 		// 第一个点要重复压入一次,形成动态绘制效果
 		if (this.curPolygon.positions.length === 0 && isAdd) {
 			this.curPolygon.positions.push(position.clone())
@@ -372,7 +372,7 @@
 	// ============ 鼠标事件 ============
 
 	// 鼠标左键按下(选中端点拖动)
-	handleLeftDown (movement) {
+	handleLeftDown(movement) {
 		if (!this.editingMode) return
 
 		const pickedEntity = this.viewer.scene.pick(movement.position)?.id
@@ -393,7 +393,7 @@
 	}
 
 	// 鼠标左键抬起(拖拽结束)
-	handleLeftUp () {
+	handleLeftUp() {
 		if (!(this.editingMode && this.curPolygon?.positions && this.draggedEntity)) return
 
 		if (this.currentDragPointIsValid && this.isDragging) {
@@ -426,7 +426,7 @@
 	}
 
 	// 鼠标移动
-	handleMouseMove (movement) {
+	handleMouseMove(movement) {
 		if (!this.drawingMode && !this.editingMode) return
 
 		const cartesian = this.viewer.scene.pickPosition(movement.endPosition)
@@ -464,7 +464,7 @@
 	}
 
 	// 鼠标左键点击
-	handleLeftClick (click) {
+	handleLeftClick(click) {
 		this.removeMenuPopup()
 
 		const pickedAllEntity = this.viewer.scene.drillPick(click.position).filter(i => i.id)
@@ -520,7 +520,7 @@
 	}
 
 	// 鼠标右键点击(弹出菜单)
-	handleRightClick (click) {
+	handleRightClick(click) {
 		const that = this
 		if (that.drawingMode) return
 
@@ -556,7 +556,7 @@
 	// ============ 删除相关 ============
 
 	// 删除所有实体
-	removeEntities () {
+	removeEntities() {
 		if (this.editPolygonDataSource) {
 			this.editPolygonDataSource.entities.removeAll()
 			this.editPolygonDataSource = null
@@ -577,7 +577,7 @@
 	}
 
 	// 完成绘制
-	finishDrawing () {
+	finishDrawing() {
 		this.curPolygon.positions.pop()
 
 		if (this.curPolygon.positions.length >= 3) {
@@ -603,20 +603,20 @@
 	}
 
 	// 删除多边形
-	delPolygon () {
+	delPolygon() {
 		this.removeEntities()
 		this.removeMenuPopup()
 		this.notify('getPolygonPositions', [])
 		this.startDrawing()
 	}
 	// 删除图斑
-	delSpot () {
+	delSpot() {
 		this.removeEntities()
 		this.isPreviewMode = true
 		this.startDrawing()
 	}
 	// 删除端点
-	delPoint () {
+	delPoint() {
 		if (this.curPolygon.positions.length <= 3) {
 			this.removeMenuPopup()
 			return ElMessage.warning('端点不可少于3个')
@@ -634,7 +634,7 @@
 	// ============ 工具方法 ============
 
 	// 创建右键菜单
-	createMenuPopup (type = 'polygon') {
+	createMenuPopup(type = 'polygon') {
 		const menuPopupVBox = document.createElement('div')
 		menuPopupVBox.id = 'planarPolygonEdit'
 		menuPopupVBox.className = 'planar-polygon-edit-tooltip'
@@ -660,7 +660,7 @@
 	}
 
 	// 移除菜单
-	removeMenuPopup () {
+	removeMenuPopup() {
 		const that = this
 		if (that.menuPopup) {
 			that.menuPopup.removeEventListener('click', that.delPolygon)
@@ -672,13 +672,13 @@
 	}
 
 	// 更新多边形样式(正常/错误)
-	updatePolygonAppearance (polygonColor, lineColor) {
+	updatePolygonAppearance(polygonColor, lineColor) {
 		this.polygonEntity.polygon.material = polygonColor
 		this.polygonEntity.polyline.material = lineColor
 	}
 
 	// 禁用地图交互
-	disableMapControl () {
+	disableMapControl() {
 		const controller = this.viewer.scene.screenSpaceCameraController
 		controller.enableRotate = false
 		controller.enableTranslate = false
@@ -686,7 +686,7 @@
 	}
 
 	// 启用地图交互
-	enableMapControl () {
+	enableMapControl() {
 		const controller = this.viewer.scene.screenSpaceCameraController
 		controller.enableRotate = true
 		controller.enableTranslate = true
@@ -694,7 +694,7 @@
 	}
 
 	// 检查多边形是否自交
-	curDragPointIsValid (positions) {
+	curDragPointIsValid(positions) {
 		if (positions.length < 3) return true
 
 		const cartographics = Cesium.Ellipsoid.WGS84.cartesianArrayToCartographicArray(positions)
@@ -710,12 +710,12 @@
 		return intersections.features.length === 0
 	}
 	// 初始化已有多边形
-	async initPolygon (viewer, positions, isPurePreview = false) {
+	async initPolygon(viewer, positions, isPurePreview = false) {
 		this.initHandler(viewer)
 		this.isPureSpotPreview = isPurePreview
 		this.startDrawing()
 		let newPosition = positions.map(item => {
-			return Cesium.Cartesian3.fromDegrees(Number(item.lng), Number(item.lat), Number(item?.height||0))
+			return Cesium.Cartesian3.fromDegrees(Number(item.lng), Number(item.lat), Number(item?.height || 0))
 		})
 		// 预览航线的时候调用
 		if (!this.isPureSpotPreview) {
@@ -737,7 +737,7 @@
 			duration: 0.5,
 		})
 
-		const pointList = await getPointPositionsHeight(positions, viewer)
+		let pointList = await getPointPositionsHeight(positions, viewer)
 		flyVisual({ positionsData: pointList.map(item => [item.lng, item.lat, item.ASL]), viewer })
 
 		this.drawingMode = false
@@ -748,7 +748,7 @@
 	}
 
 	// 初始化事件处理器
-	initHandler (viewer) {
+	initHandler(viewer) {
 		this.viewer = viewer
 		this.startDrawing()
 
@@ -771,7 +771,7 @@
 	}
 
 	// 移除事件处理器
-	removeHandler () {
+	removeHandler() {
 		if (this.handler) {
 			const eventTypes = [
 				Cesium.ScreenSpaceEventType.LEFT_DOWN,
@@ -792,7 +792,7 @@
 	/**
 	 * 销毁实例,释放资源
 	 */
-	destroy () {
+	destroy() {
 		if (!this.viewer) return
 
 		this.removeMenuPopup()

--
Gitblit v1.9.3