Квантовый Ёжик (overquantum) wrote,
Квантовый Ёжик
overquantum

Category:
  • Music:

OpenStreetMap - бесплатные GPS-карты

OpenStreetMap - открытый проект по рисованию карты мира усилиями добровольцев. Так же как добровольцы пишут Википедию.

Как в целом устроен OpenStreetMap можно посмотреть на схемке, а для рядового пользователя OSM - это два вида карт:
1) Растровые, доступная на сайте http://www.openstreetmap.org
2) Векторые, доступные в редакторах и для скачивания в виде файлов

Для ориентирования на местности карты нужно загрузить в устройство, с которым вы выйдете на эту местность, - способное принимать GPS-сигнал, рисовать карту и ваше положение на ней. Если устройство сможет ещё маршрут прокладывать - вообще хорошо.

Сегодня речь пойдёт о конвертации OpenStreetMap карт для отображения их в программах Russa или Navitel Navigator. Соответственно, эти карты можно будет загрузить в устройства, где работает одна из этих программ.

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

Кратко и для знающих конвертация выглядит так: .osm -> .mp -> .rus / .nm2

Disclaimer - я описываю способ, который использую сам. Если вы знаете способ проще - милости прошу написать в комментарии.

Ну а теперь - подробно:

1) Скачать .osm
.osm - это формат векторных карт для OpenStreetMap. От основан на XML, т.е. фактически текстовый.
Получить .osm-файл можно следующими способами:
1. Скачать редакторами: JOSM или Merkaartor. Просто загружаете с сервере нужный вам прямоугольник карты и сохраняете его в файл. Я лично предпочитаю использовать JOSM, но для него нужно поставить Java.
2. Скачать готовую карту некоторого региона с одного из хостингов, например:
- geofabrik.de - континенты целиком и в нарезке по странам, некоторые страны порублены на провинции/штаты/области
- cloudmade.com - весь мир по странам, некоторые страны порублены на провинции/штаты/области
Просто скачайте файл и распакуйте bz2.
3. Скачать вручную, через XAPI
Для работы с XAPI нужно составлять HTTP-запрос к серверу, ничего сложного, по ссылке всё написано.

2) Порезать .osm на части (если требуется)
.osm-файлы, особенно готовые по странами, бывают довольно объёмными и не проходят последующую конвертацию (см. ниже). Поэтому их приходится резать.
Для резки я использую splitter, он по умолчанию делает .osm файлы где-то около 120 МБ, которые потом почти всегда проходят последующую конвертацию. При необходимости splitter можно сконфигурировать параметрами командной строки.
Для работы splitter нужна Java.
Имейте также ввиду, что в Russa прокладка маршрутов работает только при одной загруженной карте. Т.е. если карту одной страны порезать на части и загружать в Russa как атлас - прокладка маршрутов работать не будет.

3) Преобразовать .osm в .mp
.mp - это древний польский формат хранения карт. Хорош он тем, что он текстовый и вполне человеко-читаемый, ну и очень много программ его понимают.
Для конвертации я использую программу osm2mp. К сожалению, программа требует установки Perl и пользоваться ей не очень просто.
Так или иначе, после установки и настройки Perl (описано по ссылке) и скачивания osm2mp, программой можно пользоваться.
Произвольный .osm файл нужно ещё предварительно упорядочить - обработать прилагаемым скриптом osmsort.pl
Затем нужно вызывать osm2mp.pl с указанием параметров конвертации.
Путём длительных экспериментов, я для себя написал набор .bat-файлов, например, стандартная конвертация с прицелом для Russa:
echo Start %date% %time% >> std_err.log
echo %1 >> std_err.log
perl.exe osmsort.pl %1 > temp_del.osm  2>> std_err.log
perl.exe osm2mp.pl --header header_russa.tpl temp_del.osm > %1.mp   2>> std_err.log
echo Finish %date% %time% >> std_err.log

Вызывать такой .bat-файл надо с 1 параметром - именем (и полным путём) .osm-файла
1я строка записывает в файл std_err.log дату и время начала преобразования
2я строка записывает в файл std_err.log имя .osm-файла
3я строка выполняет osmsort, информация о ходе процесса (и ошибках) идёт в файл std_err.log
4я строка выполняет osm2mp, информация о ходе процесса (и ошибках) идёт в файл std_err.log
5я строка записывает в файл std_err.log дату и время окончания преобразования
(Путь до perl.exe должен быть прописано либо в системе, либо в вашем .bat-файле)

Для конвертации карт зарубежных стран, желательно включить транслит - а то названия . Например, добавив следующие параметры "--nametaglist int_name,name:en,name,name:ru,ref,int_ref,addr:housenumber,operator --translit" сразу после "osm2mp.pl"

Для конвертации с прицелом для Navitel, необходимо скачать комплект файлов конфигураций osm2navitel, переименовать тамошние файлы соответственно в header_navitel.tpl, poly_navitel.cfg и poi_navitel.cfg; и добавить к вызову osm2mp.pl параметры "--osmbbox --navitel --disableuturns --header header_navitel.tpl --cfgpoly poly_navitel.cfg --cfgpoi poi_navitel.cfg"

Для других конвертаций тоже можно заготовить poly*.cfg, poi*.cfg и header*.tpl

Большая карта может не преобразоваться - например, 32-битный Perl ограничен 2ГБ оперативной памяти, в итоге osm2mp не может справиться с .osm-файлами объёмом где-то от 700МБ, а иногда падает с ошибкой памяти и на существенно меньших картах. В этом случае карту надо резать (см. шаг 2).

4) Преобразовать .mp в .rus (или .nm2)
Для этой цели есть отличная программа GPSMapEdit, которая, как следует из названия, ещё и редактор. Достаточно в GPSMapEdit загрузить .mp файл и сделать Export в нужный формат.
Но есть несколько подводных камней:
- Файлы .rus (и .nm2), сохраняемые из GPSMapEdit, имеют ограничение на объём в 16МБ. По моим оценкам, это соответствует около 120 МБ .mp-файла или около 600 МБ .osm-файла.
- Файлы .nm2 для версий Navitel 3.2.* очень требовательны к отсутствию ошибок на карте, так что если происходит "Export failed" - вам придётся исправлять ошибке на отображаемой карте, либо выбирать другой формат, либо конвертировать карту с другими настройками (см. шаг 3).

P.S. Готовые .mp-файлы для некоторых стран и некоторых областей России также можно скачать, а потом уже преобразовать в .rus или .nm2.
Tags: gps, maps, openstreetmap, russa
Subscribe

  • Беспонтовые печенюшки

    Как вы возможно слышали, Google открыл доступ к новому инструменту Guetzli для сжатия изображений формата JPEG. Что пока удалось выяснить: 1)…

  • SokobanCompact v0.7 - open source

    Опубликовал исходники SokobanCompact v0.7 под GPL v3 на github. SokobanCompact - бесплатная логическая игра типа Sokoban для Windows Mobile 6 и…

  • JPEGfix - чиним файлы JPEG самостоятельно

    JPEGfix - набор инструментов для ремонта повреждённых изображений в формате JPEG. Насколько я знаю, подобных программ в интернете нет, ни в…

  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 2 comments