Направления Mapbox: как извлечь данные о направлениях из результата

Я использую Mapbox Directions в приложении javascript для успешного возврата данных геометрии и маршрутизации (между двумя парами широты и долготы) в браузер. Я пытаюсь отобразить -- в конце концов -- ломаную линию маршрута, соединяющую их на карте, но я не могу получить доступ к данным о направлениях из объекта результата, хотя данные есть.

Вот код запроса:

L.mapbox.accessToken ='pk.eyJ1Ij...9Uk_Z8JqMOQ';
L.mapbox.id = 'tom...ibb';
var startLatLng = L.latLng(38.935899, -77.022353);
var endLatLng = L.latLng(38.90, -77.10);
var directions = L.mapbox.directions();
directions.setOrigin(startLatLng);
directions.setDestination(endLatLng);
var route = directions.query();
console.dir(route);

Обратите внимание на строку console.dir. Вот что я вижу в консоли для маршрута:

_initHooksCalled:true
_query:null
_requests:Array[0]
_waypoints:Array[0]
destination:Object
directions:Object
options:Object
origin:Object

Вот что я вижу в консоли для объектов route.destination, route.options и route.origin:

    console.log(route.destination);
      => Object {type: "Feature", geometry: Object, properties:...
    console.log(route.origin);
      => Object {type: "Feature", geometry: Object, properties:...
    console.log(route.options);
      => Object {units: "imperial"}

Но когда я пытаюсь увидеть route.directions, он не определен.

    console.log(route.directions);
      => undefined

При «открытии» всего объекта маршрута в консоли (через console.dir) я вижу данные о направлениях, которые я ищу:

    directions:Object
        destination:Object
        origin:Object
        routes:Array[2]
            0:Object
                distance:10460
                duration:862
                geometry:Object
                steps:Array[26]
                ...

Почему это будет «неопределенным» при доступе к нему с помощью route.directions, особенно когда я могу видеть содержимое других «подобъектов» (например, route.options), используя тот же точечный синтаксис?

Наконец, когда я "строю" объект маршрута var routeJson = JSON.stringify(route);, я вижу это:

    {"options":{
        "units":"imperial"
    },
    "_waypoints":[],
    "_initHooksCalled":true,
    "origin":{
        "type":"Feature",
        "geometry":{
            "type":"Point",
            "coordinates":[-77.022353,38.935899]
        },
        "properties":{"query":[-77.022353,38.935899]}
    },
    "destination":{
        "type":"Feature",
        "geometry":{
            "type":"Point",
            "coordinates":[-77.1,38.9]},
        "properties":{"query":[-77.1,38.9]}
    },
    "_requests":[],
    "_query":{}}

Опять же, НЕТ содержания направлений! Любые мысли будут очень признательны!


person tomBeach    schedule 26.03.2016    source источник
comment
Возможно, если вы передадите параметры instructions и/или geometry, эти биты информации будут возвращены? Документация немного расплывчата...   -  person Steve Bennett    schedule 26.03.2016


Ответы (1)


Где вы находите этот API с функцией query? Согласно документации Directions API на Github, вы должны называть это так:

var mapboxClient = new MapboxClient('ACCESSTOKEN');
mapboxClient.getDirections(
  [
    { latitude: 33.6, longitude: -95.4431 },
    { latitude: 33.2, longitude: -95.4431 } ],
  function(err, res) {
  // res is a document with directions
});

// With options
mapboxClient.getDirections([
  { latitude: 33.6875431, longitude: -95.4431142 },
  { latitude: 33.6875431, longitude: -95.4831142 }
], {
  profile: 'mapbox.walking',
  instructions: 'html',
  alternatives: false,
  geometry: 'polyline'
}, function(err, results) {
  console.log(results.origin);
});

Я подозреваю, что передача geometry: 'polyline - это то, что вам нужно, чтобы убедиться, что вы получаете информацию о геометрии, включенную в ответ.

person Steve Bennett    schedule 26.03.2016
comment
Я получил функцию direction.query() из mapbox- Направления.js гитхаб. Ранее я пробовал метод MapboxClient, но получил ошибку MapboxClient is notdefined. Я пока еще посмотрю на это... - person tomBeach; 26.03.2016
comment
О, это плагин для листовок. - person Steve Bennett; 28.03.2016