Почему карты Google показывают неправильную продолжительность между двумя точками? - PullRequest
0 голосов
/ 06 августа 2020

На моей карте 4 разных точки. Но это вообще response то же duration для всех legs. Думаю не оценивайте с трафиком c. Например, в Google Maps я проверяю продолжительность двух точек. Иногда это показывает 1 час 8 минут, а иногда - 1 час 7 минут. Но в моем проекте это всегда 58 минут. Как решить эту проблему и правильно показать длительность?

 function calculateAndDisplayRoute(directionsService,directionsRenderer, map, myCompany, companies) {
            var waypts = [];

            for (var i = 0; i < companies.length; i++) {
                waypts.push({
                    location: companies[i].Address,
                    stopover: true
                });
            }
            directionsService.route(
                {
                    origin: document.getElementById("start").title,
                    destination: document.getElementById("start").title,
                    waypoints: waypts,
                    optimizeWaypoints: true,
                    travelMode: "DRIVING",
                    drivingOptions: {
                        departureTime: new Date(Date.now()),
                        trafficModel: 'optimistic'
                    }
                },
                function (response, status) {
                    if (status === "OK") {
                        console.log("response = ", response)
                        directionsRenderer.setDirections(response);
                        var route = response.routes[0];
                        console.log("route = ", route);
                        renderDirectionsPolylines(response, map, myCompany, companies);

1 Ответ

1 голос
/ 07 августа 2020

Согласно официальной документации сервиса Google Maps Directions API, информация о трафике c учитывается только при выполнении всех следующих условий:

  • Параметр режима движения - движение , или не указан (режим движения по умолчанию является режимом движения).
  • Запрос включает допустимый параметр departure_time. В departure_time можно установить текущее время или некоторое время в будущем. Это не может быть в прошлом.
  • Запрос не включает промежуточные путевые точки. Если запрос включает путевые точки, добавьте к каждой путевой точке префикс via:, чтобы повлиять на маршрут, но избегать остановок. Например, & waypoints = via: San Francisco | via: Mountain View | ...

source: https://developers.google.com/maps/documentation/directions/overview#DirectionsAdvanced

Глядя на ваш code Я вижу, что вы используете промежуточные путевые точки

waypts.push({
    location: companies[i].Address,
    stopover: true
});    

Если вы хотите принять во внимание условия движения c в реальном времени, вы должны установить для свойства остановки ваших путевых точек значение false. Однако имейте в виду, что в этом случае вы не можете использовать оптимизацию путевых точек, потому что оптимизация путевых точек работает с остановками только в соответствии с официальной документацией:

По умолчанию служба Directions рассчитывает маршрут через предоставленные путевые точки в их данный заказ. При желании вы можете передать optimize: true в качестве первого аргумента в параметре waypoints, чтобы позволить службе Directions оптимизировать предоставленный маршрут, переставляя путевые точки в более эффективном порядке. (Эта оптимизация является приложением задачи коммивояжера.) Время в пути является основным оптимизируемым фактором, но при выборе наиболее эффективного маршрута могут приниматься во внимание другие факторы, такие как расстояние, количество поворотов и многие другие. Все путевые точки должны быть остановками, чтобы служба Directions могла оптимизировать свой маршрут.

источник: https://developers.google.com/maps/documentation/directions/overview#OptimizeWaypoints

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

...