在 MapBox 上获取总持续时间和距离 JavaScript

Getting total duration and distance on MapBox JavaScript

我正在为 Qt (JavaScript) 使用 MapBox GL API,我必须从一条路线中获取总距离和总持续时间。为了获取路线,我发出了以下 http 请求:

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

响应采用 geoJSON 格式,我用它在我的地图上绘制路线,并且有效。

问题是我无法计算整个行程的总距离和持续时间。这个 geoJSON 中有很多“持续时间”和“距离”字段。

我是否必须使用这些多个字段,或者是否有任何其他方法来计算总距离和持续时间?

您可以使用 turf.js 库将 geoJSON 传递给它,然后进行一些空间分析。

这里的概念是将 geoJSON 特征传递给 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/

编辑: 因为在mapbox api指定的路由中有durationdistance,你可以处理geojson.routes对象,像这样:

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

这样您甚至可以使用 route.distance 字段来获取总距离。

编辑 n.2:不要这样做! 我搞砸了,路由只是一个 替代方案 的数组,荣誉感谢 Steve Bennet 指出这一点。

要获取距离和持续时间,只需分别取 routes[0].distanceroutes[0].duration

(您不想将它们加起来:这些代表备选路线,而不是长途旅行的一部分。)

参见https://docs.mapbox.com/api/navigation/#directions-response-object