From fb4aa08434de949bfc1b5180331b9f8c2ed508e2 Mon Sep 17 00:00:00 2001
From: 罗广辉 <guanghui.luo@foxmail.com>
Date: Wed, 12 Aug 2026 15:34:44 +0800
Subject: [PATCH] feat: 固定

---
 packages/utils/map/DrawPolygon.js |   21 +++++++++++++++++++++
 1 files changed, 21 insertions(+), 0 deletions(-)

diff --git a/packages/utils/map/DrawPolygon.js b/packages/utils/map/DrawPolygon.js
index 2bdeeff..f337484 100644
--- a/packages/utils/map/DrawPolygon.js
+++ b/packages/utils/map/DrawPolygon.js
@@ -61,6 +61,7 @@
 		this.handleLeftUp = this.handleLeftUp.bind(this)
 		this.handleMouseMove = this.handleMouseMove.bind(this)
 		this.handleLeftClick = this.handleLeftClick.bind(this)
+		this.handleDoubleClick = this.handleDoubleClick.bind(this)
 		this.handleRightClick = this.handleRightClick.bind(this)
 
 		this.delPolygon = this.delPolygon.bind(this)
@@ -69,6 +70,8 @@
 		this.listeners = []
 		// 绘制提示 tooltip
 		this.drawingTooltip = null
+		// 防止双击时第二次点击添加重复的点
+		this._lastClickTime = 0
 	}
 
 	// 实体命名常量
@@ -129,6 +132,7 @@
 	// 开始绘制
 	startDrawing() {
 		this.drawingMode = true
+		this._lastClickTime = 0
 		this.curPolygon = new Cesium.PolygonHierarchy()
 
 		// 如果还没有 DataSource,就新建一个
@@ -527,6 +531,13 @@
 			return
 		}
 
+		// 防止双击时第二次点击添加重复的点(双击触发顺序:click → click → dblclick)
+		const now = Date.now()
+		if (this._lastClickTime && (now - this._lastClickTime) < 300) {
+			return
+		}
+		this._lastClickTime = now
+
 		// 添加新的点
 		const cartesian = this.viewer.scene.pickPosition(click.position)
 		if (!cartesian) return
@@ -546,6 +557,14 @@
 		}
 
 		this.addPosition(cartesian)
+	}
+
+	// 鼠标双击(完成绘制)
+	handleDoubleClick() {
+		if (!this.drawingMode) return
+		// 双击时第一次 LEFT_CLICK 已经添加了一个点,所以至少需要 4 个点(3个有效点 + 1个跟踪点)
+		if (this.curPolygon.positions.length < 4) return
+		this.finishDrawing()
 	}
 
 	// 鼠标右键点击(弹出菜单)
@@ -829,6 +848,7 @@
 				[Cesium.ScreenSpaceEventType.LEFT_UP, this.handleLeftUp],
 				[Cesium.ScreenSpaceEventType.MOUSE_MOVE, this.handleMouseMove],
 				[Cesium.ScreenSpaceEventType.LEFT_CLICK, this.handleLeftClick],
+				[Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK, this.handleDoubleClick],
 				[Cesium.ScreenSpaceEventType.RIGHT_CLICK, this.handleRightClick],
 			]
 
@@ -846,6 +866,7 @@
 				Cesium.ScreenSpaceEventType.LEFT_UP,
 				Cesium.ScreenSpaceEventType.MOUSE_MOVE,
 				Cesium.ScreenSpaceEventType.LEFT_CLICK,
+				Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK,
 				Cesium.ScreenSpaceEventType.RIGHT_CLICK,
 			]
 

--
Gitblit v1.9.3