吉安感知网项目-前端
罗广辉
12 hours ago 5f694550ed7bf0f6147c66feaa4406034ae62e54
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,
         ]