1

我是 Laflet Routing Machine (liedman) https://www.liedman.net/leaflet-routing-machine/的新手,我想更新每 30 秒计算一次的第一条路线,因为我想刷新它,但我没有t 需要发出许多服务器请求。

我会做一个 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 检查航点,它们已更改但未绘制路线...我如何刷新它?

4

1 回答 1

2

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

您应该能够使用这样的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 始终返回当前航点,因此您可以自由修改它们。然后 setWaypoints 将触发路线的更改事件并相应地更新它们。

这是一个你可以玩的工作小提琴

于 2022-01-11T08:42:04.587 回答