Получение общей продолжительности и расстояния на MapBox JavaScript - PullRequest
3 голосов
/ 23 апреля 2020

Я использую MapBox GL API для Qt (JavaScript), и мне нужно получить общее расстояние и общую продолжительность маршрута. Чтобы получить маршрут, я делаю следующий http-запрос:

https://api.mapbox.com/directions/v5/mapbox/driving/-8.61767353533753, 42.102184359031504; -8.495246688170312,41.44289308091726? Steps = true & geometrys = geojson & access_token = myToken

Ответ в формате geo JSON, который я использую, чтобы нарисовать маршрут на моей карте, и он работает. Проблема в том, что я не могу рассчитать общее расстояние и продолжительность всей поездки. В этом гео есть много полей «длительность» и «расстояние» JSON.

Нужно ли мне работать с этими несколькими полями, или есть какой-либо другой способ подсчета общего расстояния и продолжительности ??

Ответы [ 2 ]

2 голосов
/ 24 апреля 2020

Чтобы узнать расстояние и продолжительность, просто возьмите routes[0].distance и routes[0].duration соответственно.

(Вы не хотите добавлять их: они представляют собой альтернативные маршруты, а не части одного длинного путешествия. )

См. https://docs.mapbox.com/api/navigation/#directions -ответ-объект .

1 голос
/ 23 апреля 2020

Вы можете использовать библиотеку turf.js, передавая ей географический JSON, а затем выполнить пространственный анализ.

Идея в том, чтобы передать объект гео JSON в turf и используйте функцию length:

var geojson = /** get your shape from API */;
var length = turf.length(geojson, {units: 'kilometers'});

Вот пример непосредственно из MapBox: https://docs.mapbox.com/mapbox-gl-js/example/measure/

Редактировать: поскольку есть duration и distance в маршрутах, указанных в mapbox api, вы можете обработать объект geojson.routes, например:

var duration = geojson.routes.reduce(
 (d, route) => d + route.duration
 0
);

Таким образом, вы даже можете использовать поле route.distance для получения общее расстояние.

РЕДАКТИРОВАТЬ n.2: НЕ ДЕЛАЙТЕ ЭТОГО! Я все испортил, маршруты - это просто массив альтернатив , слава Стиву Бе nnet за указание на это.

...