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

Это интуитивно понятно. Почему в моей версии нет “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 ?
Пытался сам разобраться, но так как не программист ни разу - нифига не вышло.
Заранее спасибо.

Уточните вопрос. Что значит нестандартный атрибут? Какой атрибут? Какова цель добавления?
Вы хотите каждый раз править *.MP файл? Или все же хотите добавить атрибут в базу?
А может вы хотите добавить атрибут в конвертер?

Спасибо, что откликнулись.
Попробую объяснить. Сейчас при конвертации осм в .мр круговое движение проставляется как

      type:
#        selector: if
#        condition: junction = roundabout
#        then: 0x0c

После конвертации в формат ситигида, круговое движение получается отличным от дороги, на котором оно встречается

Из чисто эстетических побуждений, я хочу чтобы круговое было таким же цветом что и примыкающая дорога. При этом, чтобы навигатор озвучивал “круговое движение”, у конвертора в ситигидовский формат есть т.н. маркер CGRoadMarker=1, про который написано: “Не используем тип дороги круговое движение, а ставим маркер”. Вот я и хочу, чтобы при конвертации из осм в .мр, junction=roundabout не превращался в тип 0х0с, а этой полилинии добавлялся атрибут CGRoadMarker=1.
Вот. Однако, как это реализовать с помощью конфигов конвертера osm2mp я так и не нашел.
Буду признателен за помощь.

В моей программе цвет линий определяет “Скин”. Любому типу - любой внешний вид.
У нас программный конвертер берет стандартный набор данных из *.mp - и сам трансформирует в формат приложения.
Если ваш программный конвертер требует что то там установить дополнительно, должно быть описание что сделать.

Формально, как было сказано, формат *.mp - есть обычный текстовый файл. Следовательно любой текст в файле можно заменить (дополнить).
Из ваших объяснений: я бы строки “Type=0x0c” заменил маркером “CGRoadMarker=1” или добавил строку с маркером CGRoadMarker=1 …
Это можно делать руками, открывая последовательно каждый файл. А можно воспользоваться командной строкой и заменить сразу все однотипные строки, нужным текстом. Получается своего рода пост процесс.
Но сие лишь предположение.

Что до формирования маркера взамен типа в ходе конвертации OSM в MP?! Надо подумать. Но ведь кто то уже это делает. И наверное есть профильная тема.

В .мр уже утерян класс дороги “круговое движение”, он там везде 0х0с. А круги встречаются и на primary, и на secondary, и на других тоже. Втыкание маркера нужно делать на этапе конвертирования.
Хотя, я тут подумал - прямо в .osm наверное можно тоже. Буду дальше думать…