Per Leniel's answer:
var totalDistance = 0;
var totalDuration = 0;
var legs = directionsResult.routes[0].legs;
for(var i=0; i<legs.length; ++i) {
totalDistance += legs[i].distance.value;
totalDuration += legs[i].duration.value;
}
$('#distance').text(totalDistance);
$('#duration').text(totalDuration);
Eigentlich funktioniert dies nur zu gut, wenn Sie Wegpunkte nicht haben:
$('#distance').text(directionsResult.routes[0].legs[0].distance.text);
$('#duration').text(directionsResult.routes[0].legs[0].duration.text);
Hier ist ein vollständigeres Beispiel mit lodash . Sollte nicht zu schwer zu ersetzen flatBy
und sum
, wenn Sie es nicht verwenden.
/**
* Computes the total driving distance between addresses. Result in meters.
*
* @param {string[]} addresses Array of address strings. Requires two or more.
* @returns {Promise} Driving distance in meters
*/
export default function calculateDistance(addresses) {
return new Promise((resolve, reject) => {
if(addresses.length < 2) {
return reject(new Error(`Distance calculation requires at least 2 stops, got ${addresses.length}`));
}
const {TravelMode, DirectionsService, DirectionsStatus} = google.maps;
const directionsService = new DirectionsService;
const origin = addresses.shift();
const destination = addresses.pop();
const waypoints = addresses.map(stop => ({location: stop}));
directionsService.route({
origin,
waypoints,
destination,
travelMode: TravelMode.DRIVING,
}, (response, status) => {
if(status === DirectionsStatus.OK) {
let distances = _.flatMap(response.routes, route => _.flatMap(route.legs, leg => leg.distance.value));
return resolve(_.sum(distances));
} else {
return reject(new Error(status));
}
});
});
}
Denken Sie daran, die Google Maps API enthalten:
<script src="https://maps.googleapis.com/maps/api/js?key=API_KEY&libraries=places"></script>
Auch ich bin mir ziemlich sicher, dass ihre ToS Sie benötigen auch eine Google Map angezeigt werden soll.
Also ... genau das, was ich gesagt habe! Obwohl ich falsch darüber informiert wurde, was ein "Bein" war. Dachte, es war was sie einen "Schritt" nennen. Iterieren über 1 Bein ist dann nicht so schlimm. – mpen