RU:Osm2mp
Osm2mp — это скрипт на языке программирования Perl, написаный пользователем Liosha для преобразования данных OSM в польский формат (.mp). Файлы, полученные в результате конвертирования, поддерживают маршрутизацию.
Основные возможности
- настраиваемый набор типов;
- генерация роутингового графа;
- поддержка отношений multipolygon и restriction;
- обработка данных для совместимости с cgpsmapper (близкие узлы, самопересечения);
- отчёт об обнаруженных ошибках в исходных данных.
В какие форматы можно преобразовать .mp-файлы
Полученный файл в Польском формате (.mp) можно сконвертировать в разные форматы для навигаторов:
- Для Garmin: с помощью cgpsmapper или Mapcenter
- Для Magellan: инструкция и софт у Виктора Поморцева и Михаила Шаронова
- Для программы Навител: с помощью редактора GPSMapEdit. Инструкции здесь.
- Для программы GIS Russa. Инструкции: здесь.
- Для программы PocketGIS. Конвертер: здесь.
- Для программы "Семь дорог". Желательно перед конвертацией открыть и сохранить mp-файл с помощью редактора GPSMapEdit.
- Для программы TourMap. Конвертер: здесь.
Установка программы в среде Windows
Использование готовой сборки
Самым простым и быстрым вариантом сконвертирировать OSM файл является использование готовой сборки osm2mp:
Следует отметить что при использовании вышеупомянутых сборок надежность и производительность конвертирования не гарантируются.
Работа со сборкой производится в 3 простых шага.
- Распакуйте содержимое одного из архивов в папку osm2mp, желательно в корневом каталоге
- Поместите файл для конвертирования в папку osm2mp, переименовав его в RU-KB.osm
- Запустите файл osm2mpGarmin32.bat и дождитесь окончания конвертирования (может занимать много времени для больших файлов)
После окончания конвертирования в папке появится файл map.mp, который и является файлом сконвертированной карты.
Ручная установка скрипта
Для запуска программы-скрипта osm2mp, вам понадобится установить ActivePerl для Windows. После установки ActivePerl обязательно надо установить некоторые модули. Проделаем это:
- Перейти по ссылке в SVN и скачать оттуда следующие файлы:
garmin.yml, nodes-common.yml, nodes-garmin-custom.yml, ways-areas-common.yml, ways-areas-garmin-custom.yml, ways-lines-common.yml, ways-lines-garmin-custom.yml, ways-roads-common.yml, ways-roads-garmin.yml и сам скрипт osm2mp.pl
в любое место, в одну папку на диске, (нажимаем правой кнопкой мышки на ссылку и выполняем команду "Сохранить объект как...").
Примечание: для конвертирования для Навител, файлы navitel.yml, nodes-navitel.yml, ways-areas-navitel.yml, ways-lines-navitel.yml, ways-roads-navitel.yml взять тут. (Поскольку качать браузером по одному файлику из SVN могут только мазохисты, рекомендую использовать одну из программ-качалок для SVN, например, TortoiseSVN)
- Открыть файл garmin.yml редактором WordPad и дополнить значение переменной Name в секции [IMG ID] так: Name=[% mapname %] (Converted by Ваше_Имя). Это необходимо для того, чтобы при просмотре инфо конвертированной карты, отображалось имя того, кто выполнил конвертирование. (Ага, щас. Нет этого файла. Скорее всего, это надо делать в output-polish.yml - dimonster)
- Скачать и установить ActivePerl — http://www.activestate.com/activeperl/
- Выполнить Dos-команду \Perl\bin\ppm.bat. (в версии 5.14 в Пуске после установки появится ярлык "Perl Package Manager". А в версии 5.32 используются команды CLI: state install / state uninstall / state package)
- В окрывшемся, через некоторое время, окне Perl Package Manager (PPM) выбрать в меню View команду All Packages
- найти в списке модуль Template-toolkit и выделить его
- В меню Action (или в контекстном меню по правому клику) выполнить команду Install Template-toolkit
- Таким же образом отметить для установки неустановленные по умолчанию в Вашей версии ActivePerl модули:
- Config-Std ***,
- Encode-Locale *,
- File-Slurp **,
- Geo-Openstreetmap-Parser **,
- Getopt-Long *,
- List-MoreUtils *,
- Log-Any **,
- Log-Any-Adapter **, (выяснилось, что, как минимум в версии 5.32, модуль Log-Any уже содержит в себе данный модуль более новой версии, чем если его ставить отдельно, а в отдельном модуле нет нужных функций)
- Match-Smart, (если Smart нет, то Match-Any, match-simple, match-simple-XS)
- Math-Geometry-Planar-GPC-Polygon,
- Math-Polygon **,
- Math-Polygon-Tree **,
- PerlIO-via-PrepareCP1251,
- PerlIO-via-Unidecode,
- Text-Unidecode,
- Tree-R,
- YAML **,
- * в версии 5.14 уже установлены,
** необходимы для работы скрипта getbound.pl,
*** предположительно, этот модуль тоже нужен)
- * в версии 5.14 уже установлены,
- В меню File выполнить команду Run Marked Actions
- Выйти из PPM
Алэ цэ щэ, нажаль, нэ всэ :) В зависимости от версии ActivePerl может меняться содержимое и названия пакетов. Жизнь не стоит на месте. Поэтому на сегодня для версии ActivePerl 5.16.2 build 1602 необходимо скачать ещё несколько пакетов.
- Запустить "Командную строку" (Пуск-Выполнить-набрать слово cmd - Нажать ОК).
- В командной строке набарть cpan, нажать Ентер.
- Находясь в cpan (на экране видно строку cpan> ), набрать install Config::Std и нажать Ентер (не перепутайте прописные и строчные буквы). Если ругается про тесты - запустите notest install Config::Std.
- Находясь в cpan (на экране видно строку cpan> ), набрать install Template и нажать Ентер (не перепутайте прописные и строчные буквы). На вопросы установщика жать Ентер.
- Выйти из cpan (на экране после cpan> , набрать q и нажать Ентер)
- Запустить ppm и установить пакет Text-Unidecode
- Если есть проблемы с Class::Std (на свежих версиях отсутствуют), зайти на www.cpan.org, вбить в поиск Class::Std, скачать Class-Std-0.011.tar.gz, распаковать, выдрать файл Std.pm и закинуть его в c:\Perl\lib\Class\ (ибо установить через cpan не получается, а ppm это не находит)
- Установить через ppm ещё несколько пакетов (например, для 5.16.3 ActivePerl - YAML, Geo::Openstreetmap::Parser, Tree::R, Math::Polygon, Math::Geometry::Planar::GPC::Polygon, Math::Polygon::Tree, Data::Dump, PerlIO::via::Unidecode PerlIO::via::PrepareCP1251 остальные конкретные названия не помню :-( )
Если вы поставили что-то типа Strawberry Perl [1], то могут помочь волшебные строчки
cpan -T -i Config::Std cpan -i Template Text::Unidecode List::MoreUtils Encode::Locale Getopt::Long PerlIO::encoding cpan -i YAML Data::Dump Geo::Shapefile::Writer Geo::Openstreetmap::Parser Tree::R Math::Polygon cpan -i PerlIO::via::Unidecode PerlIO::via::PrepareCP1251 Inline::C Math::Polygon::Tree
для getBounds - ещё
cpan -i Log::Any Log::Any::Adapter
Внимание: под Windows крайне желательно использовать Perl из-под аккаунта с именем пользователя на латинице. Иначе могут возникать непредсказуемые ошибки, особенно при работе с CPAN.
Установка программы в среде Linux
OpenSuse
Загрузить скрипт и сопутствующие файлы:
svn co https://github.com/liosha/osm2mp/trunk/ osm2mp
Примечание: для конвертирования для Навител, конфигурационные файлы взять тут.
При необходимости установить perl (в OpenSuse по умолчанию установлен)
Установить дополнительные модули
su zypper in perl-YAML perl -MCPAN -e "install List::MoreUtils" perl -MCPAN -e "install Text::Unidecode" perl -MCPAN -e "install Data::Dump" perl -MCPAN -e "install Math::Polygon" perl -MCPAN -e "install Inline::MakeMaker" perl -MCPAN -e "install Math::Geometry::Planar::GPC::Polygon" perl -MCPAN -e "install Math::Polygon::Tree" perl -MCPAN -e "install Tree::R" perl -MCPAN -e "install Encode::Locale" perl -MCPAN -e "install Template::Context" perl -MCPAN -e "install Geo::Openstreetmap::Parser"
Gentoo
При необходимости установить perl, svn и yaml для perl
emerge perl emerge subversion emerge dev-perl/yaml
Установить дополнительные модули perl
perl -MCPAN -e "install List::MoreUtils" perl -MCPAN -e "install Text::Unidecode" perl -MCPAN -e "install Data::Dump" perl -MCPAN -e "install Math::Polygon" perl -MCPAN -e "install Inline::MakeMaker" perl -MCPAN -e "install Math::Geometry::Planar::GPC::Polygon" perl -MCPAN -e "install Math::Polygon::Tree" perl -MCPAN -e "install Tree::R" perl -MCPAN -e "install Encode::Locale" perl -MCPAN -e "install Template::Context"
Загрузить скрипт и сопутствующие файлы:
svn co https://github.com/liosha/osm2mp/trunk osm2mp
Примечание: возможно, если версия YAML, установленная в системе, немного младше указанной в скрипте, придется поправить строчку "use YAML 0.72;" на установленную версию, например "use YAML 0.71;"
Примечание: для конвертирования для Навител, конфигурационные файлы взять тут.
Ubuntu 16.04
Проверено на версии от 2016.07.26
1. Установить из репозитариев библиотеки для perl и сопутствующий софт
sudo apt-get install build-essential unzip libconfig-std-perl libyaml-perl libencode-locale-perl liblist-moreutils-perl libmatch-simple-perl libmath-polygon-perl liblocal-lib-perl libxml-parser-perl libtext-unidecode-perl libjson-perl libtemplate-perl
2. Запустить и настроить CPAN (без рута, библиотеки установятся в домашнем каталоге)
cpan ... Would you like to configure as much as possible automatically? [yes] ... What approach do you want? (Choose 'local::lib', 'sudo' or 'manual') [local::lib] ... Would you like me to append that to /home/user/.bashrc now? [yes] ... >exit
3. Перелогиниться, чтобы заново подхватился обновленный профиль с путями к библиотекам
4. Установить недостающие библиотеки через CPAN
cpan -i Math::Polygon::Tree cpan -i Tree::R cpan -i Geo::Openstreetmap::Parser
4а. Необязательные библиотеки
cpan -i PerlIO::via::PrepareCP1251
5. Загрузить и распаковать osm2mp
wget https://github.com/liosha/osm2mp/archive/master.zip unzip master.zip
6. Проверить
cd osm2mp-master wget http://data.gis-lab.info/osm_dump/dump/latest/RU-IN.osm.bz2 bunzip2 RU-IN.osm.bz2 ./osm2mp.pl -o ./result.mp ./RU-IN.osm
Установка в FreeBSD
В FreeBSD ковертер достепен для установки из исходных кодов и из портов.
- Для установки их исходных кодов необходимо загрузить конвертер из хранилища https://github.com/liosha/osm2mp , а также установить или обновить perl и используемые конвертером perl-модули до требуемой версии.
- Для установки из портов нужно перейти в директорию с портом (ports/converters/osm2mp) и установить порт, например так:
#cd /usr/ports/converters/osm2mp #make #make install
Настройка файла poly.cfg
Формат строки, описывающей роутинговую линию
<key> <value> r <lcode>,<prior> <minlvl> <maxlvl> <speed>,<class>,<oneway>,<pay>,<a1>,<a2>,<a3>,<a4>,<a5>,<a6>,<a7>,<a8>
где:
Аргумент | Что обозначает | Возможные значения |
---|---|---|
<key> | Ключ тега | |
<value> | Значение тега | |
r | Тип, в который будет преобразован объект | r — роутинговая полилиния |
p — полигон (внимание! это значение не для роутинговой полилинии) | ||
l — линия ??? (внимание! это значение не для роутинговой полилинии) | ||
s — ??? (внимание! это значение не для роутинговой полилинии) | ||
<lcode> | Код, которым будет обозначена линия на карте | Число в шестнадцатиричном формате. |
<prior> | Приоритет конвертации | Число. Из всех тегов линии для конвертации выбирается тег с наибольшим приоритетом. |
<minlvl> | Минимальный уровень, на котором виден объект | Десятичное число. |
<maxlvl> | Максимальный уровень, на котором виден объект | Десятичное число. |
<speed> | Класс скорости | 1 — до 5 км/ч — пешеходные дорожки в насел. пунктах, загородные тропы |
2 — до 20 км/ч — внутридворовые проезды, загородные труднопроходимые дороги | ||
3 — до 40 км/ч — дороги с плохим покрытием в насел. пункте, загородные участки дорог с ограничением скорости | ||
4 — до 60 км/ч — улицы, магистрали, проселочные дороги | ||
5 — до 80 км/ч — автомагистрали в насел. п., загородные дороги с небольшими дефектами | ||
6 — до 90 км/ч — крупные автомагистрали в насел. п., обычные загородные дороги с покрытием | ||
7 — до 110 км/ч — в насел. п. применяется крайне редко, загородные автомагистрали | ||
8 — без ограничений — в насел. п. не применяется, загородные улучшенные автомагистрали | ||
<class> | класс дороги | 0 — улица малая, аллея, просёлочная дорога, тропа |
1 — крупная дорога, круговое движение | ||
2 — центральная улица, прочие загородные дороги | ||
3 — основное шоссе | ||
4 — автомагистраль, съезд с дороги | ||
<oneway> | одностороннее движение | 1 — да, 0 — нет |
<pay> | платная дорога | 1 — да, 0 — нет |
<a1> | Не для служб спасения | 1 — да, 0 — нет |
<a2> | Не для служб доставки | 1 — да, 0 — нет |
<a3> | Не для машин и мотоциклов | 1 — да, 0 — нет |
<a4> | Не для автобусов | 1 — да, 0 — нет |
<a5> | Не для такси | 1 — да, 0 — нет |
<a6> | Не для пешеходов | 1 — да, 0 — нет |
<a7> | Не для велосипедистов | 1 — да, 0 — нет |
<a8> | Не для грузовиков | 1 — да, 0 — нет |
Формат строки, описывающей полигон
<key> <value> p <pcode> <minlvl> <maxlvl> <ncode>,<nminlvl>,<nmaxlvl>
Аргумент | Что обозначает | Возможные значения |
---|---|---|
<key> | ключ тега | |
<value> | значение тега | |
p | Тип, в который будет преобразован объект | r — роутинговая полилиния (внимание! это значение не для полигона) |
p — полигон | ||
l — линия ??? (внимание! это значение не для полигона) | ||
s — ??? (внимание! это значение не для полигона) | ||
<pcode> | Код, которым будет обозначен полигон на карте | число в шестнадцатиричном формате. |
<minlvl> | Минимальный уровень, на котором виден объект | десятичное число |
<maxlvl> | Максимальный уровень, на котором виден объект | десятичное число |
<ncode> | код точки, которая будет поставлена на карте в центр полигона (видна на уровнях от <nminlvl> до <nmaxlvl>) |
число в шестнадцатиричном формате |
<minlvl> | Минимальный уровень, на котором видна точка с кодом <ncode> в середине полигона | десятичное число. |
<maxlvl> | Максимальный уровень, на котором видна точка с кодом <ncode> в середине полигона | десятичное число. |
Пример файла poly.cfg
Вопрос: Разъясните, пожалуйста, что означают цифры, в файле poly.cfg, на примере следующих строчек из этого файла:
junction roundabout r 0x0c,3 0 2 3,3,1,0,0,0,0,0,0,0,0,0 natural water p 0x3f 0 3 0x650d,0,2
Ответ:
- Если среди всех тегов линии встречается junction=roundabout, то конвертировать ее в роутинговую ("r") полилинию с типом "0x0c" ("Круговое движение") и приоритетом 3 (из всех тегов линии для конвертации выбирается тег с наибольшим приоритетом), видимая на уровнях от 0 до 2 и флагами маршрутизации (в терминах польского формата) 3,3,1,0,0,0,0,0,0,0,0,0
- Если у линии есть тег natural=water, конвертировать ее в полигон ("p") типа 0x3f ("Озеро среднее (11-25 км²)"), видимый на уровнях от 0 до 3 и поставить в центр озера точку типа 0x650d "Озеро", видимую на уровнях от 0 до 2.
Для junction=roundabout флаги маршрутизации такие: класс скорости 3 (60 км/ч), класс дороги 3 (Principal HW), односторонняя (1), не платная (0), запретов движения конкретных видов транспорта нет (0,0,0,0,0,0,0,0). Другие флаги маршрутизации можно посмотреть здесь: http://v-dorogu.narod.ru/article/routemap.htm
Настройка файла poi.cfg
Вопрос: Что означает city в строке файла poi.cfg:
place hamlet 0x0C00 0 2 city
Ответ: Значит, для точки надо определить и записать регион и страну.
Вопрос: Какие дефолтные значения используются в файле poi.cfg ? Ответ: минимальный уровень приближения: 0, максимальный уровень приближения: 1.
Запуск
osm2mp.pl [ключи] file.osm > file.mp
Ключи программы
|
Для отключения действия ключа его следует указывать с префиксом "no". Например: --norouting для создания карты без графа маршрутизации.
Другие полезные скрипты
В SVN находятся и другие полезные скрипты:
osmget & osmsort
- osmget.pl — скачивает квадрат кусками в файл;
- osmsort.pl — приводит этот файл в порядок.
параметры osmget — координаты углов квадрата через запятую:
osmget minlon,minlat,maxlon,maxlat > draft.osm
можно слить несколько кусков, тогда ставим >> вместо >
osmget minlon2,minlat2,maxlon2,maxlat2 >> draft.osm
потом
osmsort draft.osm > final.osm
splitter
- splitter.pl — разбивает OSM-файл на части примерно одинакового заданного размера.
Запуск:
splitter <file.osm> [ключи] > <file.txt>
-file.osm — карта в формате OSM
-file.txt — имя файла с отчётом
Ключи:
|
getbound
Живёт в отдельном репозитории. Для не дружащих с Перлом есть сборка win32: getbound.zip
- getbound.pl — скрипт автоматического создание файла территории, на которую будет производиться конвертирование данных OSM в польский формат скриптом osm2mp.pl (ключ --bpoly=<poly-file>).
- aliases.yml - файл алиасов в формате YAML ( <алиас>: <номер объекта> )
Команда для запуска:
getbound.pl <relation_id> [ключи]
Где:
<relation_id> — номер линейного или полигонального объекта в картографической базе OSM с типом boundary или multipolygon, либо алиас из файла aliases.yml
Ключи:
-api [osm|op_ru] — api, используемый для загрузки osm - http://www.openstreetmap.org/api/0.6 (по умолчанию) op_ru - http://overpass.osm.rambler.ru/cgi -o <file> — имя файла для записи территории (по умолчанию: STDOUT); -proxy <host> — ip-адрес прокси-сервера (если используется); -onering — преобразование и запись данных о территории как единый контур; -offset <N> — расширение контура за счет смещения линии на N градусов;
Например: Для создания poly-файла, необходимого для конвертирования данных OSM попадающих только на территорию Истринского района Московской области России http://www.openstreetmap.org/browse/relation/184072, требуется запустить скрипт со следующими параметрами:
getbound.pl 184072 -o istra.poly -onering
Граница Псковской области со смещением (используем псевдоним из aliases.yml)
getbound.pl -o pskov.poly -api op_ru -offset 0.1 pskov
Подробнее о файлах *.poly можно прочитать по ссылке http://gis-lab.info/qa/osm-poly.html
Полезные ссылки
- Скачать последнюю версию скрипта osm2mp.pl.
- Посмотреть исходный код и историю изменений osm2mp (SVN программы)
- Скачать ActivePerl для Windows -
- Общие рекомендации по оформлению навигационных карт для программы Навител Навигатор
- Русскоязычное обсуждение на форуме OSM
- Англоязычное обсуждение на форуме OSM -
- Скачать — файлы конфигурации osm2mp для конвертации файлов OSM в польский формат с набором типов Навител.
- Периодически обновляемая библиотека карт России в формате .osm
- Периодически обновляемая библиотека карт России, сконвертированных программой osm2mp для навигаторов Garmin.
- периодически обновляемая библиотека карт России, сконвертированных программой osm2mp для программы GisRussa.
- cGPSmapper — конвертор Польского формата (.mp) в формат Garmin IMG и описание формата.
- Страничка на вики-OSM о редакторе GPSMapEdit.