Пользовательский маршрут на карте Google

У меня есть область карты Google, для которой маршрутизация не определена. Это кампус моего университета. Я хочу добавить к нему еще два здания и несколько полилиний, чтобы обозначить дороги, так как дороги не отображаются на карте. Затем я применю алгоритм A*, чтобы найти кратчайший путь между одной ломаной линией и другой. Карта будет доступна для мобильного приложения Android. В базовом состоянии приложение обновляет местоположение пользователя. Например, пользователь может запросить переход на инженерный факультет. Как я теперь узнаю, где он, я имею в виду, что является источником маршрута, ближайшей ломаной? Это то, как все делается? Спасибо.


person user1066429    schedule 26.11.2011    source источник


Ответы (3)


  1. Используйте данные OpenStreetMap; вы можете присоединиться к OSM в качестве участника и добавлять на карту здания, дороги и другие объекты. OpenStreetMap — это что-то вроде Википедии, но с картами, а не с энциклопедическими статьями.

  2. Загрузите и обработайте данные OpenStreetMap для вашего кампуса: получите все полилинии, которые можно использовать в качестве маршрутов; сортировать их точки; определить точки, общие для более чем одной полилинии - они являются узлами; построить ориентированный граф дуг, соединяющих эти узлы.

  3. Реализуйте алгоритм A*, используя ориентированный граф. A* определенно лучший алгоритм для использования; быстро, правильно и хорошо документировано.

  4. Используйте устройство GPS (на котором работает ваш код), чтобы узнать, где находится ваш пользователь. GPS дает координаты в широте/долготе; Данные OpenStreetMap также представлены в широте/долготе; так что должно работать нормально.

Это, естественно, потребует некоторых исследований и тяжелой работы. Я гарантирую, что он будет делать то, что вы хотите, потому что я сделал это сам (коммерческий - я не буду ссылаться на свой продукт, потому что меня за это стукнули по костяшкам пальцев; но я, естественно, утверждаю, что выполнение чего-то коммерческого требует определенной дисциплины) . Существует множество программ с открытым исходным кодом, которые могут помочь в этом. В частности, алгоритм A* очень хорошо объяснен в Википедии.

person Graham Asher    schedule 23.09.2012

Я не думаю, что алгоритм A * является правильным алгоритмом. Для кратчайшего пути алгоритм Дейкестра лучше. Согласно википедии, A* работает быстрее, но дает тот же результат. Все остальное кажется очень разумным.

person Gigamegs    schedule 26.11.2011
comment
Я ценю ваш ответ, однако знаете ли вы, какой алгоритм используется для получения ближайшей полилинии? Это было бы источником для моего алгоритма Дейкистры - person user1066429; 27.11.2011
comment
Что вы подразумеваете под ближайшей ломаной? - person Gigamegs; 27.11.2011

Если ваша задача найти местоположение пользователя, то вы можете использовать GPS. О получении кратчайшего маршрута: A* быстрее, чем dijkestra, поэтому это хороший выбор, но получение результата, вероятно, должно происходить из узлов полилиний, а не от одной полилинии к другой.

person zeacuss    schedule 09.04.2012