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

天地图的带洞多边形操作

/** 往 polygon 中添加一个洞 */
function addHole(polygon: T.Polygon) {const handler = new T.PolygonTool(map)handler.open()handler.addEventListener('draw', ({ currentPolygon }) => {const oldLnglats = polygon.getLngLats()map.removeOverLay(currentPolygon)polygon.setLngLats([...oldLnglats, ...currentPolygon.getLngLats()])})
}/** 编辑带洞多边形,实则将其拆分为多个多边形,这里记录其对应关系,完成编辑后重新组合 */
const editableHolePolygon = new Map<T.Polygon, T.Polygon[]>()/** 开启 polygon 编辑,支持带洞多边形编辑 */
function enableEdit(polygon: T.Polygon) {const lnglats = polygon.getLngLats()if (lnglats.length > 1) {let polygons = editableHolePolygon.get(polygon)if (polygons) {polygons.forEach((_polygon, index) => {_polygon.enableEdit()if (index > 0) {_polygon.setFillOpacity(0)}})}else {map.removeOverLay(polygon)// 带洞多边形polygons = lnglats.map((points, index) => {const _polygon = new T.Polygon(points)map.addOverLay(_polygon)_polygon.enableEdit()if (index > 0) {_polygon.setFillOpacity(0)}return _polygon})editableHolePolygon.set(polygon, polygons)}}else {// 普通多边形polygon.enableEdit()}
}/** 取消 polygon 编辑,支持带洞多边形 */
function disableEdit(polygon: T.Polygon) {const polygons = editableHolePolygon.get(polygon)if (polygons) {const points = polygons.map((_polygon) => {_polygon.disableEdit()map.removeOverLay(_polygon)return _polygon.getLngLats()[0]})polygon.setLngLats(points)map.addOverLay(polygon)editableHolePolygon.delete(polygon)}else {polygon.disableEdit()}
}
http://www.rkmt.cn/news/4014.html

相关文章:

  • Kuby免疫学读书笔记01——造血干细胞
  • 动态规划和马尔可夫决策对比
  • 20250913 之所思 - 人生如梦
  • 动态规划
  • 马尔可夫决策
  • C语言学习
  • 《Python数据结构与算法分析》第二弹《2.2.2 异序词检测示例》
  • dfs序基础+树上差分
  • PKU_Compiler
  • 如何绕过谷歌反爬策略爬取搜索结果
  • Rust 生命周期详解 - 实践
  • 笔记《机器人动力学理论及其应用》上交桂凯博士-中科深谷机器人大讲堂第10期
  • [豪の学习笔记] 软考中级备考 基础复习#9
  • 2025CCPC南昌邀请赛游记
  • 软件工程第二次作业-个人项目
  • 2025年API安全建设方案最佳实践:七步五方法
  • Redis为什么适合做分布式锁? - 浪矢
  • 2024年以来,数学领域已有多位在国外顶尖高校取得终身教职的学者回国
  • form表单和表单控件
  • form表单
  • 【Zotero7】使用Attanger和百度同步空间如何进行同步?
  • 【重点!!!】必知必会必须掌握的serializers序列化器类之Serializer和ModelSerializer核心区别
  • 助教工作总结
  • [AGC022F] Checkers 题解
  • 程序员的副业变现之路:我的双平台矩阵打法
  • MyBatis注解的运用于条件搜索实践
  • 利用k8s client-go库创建CRD的informer的操作流程
  • Golang并发编程及其高级特性
  • 元推理agi不是象人思维,而是教人思维,人类脸上挂不住啊
  • 优惠券