传单路由机 - update/redraw 路由

Leaflet Routing Machine - update/redraw route

我是 Laflet Routing Machine (liedman) 的新手 https://www.liedman.net/leaflet-routing-machine/ 我想更新每 30 秒计算的第一条路线,因为我想刷新它并且我不需要创建很多服务器请求。

我会设置一个 setInterval,但目前我需要知道它是否有效以及是否是这样...这是我的代码:

routingControl = L.Routing.control({
    waypoints: [
        L.latLng(43.12, 11.99),
        L.latLng(43.37, 12.08)
    ]
    createMarker: function() { return null; },
    routeWhileDragging: false,
    draggableWaypoints: false,
    reverseWaypoints: false,
    fitSelectedRoutes: true,
    addWaypoints: false
}).addTo(OSM_Map);

var newLat = routingControl.options.waypoints[0].lat+0.01;
var newLng = routingControl.options.waypoints[0].lng+0.01;
setTimeout(function () {
   routingControl.options.waypoints=[
       L.latLng(newLat, newLng),
       routingControl.options.waypoints[1]
   ];
}, 10000);

我使用 setTimeout 更改起点(添加 0.01)并使用 console.dir 检查 waypoints 它们已更改但未更改绘制的路线...我如何刷新它?

这些选项仅在初始化路由控件时使用。之后更改它们没有任何作用,因为控件在内部使用自己的 waypoints。

您应该可以像这样使用 setWaypoints 函数

setInterval(function () {
    var newWaypoint = routingControl.getWaypoints()[0].latLng;
    var newLat = newWaypoint.lat + 0.01;
    var newLng = newWaypoint.lng + 0.01;
    routingControl.setWaypoints([
       L.latLng(newLat, newLng),
       routingControl.options.waypoints[1]
     ]);
}, 10000);

与选项不同,getWaypoints 始终 returns 当前 waypoints,因此您可以自由修改它们。 然后 setWaypoints 将触发路线的更改事件并相应地更新它们。

Here's a working fiddle你可以玩