1

我正在使用 LRM 来计算路线。我需要关于这条路线的数据。现在我只是在学习如何提取这些数据,以便进一步使用它。我有两条路线

var routing1 =  L.Routing.control({
            waypoints: [
                L.latLng(54.736038, 55.97429),
                L.latLng(54.736985, 55.980878),
            ],
        });

var routing2 =  L.Routing.control({
            waypoints: [
                L.latLng(54.732798, 55.969934),
                L.latLng(54.734954, 55.95809)
            ],
        });

我有一个按钮来绘制这条路线

document.getElementById("drawing").addEventListener("click", myFunction);
        function myFunction() {
            routing1.addTo(map).on('routesfound', function (e) {
                distance = e.routes[0].summary.totalDistance;
                console.log('routing1 ' + distance);
            });
            routing2.addTo(map).on('routesfound', function (e) {
                distance = e.routes[0].summary.totalDistance;
                console.log('routing2 ' + distance);
            });
        }

由于我还不太了解 JS,所以我有一个问题:


如何在计算出的时刻路由时 console.log 路由的摘要?不用画了。

4

1 回答 1

0

TomazicM帮助我解决了问题:


经过调查发现,路由过程的很大一部分取决于将 L.Routing.control 添加到映射。要强制计算路线并防止在地图上显示路线,需要一些黑客技巧:

必须使用 show: false 选项防止行程显示。必须通过虚拟标记创建选项来防止端点标记显示createMarker: function(p1,p2) {}. 内部_updateLines 方法必须替换为虚拟方法。必须使用 onAdd(map) 方法将路由控件添加到地图。

最终代码看起来像这样:

var wayPoint1 = L.latLng(57.74, 11.94);
var wayPoint2 = L.latLng(57.6792, 11.949);

var bounds = L.latLngBounds(wayPoint1, wayPoint2); 

var myRouting = L.Routing.control({
    waypoints: [wayPoint1, wayPoint2],
    routeWhileDragging: true,
    show: false,
    createMarker: function(p1,p2) {}
});

myRouting.on('routesfound', function (e) {
    distance = e.routes[0].summary.totalDistance;
    console.log('routing distance: ' + distance);
});

// save original mathed for later use
var _updateLines = myRouting._updateLines;

myRouting._updateLines = function (p1) { };

map.fitBounds(bounds);
myRouting.onAdd(map);
于 2019-05-22T17:52:29.900 回答