Оптимальная маршрутизация карты с помощью Google Maps

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


person Soldarnal    schedule 03.12.2008    source источник
comment
На Slashdot есть целое обсуждение этой идеи: ask.slashdot. org/article.pl?sid=08/01/09/2311215   -  person brianegge    schedule 20.08.2009


Ответы (5)


В Google Maps API DirectionsRequest есть опция, называемая optimWaypoints, которая должна делать то, что вы хотите. Однако это может обрабатывать только до 8 путевых точек.

Кроме того, существует библиотека с открытым исходным кодом (лицензия MIT), которую вы можете использовать с API Карт Google для получения оптимального (до 15 местоположений) или довольно близкого к оптимальному (до 100 местоположений) маршрута.

См. http://code.google.com/p/google-maps-tsp-solver/

Вы можете увидеть библиотеку в действии на странице www.optimap.net.

person Geir Engdahl    schedule 01.02.2012
comment
К сожалению, принимается не более 50 локаций. - person Geremia; 13.09.2020

Он всегда дает их по порядку.

Поэтому я думаю, что вам придется найти расстояние (или время) между каждой парой точек, по одной за раз, а затем решить задачу коммивояжера самостоятельно. Возможно, вы могли бы убедить Google Maps добавить эту функцию. Я предполагаю, что то, что представляет собой «достаточно хорошее» решение, зависит от того, что вы делаете и насколько быстро оно должно быть.

person MatrixFrog    schedule 02.05.2009
comment
ваш ответ сейчас неверен. Google теперь поддерживает проблему TSP. Бесплатная версия карты Google включает начальную, конечную и 8 средних точек. (всего 10 баллов) Надеюсь, вы снова отредактируете для дальнейшего использования :) - person hqt; 15.08.2015

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

Чтобы рассчитать маршрут TSP, сначала нужно попросить Google рассчитать попарное расстояние между каждым узлом в графе. Я думаю, что для этого требуется n*(n-1)/2 вычислений. Затем можно было бы взять эти расстояния и выполнить на них оптимизацию TSP.

На OpenStreetMaps.org есть приложение Java WebStart, которое может делать то, что вы хотите. Конечно, расчеты выполняются на стороне клиента. Проект с открытым исходным кодом, и, возможно, стоит посмотреть.

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

person brianegge    schedule 10.08.2009
comment
Как вернуть довольно близкий к оптимальному путь из API? Я могу вернуть баллы только в том порядке, в котором я их ввожу. - person Soldarnal; 10.08.2009
comment
Google не будет заказывать баллы. Оптимальный путь, который вычисляет Google, — это расстояние между двумя точками. Сколько существует способов добраться из Нью-Йорка в Калифорнию? Почти бесконечный. Google найдет вам один хороший маршрут, который, вероятно, близок к оптимальному, но может быть и более короткий маршрут. - person brianegge; 11.08.2009

У Google есть готовое решение задачи коммивояжёра. Это OR-Tools (инструменты исследования операций Google), которые вы можете найти здесь: https://developers.google.com/optimization/routing/tsp

В основном вам нужно сделать 2 вещи:

  • Получите расстояния между каждыми двумя точками с помощью Google Maps API: https://developers.google.com/maps/documentation/distance-matrix/start

  • Затем вы передадите расстояния в массиве инструментам ИЛИ, и он найдет очень хорошее решение для вас (для некоторых случаев с миллионами узлов были найдены решения, гарантированно находящиеся в пределах 1% от оптимального тура).

Вы также можете отметить, что:

В дополнение к поиску решений классической задачи коммивояжера, OR-Tools также предоставляет методы для более общих типов TSP, включая следующие:

  • #P7#
  • #P8#
  • #P9#

Дополнительные ссылки:

person Muhammad Altabba    schedule 27.01.2019

Только что нашел http://gebweb.net/optimap/. Выглядит красиво и просто. Онлайн-версия с использованием карт Google.

person mrhvid    schedule 16.01.2012
comment
Вау, замечательный сайт, и я рад, что он так долго существует в Интернете - он будет очень полезен моему другу !!! - person DPSSpatial; 02.09.2015