Как найти кратчайший маршрут API карты Google, как показано в маршруте карты Google
У меня проблемы с выбором кратчайшего маршрута. Проблема в том, что существует разница между расстоянием, показанным на карте Google, и кратчайшими маршрутами, полученными с помощью google.maps.DirectionsService(); Я также получаю альтернативные маршруты, но они все еще не совпадают с расстоянием, указанным на карте. Введите описание изображения здесь
Расстояние, показанное на карте, составляет 15 км, но самые короткие маршруты по google.maps.DirectionsService() составляют 18,3 км. Я хочу получить расстояние, показанное на карте, как на изображении, которое я прилагаю. код...
directionsService.route(request, function(response, status) {
if (status === 'OK') {
let route_options = [];
for (var i = 0; i < response.routes.length; i++)
{
let route = response.routes[i];
let distance = 0;
// Total the legs to find the overall journey distance for each route option
for (var j = 0; j < route.legs.length; j++)
{
distance += route.legs[j].distance.value; // metres
}
route_options.push({
'route_id': i,
'distance': distance
});
}
route_options.sort(function(a, b) {
return parseInt(a.distance) - parseInt(b.distance);
});
let duration = response.routes[0].legs[0].duration.value;
let shortest_distance = (route_options[0]['distance'] * 0.001); // convert metres to kilometres
return shortest_distance;
}
});
}
1 ответ
Вероятно, где-то еще в вашей реализации кода есть проблема, которую вы не опубликовали, потому что код, которым вы поделились, возвращает то же расстояние, что и Карты Google.
Пожалуйста, взгляните на этот jsfiddle, основанный на примере Google, для демонстрации. Выполните следующие действия:
1. Выберите "Аэропорт Франкфурта (FRA) (FRA), Франкфурт, Германия" в
качестве пункта
отправления 2. Выберите "Отель Frankfurt Marriott Hotel, Hamburger Allee, Франкфурт, Германия" в качестве пункта назначения 3. Выберите режим "Вождение"
Вывод в консоль:
distance.text: 15.0 km
distance.value: 14.988
shortest_distance: 14.988
Соответствующий код ниже:
function(response, status) {
if (status === 'OK') {
let route_options = [];
for (var i = 0; i < response.routes.length; i++) {
let route = response.routes[i];
let distance = 0;
// Total the legs to find the overall journey distance for each route option
for (var j = 0; j < route.legs.length; j++) {
distance += route.legs[j].distance.value; // metres
}
route_options.push({
'route_id': i,
'distance': distance
});
}
route_options.sort(function(a, b) {
return parseInt(a.distance) - parseInt(b.distance);
});
let duration = response.routes[0].legs[0].duration.value;
let shortest_distance = (route_options[0]['distance'] * 0.001); // convert metres to kilometres
console.log("distance.text: " + response.routes[0].legs[0].distance.text);
console.log("distance.value: " + response.routes[0].legs[0].distance.value * 0.001);
console.log("shortest_distance: " + shortest_distance);
me.directionsRenderer.setDirections(response);
} else {
window.alert('Directions request failed due to ' + status);
}
});
Надеюсь это поможет!