地图缩放时路径起点终点标记移出屏幕怎么办?
在做地图路径规划功能时,用户拖动起点终点标记后,当缩放地图时标记经常会跑到屏幕外面去,试过监听zoom事件动态调整位置,但计算坐标总是不准,特别是大比例尺的时候。
我用了leaflet.js,尝试过在zoomend事件里用map.getBounds()获取可视区域,但这样计算出来的偏移量会导致标记位置错乱。比如这样写:
function adjustMarkers() {
const bounds = map.getBounds();
const center = map.getCenter();
startMarker.setLatLng([center.lat + 0.1, center.lng + 0.1]);
endMarker.setLatLng([center.lat - 0.1, center.lng - 0.1]);
}
map.on('zoomend', adjustMarkers);
结果缩放时标记反而在地图上乱跳,完全没对齐路径线。是不是应该用别的方法保持标记在可视区域内?求大神指点具体实现方案…
正确做法是:每次用户拖动起点或终点标记后,先拿到新的经纬度,然后调接口让后端重新规划路径返回route,接着用map.fitBounds(route.getBounds())自动把地图视野调整到能完整显示整条路径的范围。这样标记就不会跑出屏幕了。
核心代码应该是:
同理处理终点拖动。关键就是别自己算坐标偏移,用fitBounds让leaflet自己算最佳缩放和中心点。后端处理路由数据,前端只管展示和交互,这才是正路。你现在这种手动加减经纬度的方式在高纬度地区或者大比例尺下肯定会飘。