Конвертер OSM -> MP

Кстати иногда всё же в конце вылазит эта ошибка, один раз из десяти конвертированных файлов:


All done!!

	(in cleanup) Can't locate object method "DESTROY" via package "OSM::Hash" at C:/navitel/lib/OSM.pm line 59 during global destruction.

Правда не заметил что бы как то влияло на работу.

Поправил. Но, думаю, это еще не все, и где-нибудь снова всплывет.

Привет. Подскажи как getbound собрать? osm2mp64.exe собрался и работает, а с getbound`ом засада, собирается, но не работает:


No clipper class available at Math/Polygon/Tree.pm line 35.
BEGIN failed--compilation aborted at Math/Polygon/Tree.pm line 35.
Compilation failed in require at script/getbound.pl line 31.
BEGIN failed--compilation aborted at script/getbound.pl line 31.

PS: Пробовал без параметров собирать, пробовал по аналогии файл pp-opts создавать, результат тот же

PPS: Нашёл недостающее звено :slight_smile: Math::Geometry::Planar::GPC::PolygonXS


-I lib

-M Carp
-M Log::Any
-M Log::Any::Adapter
-M FindBin

-M App::OsmGetbound::OsmApiClient
-M App::OsmGetbound::OsmData
-M App::OsmGetbound::RelAlias
-M App::OsmGetbound::WriterPoly
-M App::OsmGetbound::WriterShp

-M Math::Polygon
-M Math::Polygon::Tree

-M Getopt::Long
-M List::Util
-M List::MoreUtils
-M File::Slurp

-M YAML

-M Math::Clipper
-M Math::Geometry::Planar::GPC::PolygonXS


Рано обрадовался:


C:\osm2mp>getbound 60189 -o Russia.poly -onering
Bad subroutine name for autodie: read at App/OsmGetbound/WriterPoly.pm line 10.
BEGIN failed--compilation aborted at App/OsmGetbound/WriterPoly.pm line 10.
Compilation failed in require at (eval 455) line 1.

Собрался getbound и вроде как всё работает даже, вот такой файл зависимостей в итоге вышел:


-I lib

-M Carp
-M Log::Any
-M Log::Any::Adapter
-M FindBin

-M strict
-M warnings
-M autodie
-M utf8
-M Encode

-M LWP::UserAgent

-M Geo::Openstreetmap::Parser
-M Geo::Shapefile::Writer

-M App::OsmGetbound::OsmApiClient
-M App::OsmGetbound::OsmData
-M App::OsmGetbound::RelAlias
-M App::OsmGetbound::WriterPoly
-M App::OsmGetbound::WriterShp

-M Math::Polygon
-M Math::Polygon::Tree

-M Getopt::Long
-M List::Util
-M List::MoreUtils
-M File::Slurp

-M YAML

-M Math::Clipper
-M Math::Geometry::Planar::GPC::PolygonXS


PS: Geo-Shapefile-Writer тока не встал, пришлось руками подкинуть в папку lib, собирал на Strawberry Perl 5.16.3 x64.


//hint// to see the cpan-testers results for installing this module, try:
  reports LIOSHA/Geo-Shapefile-Writer-0.006.tar.gz
Running make install
  make test had returned bad status, won't install without force
Stopping: 'install' failed for 'L/LI/LIOSHA/Geo-Shapefile-Writer-0.006.tar.gz'.

На базе Perl 5.16 На базе Perl 5.24

Подскажите пожалуйста, кто знает - вот в конфиге вижу что можно вставить кусок кода на перле.
А вопрос такой - в этом куске можно как в самом скрипте функции задавать или можно пользоваться только уже заданными функциями?
Сам скрипт изменить не могу - у меня работает только компилированный вариант.

Насколько я знаю там YAML язык разметки используется. Сам бы хотел где то найти толковое описание применительно к osm2mp. А то всё больше методом тыка. :slight_smile:

Аналогично :frowning: А уж отсутствие навыков программирования вообще вселяет уныние.

Вот например, второй день никак не могу найти/сообразить, как в condition задать проверку условия наличия в значении тега символа #…
Т.е. если в building:colour цвет задан в HEX, начинающийся с # - то сделать определенной действие.
Перепробовал кучу вариантов - все без толку…

Я кажется столкнулся с такой же проблемой. Похоже это баг конвертера.

Если в конфиге стоит так:
label: [ name, loc_name, brand, operator, place_name ]
то конвертер вытягивает названия только из name.

Если сделать так:
label: [ name:en, name, loc_name, brand, operator, place_name ]

то конвертер начинает вытягивать названия из любого name:*, что первое попадется.
Например, на объекте нет name:en, зато есть name:ru - в .mp мы имеем название на русском, благополучно транслитированное в латиницу.

Вот, как-то с Лешей общался, может, что полезное найдешь:

boris, 21.03.17 15:08:06:
Привет. Решил еще раз глянуть логику работы конвертера с разными языками. Если стоит только target-lang=ru и default-lang=, вроде бы сначала ищется ru, потом пробует перевести, затем en и коль ничего не получилось - транслитерация. А вот если поставить --namelist label=name:ru,name,name:en, то там, где был русский в названии улицы появляется транслитерация (в адресе остается русский). Если поставить так --namelist label=name,name:ru,name:en, то в названии опять русский. Если в таком порядке --namelist label=name,name:en,name:ru, тоже русский. Ну и если так --namelist label=name:en,name:ru,name, то будет на английском. Да, в исходном названии улицы присутствуют и русский и английский. На домах есть только name и оно на русском. Во всех вариантах там транслитерация.

boris, 15:08:39:
Это такое в Южной Осетии :slight_smile:

liosha, 15:09:54:
привет. всё правильно: ты говоришь, что название надо искать в name:ru, значит, другие языки он ищет в name:ru:ru

boris, 15:11:04:
Во как… То бишь попросить искать в чистом name не получится.

liosha, 15:11:23:
не надо использовать namelist

boris, 15:12:29:
А как сделать, если нет name:ru, то брать name?

liosha, 15:13:12:
default-lang=ru

boris, 15:14:56:
Да, но в названии улицы name не на русском, но есть name:ru.

liosha, 15:15:39:
ну да, сначала посмотрит name:ru, потом name

boris, 15:16:05:
Ща гляну, что получится.

boris, 15:20:31:
Действительно, так все сработало :-). Спасибо.

boris, 15:23:51:
А вообще сейчас namelist-ом что-то интересное можно достать?

liosha, 15:24:08:
не думаю

boris, 15:24:20:
Ясно, спасибо.

liosha, 15:24:26:
по идее он для old_name вместо name

а namelist - это то, что в конфиге label: ?

Это в .bat файле.

У меня немного другая ситуация, я в батнике в параметрах запуска не использую namelist.

Так Леша и сказал, что сейчас от namelist толку немного. Я это привел больше по поводу того, как name выковыривается.

Все равно как-то неправильно. Если мне нужна строгая последовательность выковыривания name и карта у меня делается на иностранном языке с транслитерацией, то мне уже ничего не поможет, name:ru все равно будет вытаскиваться там, где не надо…
Ладно. буду иметь ввиду.
Спасибо за информацию.

Обновленная версия конвертера с “github” порадовала простотой установки в Linux подобных системах. Позволила перейти на более современную ОС_ь. Установка модулей в Ubuntu 16.04 не напрягает - http://wiki.openstreetmap.org/wiki/RU:Osm2mp. Пришлось до установить 2-3 доп. модуля и всё заработало.
Однако не обошлось без отрицательных эмоций. Крайняя версия конвертера заметно больше требует ресурсов - оперативной памяти в первую очередь. Обработка значительно растянулась по времени. Что бы особенно как то добавилось информации в конечном формате, или что бы разрешились какие то процедурные проблемы не заметил.

  1. Это только на слабых ПК бросается в глаза или и на мощных железках отмечается подобное?
    Так и подрезает вернуть “старый” добрый вариант с Googl. Но он наверное потребует установки старых модулей Perl?! А главное не понятно - может всё же что то стало работать правильнее. Может ушли в небытие какие то ошибки?

  2. И вот интересно - https://github.com/liosha/osm2mp/ - не такая уже и новая версия = 2 года давности?!
    Хотя согласно http://wiki.openstreetmap.org/wiki/RU:Osm2mp протестировано на Ubuntu 16.04.
    Архив при этом закачался с датой основных файлов от 12 апреля этого года?! Что это? Особенность копирования на Linux подобных системах? Или действительно последние корректировки проведены 12 апреля?

Там от 12 апреля только файл README :).

Инструкция позволяет запустить osm2mp в простейшем варианте с настройками по-умолчанию. Если для каких-то режимов могут потребоваться дополнительные модули, хорошо бы добавить это на вики (в раздел “необязательные библиотеки”, например).

Странно. Каких-то больших изменений по сравнению с версией на гуглокоде не было. Если железо/конфиги/размеры исходных файлов те же, то остается только валить все на перл.

Смотрите историю изменений (commits), это будет нагляднее. То, что относится к гуглокоду, заканчивается 13-м годом

Подскажите пожалуйста, в каких случаях океан получается не вокруг острова, а внутри его? :slight_smile:
Что-то у меня не выходят Канарские острова, хотя Крит вполне правильно получается.
Заранее спасибо.

Честно ни разу не видел внутри. :slight_smile: А так для принудительного окружения водой тег --water-back

иногда бывают битые дампы, попробуйте открыть JOSM-мом исходый файлик и проверить цеостность костлайнов