Универсальный валидатор (рутинг, адресация) на базе конвертации в СГ

Это вопрос именно должной схемы. Отклонения (ошибки) могут быть какие угодно, но мы совсем не обязаны их поддерживать. Может с немцами поговорить?

Натестируешь, пиши, патчи должны быть натестированы.

Да, именно оно и нужно.

Я в свое время в примерно таком случае учил три-дэ-макс
:slight_smile:

Zkir
Собственно:
Патч применяется нормально на вашу версию конвертера.
Вот я выбрал участок для проверки.
Файл экспорта из OSM.
MP файлы получившиеся на выходе конвертера с вашими конфигами:
Непатченного и патченного
Вот дифф этих MP файлов (с кодировкой CP1251) а Он же но перекодированный в UTF-8
По диффам видно, что единственные изменения в карте это появление атрибута StreetDesc у тех нод у которых уже есть HouseNumber. Остальные объекты, в том числе и другие POI не затронуты.
Имена улиц тоже проставлены верно (тут я правда только глазами смотрел).

Этого достаточно, или нужны еще какие нибудь тесты?

Ну и патченный конвертер.
Собственно сам патч

PS

К сожалению perl по нынешним временам мне нигде больше не пригодится :frowning:

Так, у них, собственно, всё написано: http://wiki.openstreetmap.org/wiki/DE:Grenze , http://wiki.openstreetmap.org/wiki/DE:Grenzen , http://wiki.openstreetmap.org/wiki/DE:Grenze_zeichnen , http://wiki.openstreetmap.org/wiki/DE:Gemeindegrenze . Вот картинка: http://wiki.openstreetmap.org/wiki/File:Administrative_Gliederung_Deutschlands_admin_level.png (она же с переводом терминов, но без указания admin_level).

Краткий обзор:

Германия (admin_level=2) делится на земли (admin_level=4). Земли делятся на районы (admin_level=6). Районы делятся на коммуны/общины (admin_level=8). Общины могут делится на административные единицы, имеющие своё самоуправление (admin_level=9) или не имеющие своего самоуправления (admin_level=10). В некоторых землях существуют административные округа (admin_level=5) - промежуточная административная единица между землёй и районом. В некоторых землях существуют амты (admin_level=7) - промежуточная административная единица между районами и коммунами.

Существует 3 города-государства (имеют статус земли) - Берлин, Вольный и ганзейский город Гамбург (он же просто Гамбург) и Вольный ганзейский город Бремен:
Берлин и Гамбург: admin_level=4, но определяются через place=city, Вольный ганзейский город Бремен (admin_level=4) состоит из городов Бремен и Бремерхафен, имеющие admin_level=6, но определяемые через place/de:place=city.

Некоторые другие города тоже имеют статус района: admin_level=6 + de:place=city.

Города районного подчинения: admin_level=8 (где-то, возможно, admin_level=7) + de:place=town

Коммуны: admin_level=8 + de:place=village.

В достаточно населённых пунктах (которые, скорее всего, имеют тег de:place=town или de:place=city), могут попадаться admin_level=8/9/10/11, соответствующие частям города.

Именно поэтому я предлагаю следующий алгоритм:
а) смотрим, попадает ли адрес в полигон place (в Германии этот тег не очень распространён, но встречается), если попадает - конец программы, если нет - идём дальше;
б) смотрим, попадает ли адрес в полигон de:place=village/town/city (широко распространённый в Германии тег), если попадает - конец программы, если нет - идём дальше;
в) смотрим, попадает ли адрес в полигон admin_level=8 (широко распространённый тег), если попадает - конец программы, если нет - удивляемся и разбираемся, как такое могло получиться:)

ЧаВо:
Вопрос 1: почему не предлагается опираться только на de:place=village/town/city?
Ответ 1: потому что я не уверен, что эти теги везде проставлены: возможно, где-то проставлены только admin_level=8.
Вопрос 2: почему не предлагается опираться только на admin_level=8?
Ответ 2: а) потому что я не уверен, что эти теги везде проставлены (хотя, скорее всего, это так): возможно, где-то проставлены только de:place=village/town/city; б) потому что существуют крупные населённые пункты, имеющие admin_level=4/6.

Если я где-то ошибся в рассуждениях и меня поправят, буду весьма признателен.

Осталось вышенаписанное соотнести с

mkgmap:country=DEU & mkgmap:city!=* & mkgmap:admin_level8=* { set mkgmap:city='${mkgmap:admin_level8}' } 
mkgmap:country=DEU & mkgmap:city!=* & mkgmap:admin_level7=* { set mkgmap:city='${mkgmap:admin_level7}' } 
mkgmap:country=DEU & mkgmap:city!=* & mkgmap:admin_level6=* { set mkgmap:city='${mkgmap:admin_level6}' } 
mkgmap:country=DEU & mkgmap:city!=* & mkgmap:admin_level9=* { set mkgmap:city='${mkgmap:admin_level9}' } 
mkgmap:country=DEU & mkgmap:city!=* & mkgmap:admin_level10=* { set mkgmap:city='${mkgmap:admin_level10}' } 

и тогда все станет ясно.

Пару примеров приведите пожалуйста. А то я с ходу что-то не нашел…

Я бы не советовал считать mkgmap эталоном, у него свои ограничения и баги

Согласен. Но вопрос адресного поиска там проработан. А сообщество пользователей гарминовских карт заведомо больше ситигидовского, поэтому ошибки адресного поиска там должны быть минимизированы. Поэтому можно брать ту схему как отправную точку.

Вопрос адресного поиска там совсем не проработан - достаточно посмотреть, какую чушь он выдаёт для России. Адресный поиск там появился недавно, он жёстко завязан на boundary=administrative (это уже ошибка), и сейчас их схема подходит только для самых простых случаев.

А что касается гарминосообщества, оно там хоть и большое, но достаточно “специфическое”, и ему адресный поиск не сильно интересен.

То есть я к тому, что как отправная точка оно годится, но не более того. И уж тем более не как цель.

Уговорил :slight_smile:
Будем копать сами…:smiley:

Простите, а зачем? Есть Административно-территориальное деление Федеративной Республики Германия - на него и следует опираться. Если где-то в моих рассуждениях ошибка, укажите на неё, пожалуйста. Строго формально из населённых пунктов в Германии есть только города (крупные), а иные объекты, которые, скажем, в России называют (в туристических справочниках, форумах и т. д.) городами и деревнями, являются коммунами (Gemeinde). Соответственно, я предложил схему, которая позволяет определить крупные города (Stadtstaat, Kreisfreie Stadt, Stadtkreis) и небольшие поселения (Gemeinde).

1, 2.

Хорошо, я не настаиваю. Заблуждался, считая что в mkqmap сделано правильно, но меня уже переубедил liosha.
Давайте попробуем по вашему предложению, и посмотрим, что получится. При необходимости - подкорректируем.

Не смешно. Это вами созданные объекты.

А как же. Я видел :slight_smile:
Только вот непонятно, зачем мультиполигон Потсдам http://www.openstreetmap.org/browse/relation/2125023 в точности повторяет Потсдам Boundary=administrative admin_level=6 http://www.openstreetmap.org/browse/relation/62369

А я и не смеялся. В тот момент, когда Вы писали, что уверены, что я не найду ни одного подобного объекта, они уже существовали. Соответственно, Ваше утверждение являлось, очевидно, неверным. Если бы taginfo работал, а не выдавал “Internal Server Error”, я бы мог поискать на карте другие подобные объекты. Потому я, чтобы далеко не ходить, и привёл в качестве примера те объекты, о которых знал.

Если это чем-то мешает, можно пока объединить эти мультиполигоны.

Это лишняя сущность. Я понимаю, что вы его создали как костыль для адресного поиска в СитиГиде. Но теперь он не нужен, и по моему мнению его можно удалить.
Еще раз - в Европе (в отличии от нашей страны) порядка больше. Там есть четкая структура, которая уже давно внесена в ОСМ. Нужно просто научится ее использовать. Поэтому полигонов place в Европе нету, там есть границы различного уровня. Кирилл уже вплотную подошел к их правильной интерпретации и использованию при конвертации.

Zkir
Ну а все таки, вы примете эти несчастные 7 строчек или нужно что то еще?

Скорее всего да. Я пока не имел возможности их протестировать, видимо ближе к выходным. Валидатор - это живая система, кроме валидации используется для конвертации в СГ. Поэтому надо чуть-чуть подождать)

Zkir
Хорошо, спасибо. А то эти сотни домов в Алчевске и не только в Алчевске мне прямо кушать не дают :slight_smile:

Кстати на всякий случай: патч никак не меняет логику поведения конвертера. Он только добавлет еще один метод поиска улицы для POI в том месте где конвертер это и так пытается сделать.

Zaskoruzlov Garik,
Поставил ваш патч в процесс, украина уже обновилась, проверяйте.

Значит ли это что у домиков включенных в assosiatedStreet появятся addr:street не только в Украине, но и в других европейских странах?