当前位置: 首页 > news >正文

天地图编辑多边形和折线时,双击删除编辑点

天地图的编辑不支持删除编辑点的操作,于是研究写了一个。

// 使用 lodash 的防抖函数,防止双击时触发两次
const removeDotEventListener = debounce((e: T.MapEvent) => {// 获取被点击的目标// @ts-ignoreconst classList: DOMTokenList = e.originalEvent.target.classList// 线、面中编辑点会包含以下类名,包含则表示双击了编辑点if (!classList.contains('tdt-marker-icon') || !classList.contains('tdt-div-icon-black')) {return}const overlays = map.getOverlays()// 获取正在编辑的线、面覆盖物const editableOverlays = overlays.filter(overlay => overlay instanceof T.Polyline).filter(overlay => overlay.isEditable())// 找到最可能被双击的编辑点interface MaybePoint {lnglat: T.LngLatdistance: numberoverlay: T.Polyline}let maybePoints: MaybePoint | undefinedconst addMaybePoint = (lnglats: T.LngLat[], overlay: T.Polyline) => {for (const lnglat of lnglats) {const distance = lnglat.distanceTo(e.lnglat)if (!maybePoints || distance < maybePoints.distance) {maybePoints = { lnglat, distance, overlay }}}}for (const overlay of editableOverlays) {if (overlay instanceof T.Polygon) {const lnglats = (overlay as T.Polygon).getLngLats()addMaybePoint(lnglats[0], overlay)}else if (overlay instanceof T.Polyline) {const lnglats = (overlay as T.Polyline).getLngLats()addMaybePoint(lnglats, overlay)}}if (maybePoints) {const { lnglat, overlay } = maybePoints// 编辑中双击编辑点时,操作覆盖物会导致地图锁死不能移动,这里脱离调用栈即可解决setTimeout(() => {let otherLnglats: T.LngLat[]if (overlay instanceof T.Polygon) {otherLnglats = overlay.getLngLats()[0].filter(_lnglat => _lnglat !== lnglat)}else {otherLnglats = overlay.getLngLats().filter(_lnglat => _lnglat !== lnglat)}// 取消编辑以删除编辑点overlay.disableEdit()overlay.setLngLats(otherLnglats)overlay.enableEdit()})}
}, 500, {leading: true, // 立即执行trailing: false, // 不在延迟结束后执行
})const map = new T.Map(domRef.value)
map.addEventListener('dblclick', removeDotEventListener)
http://www.zskr.cn/news/4003.html

相关文章:

  • POCamp 2023
  • 十九、指令流水线的基本概念
  • 美团AI面试
  • 算法设计作业-week1
  • git merge
  • Ubuntu 的剪贴板
  • 计算机毕业设计springboot基于微信小程序的手机点餐软件 基于Spring Boot框架的微信小程序点餐体系设计与实现 微信小脚本点餐应用开发:Spring Boot技术的应用
  • 二叉树的相关知识
  • Python中的if __name__ == __main__是什么?
  • 钻石
  • 随机游走理解
  • 【基于协同过滤的校园二手交易强大的平台】
  • [SSL]
  • Shiro概述 - 详解
  • Git 分支
  • 【数学】拉格朗日乘数法
  • 华为芯片之父,33年默默开拓,铸就“中国芯”,功成身退时却鲜有人知!
  • 百度昆仑芯高调出圈:对标寒武纪,估值或达千亿港元?
  • WPS 定制版
  • 685.冗余连接
  • 阿里云OSS图片生成缩略图和获取视频的封面方法
  • 树上问题
  • 突发!美国将复旦微等23家中国实体列入“实体清单”
  • [GenAI] Function Calling
  • 到底该用 KPI 还是 OKR ?
  • 9.13CSP-S Day6 模拟赛
  • 了解一下Redis Stack扩展功能
  • 游戏运行库合集 集成VC++、.NET、DirectX、XNA等千款组件,一键安装游戏必备依赖库 - 指南
  • 【CE】图形化CE游戏教程通关手册 - 详解
  • Python 潮流周刊#119:Google 停止开发 Pytype!