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

Старая и новая версии не совместимы по конфигам.

Супер. Я, собственно, пытаюсь запустить то, что нашел у ZKir’a - а там вроде как версия конвертера с конфигами совместима.

Хорошо, тогда так: кто может помочь и выложить рабочий вариант (перл вместе с конвертером) для windows 64 битной?
Конфиги я потом буду править постепенно.

Заранее спасибо.

Странно?! У меня Работает. На досуге попробую разобраться.

Насколько я помню Zkir старой версией пользовался, на новую не стал переходить.

Твою папку вместо своей подложил и запустил osm2mp, правда у меня osm2mp самая последняя что есть на данный момент. Там немного пакеты окружения отличаются.

PS: Кстати getbound последний тоже отличается требованиями к пакетам, а из новинок тока немецкий прокси вижу.

У меня дополнительно к конфигам в osm2mp лежат - https://yadi.sk/d/l-6wNzxF3E5i2C
Давно не сличал. Хотя стоит TortoiseSVN и показывает свежак?!

Раньше репозиторий был на Google, а с некоторых пор переехал на github.

Это давняя проблема. В смысле, современный Math::Polygon и/или Math::Polygon::Tree глючные, нужны давние - 1.01 и 0.041 соответственно. Ранее пробегала ссылка на весь нужный Math.

К вопросу. Ну скрипты, конфиги понятное дело, формируют собственно идеологию конвертации. Что, в каком виде, с какими характеристиками…
А вод версия Perl, доп библиотеки (или как их там назвать) наверное главное что бы работало? Если уж работает, то работает? Или Perl, getbound, доп. библиотеки могут оказывать влияние на выходной материал?
Т.е. могут ли быть различия в итоговых *.mp форматах при конвертации разными версиями Perl, библиотек…?

Спасибо, скачал - вроде работает.
буду дальше разбираться.

Не было печали. Вроде всё работает. Но в свете выше прочитанного сравнил свою версию osm2mp.pl с т.н. “свежей”. Обе версии:

our $VERSION = '1.03' . do { my ($r) = '$Rev: 777 $' =~ /(\d+)/xms; $r ? "-$r" : q{} };
our $VERSION = '1.03' . do { my ($r) = '$Rev$' =~ /(\d+)/xms; $r ? "-$r" : q{} }; - "свежая"

Но главное отличие в наличии (отсутствии) match::smart; (есть в свежей, нет в моей):

use match::smart;

use Math::Polygon;
use Math::Polygon::Tree  0.068  qw{ :all };
use Tree::R;

Спрашивается: какая версия актуальнее - “свежая” или “моя”? Если у меня работает без ‘use match::smart’, то и на кой она нужна?
Может это отвечает за перевод которым я не пользуюсь? Или пользуюсь, но не получаю должного результата?

В Вашей просто ревизия проставлена жёстко, а не из параметра берётся.

Это интуитивно понятно. Почему в моей версии нет “use match::smart;”? Как это сказывается на конечном результате?
Или такие отличия:

my ($in, $stream_msg) = $infile eq '-'
my ($in, $stream_msg) = $infile ~~ '-'

return if !( $tags->{route} |M| 'road' );
return if !( $tags->{route} ~~ 'road' );

my $r2 = $list[0];
                report( "WayID=$r2 is merged into WayID=$r1", 'FIX' );
my $r2 = $list[0];
                строка отсутствует вовсе

Отрицательный результат, то же результат.
Сборка, которую я предложил отличается от требований “свежей” версии osm2mp.
Дополнительно необходимы модули “match::smart” в самом скрипте и где то там в одном из конфигов “match::simple”. Подгрузил - заработало. Без них актуальные версии osm2mp .pl и getbound.pl работать не будут. Не нашел для чего и до кучи поставил “Config::YAML” в надежде что прибавит скорости обработки.
Пока на Linux системе. Если проблема остаётся, то в течении пары дней думаю обновиться на Windows “Perl64”, при положительном результате обновлю и архив.

Добавил в Perl64 модули “match-smart”; “match-simple”; “Config-YAML” без затруднений через ppm. Заменил osm2mp и getbound на свежие. getbound - отработал, а вот osm2mp выдал неожиданную ошибку:

Bareword "M" not allowed while "strict subs" in use at osm2mp.pl line 367.
BEGIN not safe after errors--compilation aborted at osm2mp.pl line 1368.

Куда копать не знаю. Какие будут советы, замечания предложения?

Bareword "M" not allowed while "strict subs" in use at mp-postprocess.pl line 89.
Bareword "M" not allowed while "strict subs" in use at mp-postprocess.pl line 94.
Bareword "M" not allowed while "strict subs" in use at mp-postprocess.pl line 99.
Bareword "M" not allowed while "strict subs" in use at mp-postprocess.pl line 99.
BEGIN not safe after errors--compilation aborted at mp-postprocess.pl line 180.

Под Linux этой проблемы нет. Вторично перепроверил и установил пакет osm2mp. Как же не хватает познаний в программировании.

Странно, что никто не имеет предложить решение проблемы.
Пока сообщество думает заменил все **|M| на ~~, ** во всех файлах пакета, пример:

elsif ( %street_tag && $role |M| 'street' ) {
elsif ( %street tag && $role ~~ 'street' ) {

Всё работает. Не знаю на сколько этот вариант ущербнее. Начинаю сомневаться - может мой вариант был свежее, обходящий такого рода проблемы?!
Perl64 (вариант 2) для “свежей” версии osm2mp - https://yadi.sk/d/BI7VIViH3EA9Rw - распаковать в корень диска C:
osm2mp (вариант 2) “свежий” правленый - https://yadi.sk/d/xrGkZ_Ib3EA9Rj
Текстовый файл для настройки путями - https://yadi.sk/i/WIMgDcvc3DTyfu

Может кто то протестирует. Или более того найдет занозу.

Поставил python 3.6 для windows. При запуске

python getbrokenrelations.py < in.osm >out.osm

выдается такая ошибка:

  File "getbrokenrelations.py", line 95
    print f.read()
          ^
SyntaxError: invalid syntax

Что можно сделать?

Попробуйте Python 2.7. Я допустил такую же ошибку в своё время. Спасибо подсказали, что скрипт был сделан под Python 2.

Спасибо. Не думал что это так критично.

третий питон по синтаксису сильно изменен относительно второго, есть даже конверторы из 2го в 3ий :slight_smile:

Да, я почитал там у них. С 2.7 все заработало.