Как мне работать с файлами.osm с точки зрения создания узлов и ребер, чтобы я мог поместить его в алгоритм Джикстра?
У меня есть файл MetroManila.osm, и я анализирую его, чтобы он мог читать дороги только с помощью этой команды: --keep = --keep-nodes=highway --keep-ways=
, Это правильная команда для фильтрации только дорог?
Что я хочу после разбора, чтобы создать узел, где есть пересечения или кривые, или это возможно, просто используя целые узлы в MetroManila.osm? Могу ли я создать ребро, используя его, и как мне это сделать? В настоящее время я действительно теряюсь в том, что делать, так как я довольно новичок в андроид-студии и в osmdroid.
1 ответ
Это не имеет никакого отношения к Android или osmdroid.
Чтобы узнать, как создать график маршрутизации из файла OSM, см. Соответствующий ответ по адресу help.openstreetmap.org. Цитирую из этого:
- разбирать все пути; отбросьте те, которые не являются дорогами, а для остальных запомните идентификаторы узлов, из которых они состоят, путем увеличения "счетчика ссылок" для каждого упомянутого узла.
- разбирать все пути во второй раз; путь обычно становится одним ребром, но если какие-либо узлы, кроме первого и последнего, имеют счетчик ссылок больше единицы, то разделите путь на два ребра в этой точке. Узлы со счетчиком ссылок, равным единице, которые не являются ни первыми, ни последними, могут быть отброшены, если только вам не нужно вычислять длину ребра.
- (если вам нужна геометрия для узлов вашего графа), проанализируйте раздел узлов XML, записав координаты для всех сохраненных вами узлов.
Также взгляните на маршрутизацию в вики OSM, чтобы получить общие советы и существующие инструменты и библиотеки.
Относительно osmdroid: Если вы не полагаетесь на автономную маршрутизацию, взгляните на osmbonuspack, он поддерживает онлайн-маршрутизацию.
Если вы не хотите изобретать велосипед, просто используйте один из существующих инструментов автономной маршрутизации, упомянутых в вики OSM.