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

Jan 24, 2010 19:45

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.

gps, openstreetmap, russa, maps

Previous post Next post
Up