如何通过拖动来编辑地图上的要素位置?
How to edit Feature position on map by draging?
我需要通过在地图上拖动来移动地图上的地图项位置。
使用地图服务器时,我可以做到这一点,但我无法在我的 HTML 地图上实现它。
在文档或搜索问题时找不到与此相关的任何内容。
谢谢
假设您的特征是图形对象。
- 向地图添加 mousedown 事件侦听器
- 在地图 mousedown 上,验证要素是否与以 mousedown 位置为中心的圆相交(您必须在此处将像素转换为地图单位);
- 如果要素相交,添加地图 mousemove 和 mouseup 事件侦听器
在地图mousemove上,用光标的位置修改要素的几何形状(这对于点要素来说很容易,但对于折线和多边形来说更复杂)。另外,您应该为此事件侦听器使用 debounce or throttle function 以防止过度计算。
在地图 mouseup 上,移除 mousemove 和 mouseup 事件侦听器
要计算圆的半径,您必须考虑地图的当前范围。以下是计算半径的方法:
function getSearchAtPointRadius(mapView) {
//20m if your map units are in meters
return 20 * (mapView.extent.xmax - mapView.extent.xmin) / mapView.width
}
我需要通过在地图上拖动来移动地图上的地图项位置。
使用地图服务器时,我可以做到这一点,但我无法在我的 HTML 地图上实现它。 在文档或搜索问题时找不到与此相关的任何内容。
谢谢
假设您的特征是图形对象。
- 向地图添加 mousedown 事件侦听器
- 在地图 mousedown 上,验证要素是否与以 mousedown 位置为中心的圆相交(您必须在此处将像素转换为地图单位);
- 如果要素相交,添加地图 mousemove 和 mouseup 事件侦听器
在地图mousemove上,用光标的位置修改要素的几何形状(这对于点要素来说很容易,但对于折线和多边形来说更复杂)。另外,您应该为此事件侦听器使用 debounce or throttle function 以防止过度计算。
在地图 mouseup 上,移除 mousemove 和 mouseup 事件侦听器
要计算圆的半径,您必须考虑地图的当前范围。以下是计算半径的方法:
function getSearchAtPointRadius(mapView) {
//20m if your map units are in meters
return 20 * (mapView.extent.xmax - mapView.extent.xmin) / mapView.width
}