Secondo 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);
In realtà, questo funziona bene anche se non si dispone di alcun waypoint:
$('#distance').text(directionsResult.routes[0].legs[0].distance.text);
$('#duration').text(directionsResult.routes[0].legs[0].duration.text);
Ecco un esempio più completo utilizzando lodash . Non dovrebbe essere troppo difficile sostituire flatBy
e sum
se non lo stai usando.
/**
* 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));
}
});
});
}
ricordarsi di includere l'API di Google Maps:
<script src="https://maps.googleapis.com/maps/api/js?key=API_KEY&libraries=places"></script>
Inoltre, sono abbastanza sicuro loro TOS richiedono di visualizzare una mappa di Google anche.
Quindi ... esattamente quello che ho detto! Anche se ero disinformato su cosa fosse una "gamba". Ho pensato che fosse quello che chiamano un "passo". L'iterazione su una gamba non è poi così male. – mpen