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

Правильно, не нужно :smiley:
Нужно делать по-человечески.

Не, полечить хаком конфигурации не удалось… City=Y и CityName=%place добавить еще можно, а RegionName - нет.
UPD: таки можно

City: Y
CityName: %place
city: y

liosha, мы обозначаем улицы согласно вики. И стараемся не делать никакой отсебятины.
Написано в вики “указываем название улицы в name на отрезках” - мы так и делаем.
Написано, что названия на других языках писать в name:xx - мы так и пишем.
Написано, что для улиц можно делать релейшены associatedStreet (или street) - мы делаем релейшены.
Написано, что тег name в релейшене необязателен - мы ограничиваемся только названием на одном языке.
Сделали патч для конвертера. Который нормально работает и умеет вытягивать неукраинские названия из тегов отрезков.
И что? Без толку. Потому что liosha на болту вертел и вики, и тот факт, что по тем рекомендациям отмаплена большая часть Украины, да и других стран.

Ну, значит, перебьются москали без нормального адресного поиска по Украине. :stuck_out_tongue:

Ну дык и пользуйтесь патчем, в чём проблема-то?

Появилась задумка отказаться от прямого использования таглистов для формирования надписей.
Вернее, расширить их использование: ввести понятие целевого языка.

Надпись будет выбираться примерно так:

  • сначала ищем тег в целевом языке
  • если его нет, ищем тег в “совместимом” языке - для которого описано преобразование в целевой, и применяем на него это преобразование
  • если не нашли, транслитерируем дефолтный тег

Возражения/дополнения? :slight_smile:

Сделал в первом приближении.

У конвертера два новых ключа:
–target-lang - на каком языке хотим карту
–default-lang - язык, на котором в исходнике записаны теги без указания языка

./osm2mp.pl --default-lang ru --target-lang en moscow.osm -o moscow.mp
сделает карту на английском

Конвертация между языками пока не сделана (пока не совсем понятно, где и как её описывать), есть только финальный фолбек на Text::Unidecode

ИМХО, удобнее (для пользователя) сделать возможность задавать порядок “нужности” языков.
По принципу “Хочу на русском, но если нет русского, то на украинском, если нет украинского, то на английском, если нет английского, то на дефолтном или транслитом с дефолтного (ибо дефолтным может быть какой-то иероглифический язык. который не понимает навигатор)”.

И, это… надо бы как-то всё-таки сделать функцию получения нужных названий улиц (для адресной базы) из name:lang отрезков улиц.
Потому что не везде привязка домов к улице сделана релейшенами.

И ещё… Можно нескромный вопрос: почему выбран Perl, а не какая-нибудь СУБД с программой-оболочкой? По принципу “перегнали карта.osm в базу данных, перелопатили как нам нужно, сделали экспорт в польский формат”.

Всё задумано гораздо круче :sunglasses:
Хотя такое тоже возможно, как один из вырожденных случаев.

По историческим причинам :smiley:
Хотя скорее всего он и сейчас был бы выбран.

Пока оснований для возражений/дополнений нет.
Сначала хотелось бы узнать, что такое “совместимый” язык (я полагаю, целевой - тот, на котором нужно получить карту) и что такое преобразование - как оно работает и на основании чело задается таблица (или какой-другой нетабличный принцип) соответствия?

Совместимый - это тот, для которого есть описанное преобразование в целевой.

А работать оно может как угодно, пока планирую сделать через плагины.

Думаю, что преобразование имен всех проблем не решает.
Например, Красная площадь - если она в Москве, то Red Square, а если Переславле Залесском - то Krasnaya Square.

Правильно, для таких случаев и есть языковые теги, которые смотрятся в первую очередь.
А для остальных случаев - преобразование

Тогда я не понял описанного алгоритма работы.
Вернемся к основным определениям.
Что в предложенной схеме подразумевается под словом “тег”? Является он самостоятельной сущностью или лишь атрибутом другой сущности?
name=“Красная площадь” - это тег или нет?

Да, в контексте осмоданных это тег.
А в контексте мультиязычности “тегом name” нужно считать весь бранч осмотегов <name, name:{lang}>, как значение одного и того же ключа name на разных языках. Когда это значение явно задано для целевого языка - используется оно, когда не задано - пытаемся хитрыми способами вывести его из других языков.

Доделал поддержку языковых преобразователей (через плагины).
В качестве proof-of-concept там есть транскриптор с украинского на русский :smiley:
Можно заценить: ./osm2mp.pl --default-lang uk --target-lang ru lviv.osm -o lviv.mp

А вообще можно хоть Google Translate присобачить, если будут желающие проспонсировать (он платный).
Или Яндекс.Перевод.

Еще бы расширить функционал в сторону возможности использования old_name.

Не надо ничего расширять, old_name по-старому подключается через таглисты

Да, смешно наверное получается:)
А почему

?

Вопрос:

  • “вулиця Лермонтова” разбита на два участка
  1. name=“вулиця Лермонтова”, name:ru=“улица Лермонтова”
  2. name=“вулиця Лермонтова”, name:ru не указан

Что будет в результате работы плагина? Подхватится ли name:ru на оба участка или для второго будет “улица Лэрмонтова”?

Отсюда: http://www.vokrugsveta.ru/encyclopedia/index.php?title=%D0%A3%D0%BA%D1%80%D0%B0%D0%B8%D0%BD%D1%81%D0%BA%D0%B8%D0%B9_%D1%8F%D0%B7%D1%8B%D0%BA

Не подхватится, конечно.
Вернее, может подхватиться, но для этого нужен хитро настроенный релейшен.

И на дома с addr:street=“вулиця Лермонтова” тоже не подхватится?
Если нет - то это ведь вроде несложно добавить, поскольку скрипт изначально устанавливает всем значение City(верно?) - соответственно по city+name+name:ru и city+addr:street можно делать перевод addr:street.