навигационное приложение с другим алгоритмом поиска маршрута - PullRequest
0 голосов
/ 11 февраля 2020

Я sh создаю приложение android, которое использует службы OSM и запускает алгоритм по моему выбору, чтобы найти маршрут, скажем A * или некоторые heuristi c на Dijkstra .

На вики-странице Routing есть несколько хороших указателей, но она не дает никакого представления о том, как go реализовать свою собственную Алгоритм в приложении.

1 Ответ

1 голос
/ 13 февраля 2020

Этот ответ является обзором, который может помочь вам лучше сориентироваться в ландшафте и найти способ решения проблемы. Ваш вопрос слишком широк, чтобы дать точный простой ответ, но я понимаю, почему вы задаете такой вопрос.

Вы можете использовать библиотеку Osmdroid , чтобы отобразить ваш маршрут на Android.

Имейте в виду, что основной функцией Osmdroid является отображение фрагментов карты. Плитки карты - это просто растровые изображения, поэтому вам нужен либо сетевой источник плиток, либо автономный. Как это сделать, описано в документации и частично в других вопросах по SO. Это слишком большой топи c, чтобы объяснить это здесь подробно. Просто чтобы прояснить: .osm файл с необработанными данными OpenstreetMap не может быть напрямую обработан Osmdroid. Плитки карты обычно обрабатываются из этих данных довольно сложным способом, а не на лету.

Еще одна очень важная функция в библиотеке Osmdroid - это возможность отображать так называемые наложения. Например, маркеры, полигоны и др. c. Вы можете использовать их, чтобы нарисовать свой маршрут на карте и другие функции, которые вы можете отобразить sh. Это снова описано в документации и слишком велико для go здесь.

Существует поддержка маршрутизации для Osmdroid (AFAIK в Osmbonuspack), но речь идет об использовании некоторого стороннего сервиса для получения ваших данных маршрутизации. и отображать это. Согласно вашему комментарию вы хотите реализовать свой собственный алгоритм, и поэтому он не будет вам полезен.

Итак, последняя часть - как интегрировать ваш алгоритм в это. Это не простой вопрос с простым ответом. Вам нужно будет делать почти все самостоятельно, начиная с получения данных, необходимых для запуска алгоритма, из базы данных OpenstreetMap (файл .osm). Я не думаю, что есть API, который предоставил бы вам разумный способ доступа к данным в форме, подходящей для вычисления маршрута. Подход, который я бы выбрал, заключается в разработке какой-то предварительной обработки, которая будет принимать файл .osm или базу данных с данными, чтобы создать собственную структуру, представляющую график для навигации. Я бы включил этот график в свое приложение и запустил алгоритм на этих данных. Результатом моего алгоритма будет маршрут: список координат, который я буду использовать для рисования ломаной линии.

Если область, которую нужно покрыть, достаточно мала, вы можете начать с включения файла .osm В вашем проекте и запуск алгоритма был таким же, как и сейчас. Может быть, этого будет достаточно для вашей ситуации.

Один интересный проект, на который стоит обратить внимание, чтобы найти вдохновение, это Graphopper - они создали именно то, что я сказал выше, и они используют его, чтобы обеспечить библиотека для Android / iOs и веб-API. Но суть все та же - предварительно обработать данные OSM в графические данные и запустить алгоритм на этом. Поскольку вы sh хотите реализовать алгоритм самостоятельно, эта библиотека вам не поможет (если вы не разветвите проект и не измените его), но она может стать ценным учебным ресурсом.

...