按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);
其实,这只是正常工作也一样,如果你没有任何航点:
$('#distance').text(directionsResult.routes[0].legs[0].distance.text);
$('#duration').text(directionsResult.routes[0].legs[0].duration.text);
下面是使用lodash一个更全面的例子。如果您不使用它,请不要太难替换flatBy
和sum
。
/**
* 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));
}
});
});
}
请记住,包括谷歌地图API:
<script src="https://maps.googleapis.com/maps/api/js?key=API_KEY&libraries=places"></script>
而且,我敢肯定他们的服务条款要求你显示谷歌地图了。
所以......正是我所说的!虽然我误解了一个“腿”是什么。认为这是他们所说的“步骤”。迭代1条腿并不那么糟糕。 – mpen 2010-07-15 00:43:39