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