RU:Osm2mp

From OpenStreetMap Wiki
Jump to: navigation, search
Help
Available languages
English Русский

Contents

Osm2mp — это скрипт на языке программирования Perl, написаный пользователем Liosha для преобразования данных OSM в польский формат (.mp). Файлы, полученные в результате конвертирования, поддерживают маршрутизацию.

Основные возможности

В какие форматы можно преобразовать .mp-файлы

Полученный файл в Польском формате (.mp) можно сконвертировать в разные форматы для навигаторов:

Установка программы в среде Windows

Для запуска программы-скрипта osm2mp, вам понадобится установить ActivePerl для Windows. После установки ActivePerl обязательно надо установить некоторые модули. Проделаем это:

  1. Перейти по ссылке в 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 взять тут.
  2. Открыть файл garmin.yml редактором WordPad и дополнить значение переменной Name в секции [IMG ID] так: Name=[% mapname %] (Converted by Ваше_Имя). Это необходимо для того, чтобы при просмотре инфо конвертированной карты, отображалось имя того, кто выполнил конвертирование.
  3. Скачать и установить ActivePerl — http://www.activestate.com/activeperl/
  4. Выполнить Dos-команду \Perl\bin\ppm.bat.
  5. В окрывшемся, через некоторое время, окне Perl Package Manager (PPM) выбрать в меню View команду All Packages
  6. найти в списке модуль Template-toolkit и выделить его
  7. В меню Action (или в контекстном меню по правому клику) выполнить команду Install Template-toolkit
  8. Таким же образом отметить для установки модули:
    Getopt-Long, Text-Unidecode, List-MoreUtils, Math-Polygon, Math-Polygon-Tree, Math-Geometry-Planar-GPC-Polygon, YAML, Tree-R, Encode-Locale, PerlIO-via-Unidecode
    если они ещё не установлены
  9. В меню File выполнить команду Run Marked Actions
  10. Выйти из PPM

Установка программы в среде Linux

OpenSuse

Загрузить скрипт и сопутствующие файлы:

 svn co http://osm2mp.googlecode.com/svn/trunk/


Примечание: для конвертирования для Навител, конфигурационные файлы взять тут.

При необходимости установить 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"

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 http://osm2mp.googlecode.com/svn/trunk/

Примечание: возможно, если версия YAML, установленная в системе, немного младше указанной в скрипте, придется поправить строчку "use YAML 0.72;" на установленную версию, например "use YAML 0.71;"

Примечание: для конвертирования для Навител, конфигурационные файлы взять тут.

Установка в FreeBSD

В FreeBSD ковертер достепен для установки из исходных кодов и из портов.

Для установки их исходных кодов необходимо загрузить конвертер из хранилища http://osm2mp.googlecode.com/svn/trunk/, а также установить или обновить 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

Ответ:

  1. Если среди всех тегов линии встречается junction=roundabout, то конвертировать ее в роутинговую ("r") полилинию с типом "0x0c" ("Круговое движение") и приоритетом 3 (из всех тегов линии для конвертации выбирается тег с наибольшим приоритетом), видимая на уровнях от 0 до 2 и флагами маршрутизации (в терминах польского формата) 3,3,1,0,0,0,0,0,0,0,0,0
  2. Если у линии есть тег 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

Ключи программы

Ключ Формат Описание Значение по умолчанию
--mapid --mapid=<id> Уникальный идентификатор карты 88888888
--mapname --mapname=<name> Наименование карты OSM
--cfgpoi --cfgpoi=<file> Имя файла с настройками точек poi.cfg
--cfgpoly --cfgpoly=<file> Имя файла с настройками полилиний poly.cfg
--header --header=<file> Имя файла шаблона заголовка карты. Использовался в версии 0.80 (до revision 182). Не используется с появлением ключа --config header.tpl
--config --config=<file> Имя файла шаблона заголовка и адресной конфигурации карты (пример файла) garmin.yml
--bbox --bbox=<minlon,minlat,maxlon,maxlat> Обрезать карту по прямоугольной границе, описанной координатами углов Отключено
--osmbbox --osmbbox Обрезать карту по прямоугольной границе, параметры которой берутся из тегов <bound> .osm-файла Отключено
--bpoly --bpoly=<poly-file> Обрезать карту по границе произвольной формы, которая описана в .poly-файле (примеры файлов) Отключено
--background --background Создать на карте полигон "0x4b" (область покрытия карты) по границе обрезки. Включено
--codepage --codepage=<num> Кодовая страница .mp файла и карты 1251
--nocodepage --nocodepage Оставить исходную кодовую страницу (utf-8) .mp-файла файла и карты Отключено
--upcase --upcase Преобразовать все значения текстовых строк .mp-файла в верхний регистр Отключено
--translit --translit Транслитерировать все значения текстовых строк .mp-файла Отключено
--ttable --ttable=<file> Имя файла дополнительной таблицы перекодировки (пример файла)
--namelist --namelist <key>=<list> Список тегов в порядке приоритета, значения которых используются для заполнения наименований объектов в .mp-файле label=name loc_name addr:housenumber operator,
house=addr:housenumber addr:housename,
place=place_name name,
region=addr:region is_in:region addr:state is_in:state,
country=addr:country is_in:country_code is_in:country,
destination=destination label name
--nametaglist --nametaglist=<list> Список тегов, значения которых используются для заполнения поля Label в .mp-файле, в порядке приоритета. Устарел, с появлением ключа --namelist. name, ref, int_ref, addr:housenumber, operator
--countrylist --countrylist=<file> Имя файла с таблицей замены кода страны на её название (пример файла) Отключено
--defaultcountry --defaultcountry=<name> Страна по умолчанию для тех объектов, для которых она явно не задана. Необходимо для адресного поиска Earth
--defaultregion --defaultregion=<name> Регион по умолчанию для тех объектов, для которых он явно не задан. Необходимо для адресного поиска OSM
--defaultcity --defaultcity=<name> Город по умолчанию для тех объектов, для которых он явно не задан. Необходимо для адресного поиска Отключено
--addressing --addressing Process addressing polygons... Включено
--navitel --navitel Формировать адресные данные для полигонов Отключено
--oneway --oneway Обрабатывать тег oneway Включено
--routing --routing Создать граф маршрутизации для карты Включено
--mergeroads --mergeroads Соединять одинаковые сегменты дорог, удовлетворяющие значению ключа --mergecos Включено
--mergecos --mergecos=<cosine> Максимально допустимый угол между дорогами (для ключа --mergeroads), задаётся значением косинуса 0.2
--splitroads --splitroads Разделять дороги с большим числом узлов и дороги, имеющие самопересечения Включено
--maxroadnodes --maxroadnodes=<dist> Максимально допустимое число узлов в сегменте дороги (для ключа --splitroads) 60
--fixclosenodes --fixclosenodes Увеличивать расстояние между слишком близкими узлами Включено
--fixclosedist --fixclosedist=<dist> Минимально допустимое расстояние между узлами дороги, в метрах (для ключа --fixclosenodes) 3.0
--detectdupes --detectdupes Проверить и включить в перечень ошибок информацию о наличии дублирующихся сегментов дорог (см. строки "; ERROR:" в .mp файле) Включено
--restrictions --restrictions Конвертировать запреты поворотов Включено
--barriers --barriers Обрабатывать запреты проезда (тег barrier=*) Включено
--disableuturns --disableuturns Запрещать "паразитные" развороты (например, на пересечении автомобильной дороги с пешеходной тропой) Отключено
--destsigns --destsigns Конвертировать дорожные указатели Включено
--interchange3d --interchange3d Конвертировать 3D-уровни для формата Навител Включено
--transport --transport=<Список> Оставить в графе маршрутизации только те дороги, по которым разрешено движение транспортным средствам, перечисленным в <Cписке> emergency,police,delivery,
car,motorcar,bus,
taxi,foot,pedestrian,
bike,bicycle,truck
--shorelines --shorelines Создавать полигоны морей из береговой линии Отключено
--waterback --waterback Создать полигон моря на всю область карты (для карт отдельных островов) Отключено
--marine --marine Включать в карту дополнительные данные о морских объектах (цвет буёв, сектора свечения маяков, и т.д.) Включено
--makepoi --makepoi Создавать точки POI по данным соответствующего полигона, в его условном "центре тяжести" Включено
--poiregion --poiregion Указывать регион и страну для точек населённых пунктов Включено
--poicontacts --poicontacts Указывать контактную информацию для точек POI Включено

Для отключения действия ключа его следует указывать с префиксом "no". Например: --norouting для создания карты без графа маршрутизации.

Другие полезные скрипты

В SVN находятся и другие полезные скрипты:

osmget & osmsort

параметры osmget — координаты углов квадрата через запятую:

osmget  minlon,minlat,maxlon,maxlat  >  draft.osm

можно слить несколько кусков, тогда ставим >> вместо >

osmget  minlon2,minlat2,maxlon2,maxlat2  >>  draft.osm

потом

osmsort draft.osm > final.osm

splitter

Запуск:

splitter <file.osm> [ключи] > <file.txt>

-file.osm — карта в формате OSM
-file.txt — имя файла с отчётом
Ключи:

Ключ Формат Описание Значение по умолчанию
--mapid --mapid=<id> Числовое имя файла первой части по порядку. 65430001
--maxnodes --maxnodes=<n> Примерное максимальное кол-во точек в одной части. 1000000
--relations --relations=<число> Число итераций обработки отношений.
0 — не учитывать целостность отношений
1 — сохранять участников отношений
2 — сохранять участников отношений и участников их непосредственных родителей/потомков
3 — ...
1
--init --init=<file.cfg> file.cfg — текстовый файл с заданными квадратами разбивки в формате [id minlon,minlat,maxlon,maxlat] (см. файл отчёта). Отключено
--optimize --optimize=<0 или 1> Оптимизировать охватывающие полигоны частей (bbox) 1

getbound

Команда для запуска:

getbound.pl <relation_id> [ключи]

Где:

<relation_id>   — номер линейного или полигонального объекта в картографической базе OSM с типом boundary или multipolygon

Ключи:

-o <file>       — имя файла для записи территории (по умолчанию: STDOUT);
-proxy <host>   — ip-адрес прокси-сервера (если используется);
-onering        — преобразование и запись данных о территории как единый контур;

Например: Для создания poly-файла, необходимого для конвертирования данных OSM попадающих только на территорию Истринского района Московской области России http://www.openstreetmap.org/browse/relation/184072, требуется запустить скрипт со следующими параметрами:

getbound.pl 184072 -o istra.poly -onering

Подробнее о файлах *.poly можно прочитать по ссылке http://gis-lab.info/qa/osm-poly.html

Полезные ссылки

Personal tools
Namespaces
Variants
Actions
site
Toolbox