Как найти оптимальный маршрут к одному из множества маркеров?

На карте у меня есть массивы маркеров. Один статический, назовем station. Остальные тоже статичны, но они временные, назовем их fire. При нажатии на fire кратчайший маршрут должен быть построен к одному из stations. Я использую TravelMode.DRIVING. Я знаю, что могу рассчитать расстояние маршрута, но для расчета я должен сначала построить маршрут. Есть ли какая-нибудь библиотека для поиска оптимального маршрута между одним фиксированным маркером и одним из многих других маркеров? Или вы можете помочь мне рассказать логику? Я могу сам написать код.

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

    directionsService1.route(request1, function (response1, status1) {
        if (status1 == google.maps.DirectionsStatus.OK) {
            var myRoute1 = response1.routes[0].legs[0];
            distance1 = myRoute1.distance.value;
            directionsService2.route(request2, function (response2, status2) {
                if (status2 == google.maps.DirectionsStatus.OK) {
                    var myRoute2 = response2.routes[0].legs[0];
                    distance2 = myRoute2.distance.value;
                    if (distance1 > distance2) {
                        directionsDisplay2.setMap(map);
                        directionsDisplay2.setDirections(response2);
                        directionsDisplay1.setMap(null);
                    } else {
                        directionsDisplay1.setMap(map);
                        directionsDisplay1.setDirections(response1);
                        directionsDisplay2.setMap(null);
                    }
                }
            });
        }
    });

person Zharzhan    schedule 05.07.2012    source источник


Ответы (2)


Услуга «Направления» ограничена по скорости и ограничена квотами. Если у вас много точек, вы не сможете вызвать цикл для всех из них.

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

Другой вариант — использовать API матрицы расстояний Google.

person geocodezip    schedule 05.07.2012

DirectionsService имеет метод route для расчета одного или нескольких маршрутов между двумя точками.

Вы можете вызывать этот метод для каждой пары fire-station и проверять возвращенные маршруты, чтобы определить самый короткий.

person Stefan    schedule 05.07.2012
comment
Я это знаю, но есть ли альтернативный способ? p.s. редактирую вопрос. - person Zharzhan; 05.07.2012