Как получить маршрут кратчайшего расстояния из точки A в B по умолчанию из Google Direction API

Как получить маршрут кратчайшего расстояния из точки A в B по умолчанию из предложенных Google Direction API альтернативных маршрутов? По умолчанию он дает нам кратчайшие маршруты в зависимости от текущих условий движения. Я заметил, что Google отвечает несколькими альтернативными маршрутами, если вы включите "provideRouteAlternatives=true", мне было интересно, можем ли мы отправить параметр в Google API, чтобы он всегда возвращал маршрут с кратчайшим расстоянием по умолчанию

3 ответа

Как упоминал Рамешвор, предложенный Google маршрут может быть оптимизирован для времени поездки, а не для расстояния. Если указана одна или несколько путевых точек, то в любом случае может быть возвращен только один маршрут, но программно лучше предположить, что всегда будет возвращено более одного маршрута.

В следующем примере показан простой способ найти маршрут с кратчайшим расстоянием, используя jQuery; обратите внимание, этот код не оптимизирован, но он должен работать:

var route_options = [];

for (var i = 0; i < response.routes.length; i++)
{
    var route = response.routes[i];
    var 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 = [
    {route_id:0, distance:35125},
    {route_id:1, distance:22918},
    {route_id:2, distance:20561}
];
*/

// Sort the route options; shortest to longest distance in ascending order
route_options.sort(function(a, b) {
    return parseInt(a.distance) - parseInt(b.distance);
});

/*
route_options = [
    {route_id:2, distance:20561},
    {route_id:1, distance:22918},
    {route_id:0, distance:35125}
];
*/    

var shortest_distance = (route_options[0]['distance'] * 0.001); // convert metres to kilometres

Затем вы можете получить доступ к значению "route_id", чтобы получить доступ к правильному маршруту в объекте ответа.

По умолчанию Google предоставляет нам маршруты наименьшей продолжительности в зависимости от текущих условий движения. Я заметил, что Google отвечает несколькими альтернативными маршрутами, если вы включите "provideRouteAlternatives = true". Когда вы не запрашиваете альтернативные маршруты, вы получаете наиболее оптимизированный маршрут по умолчанию, хотя он не обязательно оптимизирован для расстояния. Если вы пытаетесь получить кратчайший маршрут, то способ сделать это состоит в том, чтобы ваше приложение оценило общее расстояние каждого маршрута в ответе и программно выбрал тот, который имеет наименьшее расстояние. Нет параметра запроса, который вы можете передать Google в запросе "вернуть только кратчайший маршрут".

Проверьте это демо http://webavenue.com.au/demo/google-shortest-distance/route.html

Использование кратчайшего, а не самого быстрого маршрута, как правило, не очень хорошая идея на практике.

Когда самый короткий маршрут не самый быстрый, это может быть маршрут низкого качества с точки зрения времени, эффективности использования топлива и иногда даже личной безопасности. Эти факторы более важны для большинства водителей на дороге.

Есть несколько обходных путей, которые потенциально могут привести к более коротким маршрутам, но у них есть существенные недостатки, поэтому я рекомендую против них:

  1. Запросить маршруты в обоих направлениях. Направления от А до В могут не привести к возможному маршруту от В до А из-за таких ситуаций, как улицы с односторонним движением, ограничения на поворот и различные местоположения выездов на шоссе. Запрашивая маршруты в обоих направлениях и выбирая кратчайший маршрут, можно получить маршрут, который нельзя использовать в одном направлении.

  2. Запросить альтернативные маршруты. Запрос альтернативных маршрутов и выбор кратчайшего маршрута может привести к более короткому маршруту, чем тот, который был возвращен по умолчанию. Однако альтернативные маршруты, как правило, не являются стабильными (могут меняться со временем при изменении краткосрочных дорожных условий) и не гарантируют включение кратчайшего маршрута. Это означает, что самый короткий маршрут все еще может быть недоступен, а также самый короткий маршрут, обнаруженный этим подходом, может со временем меняться, создавая впечатление нестабильности.

Часто я видел запросы на самые короткие маршруты из случаев использования, когда целью является довольно реалистичное расстояние вождения в определенное время дня и недели, например, рабочие, добирающиеся на работу и обратно. В этих случаях направления движения могут быть запрошены с departure_time установите соответствующее время дня (и дня недели) в течение недели (в будущем, а не в прошлом), чтобы получить маршрут, на который влияют типичные условия движения в это время дня и недели.

Примечание: это доступно только в том случае, если запрос включает ключ API или идентификатор клиента Премиум-плана API Карт Google.

Другие вопросы по тегам