我使用L.pather插件在地图上的行内积分。我也在地图上填充了标记。给定任何两个标记,我想在上一个提供的行上找到地图上的最短距离(路径)。附图片供参考。
这里我想在给定路径(蓝线)上绘制A和B之间的一条线。线上的蓝点是我拥有的点(lat,lng)的集合。我有什么方法可以做到吗?
答案 0 :(得分:2)
您可以使用distanceTo
L.LatLng
方法计算从L.Marker
的latlng到折线的每个latlng的距离:
function getNearestPointOnPolyline (marker, polyline) {
var nearestKey,
nearestDistance,
markerLatLng = marker.getLatLng(),
polylineLatLngs = polyline.getLatLngs()
for (i = 0; i < polylineLatLngs.length; i++) {
var distance = markerLatLng.distanceTo(polylineLatLngs[i])
if (!nearestDistance || nearestDistance > distance) {
nearestKey = i
nearestDistance = distance
}
}
return nearestKey
}
如果您为每个标记计算,则可以使用spliceLatLngs
L.Polyline
方法将折线修剪为这些点:
var polyline = new L.Polyline([...]).addTo(map),
marker_a = new L.Marker([...]).addTo(map),
marker_b = new L.Marker([...]).addTo(map)
// Get key of nearest point on polyline
var nearest_a = getNearestPointOnPolyline(marker_a, polyline),
nearest_b = getNearestPointOnPolyline(marker_b, polyline)
// Determine start and end key
var start = Math.min(nearest_a, nearest_b),
end = Math.max(nearest_a, nearest_b)
// Splice all keys untill start key
polyline.spliceLatLngs(0, start)
// Splice all keys from the end
polyline.spliceLatLngs(end - start + 1,polyline.getLatLngs().length)
参考: