如何使用 Leaflet Routing Machine 和 Mapzen 获取行人路线?

How to get a pedestrian route using Leaflet Routing Machine and Mapzen?

我知道 Mapzen 可以为我想做的行程提供步行路线,因为我可以在 openstreetmaps.org.

上找到它

但是我无法在我的嵌入式地图上使用它,我完全不知道原因。

我的代码如下:

L.Routing.control({
waypoints: [
    L.latLng(-44.004358, 170.476709),
    L.latLng(-43.985844, 170.464058)
],
router: L.Routing.Mapzen('valhalla-apikey', 'pedestrian')
// formatter: new L.Routing.Mapzen.Formatter()
}).addTo(cafeMap);

(用我的 apikey 替换 apikey)

但我得到的只是正常的驾驶行程。我尝试用所有其他可用选项替换 'pedestrian',但无法正常工作。

有人看到我的代码有问题吗?

谢谢

您没有正确初始化路由器。该插件遵循 class factories 的 Leaflet 文档中描述的约定。因此,您可以使用 new 运算符创建路由器的新实例 class:

router: new L.Routing.Mapzen('valhalla-apikey', 'pedestrian')

或小写工厂方法,它做同样的事情:

router: L.Routing.mapzen('valhalla-apikey', 'pedestrian')

您还必须指定格式化程序,以便路由机器可以解析从 mapzen 返回的方向。因此,路由控制的完整代码为:

var control = L.Routing.control({
  waypoints: [
    L.latLng(-44.004358, 170.476709),
    L.latLng(-43.985844, 170.464058)
],
  waypointMode: 'snap',
  router: new L.Routing.Mapzen('valhalla-apikey', 'pedestrian'),
  formatter: new L.Routing.Mapzen.Formatter()
}).addTo(map);

你这样做的方式(没有 new 运算符)是将一个未定义的值传递给路由控制,你得到的结果实际上来自 OSRM 路由器。因此,如果为路由器提供未定义的值,Leaflet Routing Machine 似乎默认为 OSRM。