webgis中捕捉功能的实现

编程入门 行业动态 更新时间:2024-10-14 12:21:30

webgis中捕捉<a href=https://www.elefans.com/category/jswz/34/1771378.html style=功能的实现"/>

webgis中捕捉功能的实现

概述

本文以openlayers为例,结合turf.js讲一下webgis中绘制和编辑时如何实现捕捉功能。

效果

为了验证捕捉的结果是否正确,就将绘制的几个面做了一个合并的测试,效果如下:

实现思路

  • 输入
    • 要捕捉的图层,此处为vectorSource
    • 捕捉的范围,单位是像素
    • 鼠标移动时的坐标
  • 输出
    • 满足条件的点

捕捉工具的舒适化参数如下:

实现的大致流程如下:

实现代码

 /*** 获取捕捉点* @param {Array} coords - 传入坐标* @return {Array}*/getSnapPoint (coords) {if (!this._active) return []let result = []let features = this._vectorSource.getFeatures()const res = this._map.getView().getResolution()const dis = this.getPixelTolerance() * resconst point = turfPoint.point(toLonLat(coords))for (let i = 0; i < features.length; i++) {const feature = features[i]const json = feature2Geojson(feature)const line = polygonToLine(json)const dist = pointToLineDistance(point, line)if (dist * 1000 < dis) {const pointLine = nearestPointOnLine(line, point, { units: 'kilometers' })result = pointLine.geometry.coordinatesbreak}}this._overlay.setPosition(result.length === 0 ? null : result)return result}
// 处理map的事件,click,pointermove,dblclick
function clickEvent(e) {if(!isDraw) returnconst snapPoint = snap.getSnapPoint(e.coordinate)const coordinate = snapPoint.length > 0 ? ol.proj.fromLonLat(snapPoint) : e.coordinate ;......
}
function pointerMoveEvent(e) {if(!isDraw) returnconst snapPoint = snap.getSnapPoint(e.coordinate)const coordinate = snapPoint.length > 0 ? ol.proj.fromLonLat(snapPoint) : e.coordinate ;......
}
function dblclickEvent(e) {if(!isDraw) returnlet coords = coordinates.concat([]);const snapPoint = snap.getSnapPoint(e.coordinate)const coordinate = snapPoint.length > 0 ? ol.proj.fromLonLat(snapPoint) : e.coordinate ;......
}

更多推荐

webgis中捕捉功能的实现

本文发布于:2024-03-05 07:17:54,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1711656.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:功能   webgis

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!