Как проложить пешеходный маршрут, используя Leaflet Routing Machine и 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)
Но все, что я получаю, это обычный маршрут вождения. Я попытался заменить "пешеход" на все другие доступные варианты, но не могу заставить его работать.
Кто-нибудь видит глюк в моем коде?
Спасибо
1 ответ
Вы неправильно инициализируете роутер. Плагин следует соглашению, описанному в документации Leaflet для фабрик классов. Так что вы можете использовать new
Оператор для создания нового экземпляра класса маршрутизатора:
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 используется OSRM, если для маршрутизатора задано неопределенное значение.