Según 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);
En realidad, esto funciona muy bien también, si usted no tiene ningún waypoint:
$('#distance').text(directionsResult.routes[0].legs[0].distance.text);
$('#duration').text(directionsResult.routes[0].legs[0].duration.text);
Esto es un ejemplo más completo utilizando lodash . No debería ser demasiado difícil reemplazar flatBy
y sum
si no lo está 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));
}
});
});
}
recuerde incluir la API de Google Maps:
<script src="https://maps.googleapis.com/maps/api/js?key=API_KEY&libraries=places"></script>
Además, estoy bastante seguro de sus operadores de telecomunicaciones que requieren para mostrar un mapa de Google también.
Entonces ... ¡exactamente lo que dije! Aunque estaba mal informado sobre lo que era una "pierna". Pensé que era lo que ellos llaman un "paso". Iterar más de 1 pierna no es tan malo entonces. – mpen