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

К вопросу. Ну скрипты, конфиги понятное дело, формируют собственно идеологию конвертации. Что, в каком виде, с какими характеристиками…
А вод версия 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 все заработало.

KonTur
White_54

Ребята, не смейтесь, на свой сервак поставил… Windows 10. У него есть WSL, читай Ubuntu 12.04 из коробки. Все инструкции из нашей вики, касающиеся Ubuntu, работают 1:1, нулевой оверлоад по сравнению с портированными программами и тем более виртуальными машинами. Цена вопроса 1 Гб на диске.

Чтобы поставить Windows10 - надо ее купить. Мне своих денег жалко (компьютер конторский).
Как будет возможность - попробую.

поставь virtualbox, прекрасный виртуальник, даже без сильных потерь в мощности.

Зачем? Пока под виндой все потихоньку налаживается.
Да и не хочется в юниксы влезать…

Старый (древний) ПК с 2 ядрами и 2ГБ оперативки на Ubuntu (32), опережает в обработке (osm в mp) ноутбук с 4 ГБ оперативки и 4 ядрами на Windows 10/7 (64). Всё порываюсь поставить на ноутбук Ubuntu второй системой. Они не плохо уживается друг с другом. Никаких виртуальных машин, никаких вживлений одного в другое.

Я уже писал - это офисный комп, который также используют для офисных дел. Он просто сейчас чаще свободен (и я его под эксперименты задействую).

Подскажите пожалуйста, как можно в случае junction=roundabout добавить нестандартный атрибут к этой дороге в .mp ?
Пытался сам разобраться, но так как не программист ни разу - нифига не вышло.
Заранее спасибо.