У меня есть область карты Google, для которой маршрутизация не определена. Это кампус моего университета. Я хочу добавить к нему еще два здания и несколько полилиний, чтобы обозначить дороги, так как дороги не отображаются на карте. Затем я применю алгоритм A*, чтобы найти кратчайший путь между одной ломаной линией и другой. Карта будет доступна для мобильного приложения Android. В базовом состоянии приложение обновляет местоположение пользователя. Например, пользователь может запросить переход на инженерный факультет. Как я теперь узнаю, где он, я имею в виду, что является источником маршрута, ближайшей ломаной? Это то, как все делается? Спасибо.
Пользовательский маршрут на карте Google
Ответы (3)
Используйте данные OpenStreetMap; вы можете присоединиться к OSM в качестве участника и добавлять на карту здания, дороги и другие объекты. OpenStreetMap — это что-то вроде Википедии, но с картами, а не с энциклопедическими статьями.
Загрузите и обработайте данные OpenStreetMap для вашего кампуса: получите все полилинии, которые можно использовать в качестве маршрутов; сортировать их точки; определить точки, общие для более чем одной полилинии - они являются узлами; построить ориентированный граф дуг, соединяющих эти узлы.
Реализуйте алгоритм A*, используя ориентированный граф. A* определенно лучший алгоритм для использования; быстро, правильно и хорошо документировано.
Используйте устройство GPS (на котором работает ваш код), чтобы узнать, где находится ваш пользователь. GPS дает координаты в широте/долготе; Данные OpenStreetMap также представлены в широте/долготе; так что должно работать нормально.
Это, естественно, потребует некоторых исследований и тяжелой работы. Я гарантирую, что он будет делать то, что вы хотите, потому что я сделал это сам (коммерческий - я не буду ссылаться на свой продукт, потому что меня за это стукнули по костяшкам пальцев; но я, естественно, утверждаю, что выполнение чего-то коммерческого требует определенной дисциплины) . Существует множество программ с открытым исходным кодом, которые могут помочь в этом. В частности, алгоритм A* очень хорошо объяснен в Википедии.
Я не думаю, что алгоритм A * является правильным алгоритмом. Для кратчайшего пути алгоритм Дейкестра лучше. Согласно википедии, A* работает быстрее, но дает тот же результат. Все остальное кажется очень разумным.
Если ваша задача найти местоположение пользователя, то вы можете использовать GPS. О получении кратчайшего маршрута: A* быстрее, чем dijkestra, поэтому это хороший выбор, но получение результата, вероятно, должно происходить из узлов полилиний, а не от одной полилинии к другой.