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

Zkir
liosha
Если возможно, хотел бы снова обратить ваше внимание на то, что точки с тегом addr:street и улицей заданной через associetedStreet не получают информации о улице даже если имеют тег building=* (Тогда как с полигонами все нормально)
Дело в том что такие точки используются для адресации по схеме Карлсруэ. B на данный момент, если улица в них задана не через тег addr:street а через associetedStreet они все выпадают из адресного поиска.
В валидаторе попадают в раздел “Улица не задана” хотя улица там как раз задана.
Собственно не совсем понятно, почему полигон здания имеет право получать адресную информацию из relation а адресная точка нет.
Собственно это баг или фича? А если баг то не планируется ли случаем его поправить?

Zaskoruzlov Garik
Это баг, разумеется.

К сожалению, моих знаний перл недостаточно, чтобы самому его починить. В возможность получить стабильную версию 1.xx я уже как-то не верю.

Но это опенсорс вы можете присылать патчи. Патч нужен к вот этому: http://peirce.gis-lab.info/misc/osm2mp_new.zip.
Конфиги к нему здесь: https://github.com/Zkir/osm2dcm/tree/master/osm2dcm/osm2mp.config

Zkir

Ясно, спасибо.

Ох. К сожалению в перле я тоже совсем никак, но возможно попробую покопаться, вряд ли там большой кусок кода надо поправить.

А что именно в ней нестабильного-то? Вроде везде работает

liosha
А все же вы не панируете починить этот как оказалось все таки баг?

А разве он есть в современных версиях?

liosha
Если верить этому, то да есть.

Не, если верить этому, то как раз нет. У всех адресуемых объектов адрес правильный.

liosha
То есть:

Это правильно?

Да, правильно. В конфигах же ничего нет про то, что оно должно что-то создавать.

В каком месте эти associatedStreet есть, чтобы проверить ?

freeExec
http://peirce.gis-lab.info/qa/UA-E/addr/2
Все записи о Алчевске например.

liosha
Это потому что Garmin?
Ну а в СитиГИД-е тогда оно почему не работает? И собственно чем здание полигон лучше здания точки в рамках адресной информации?

Это нужно спросить у составителей ситигидовских конфигов :stuck_out_tongue:

ЗЫ
ЕМНИП в конвертации Беларуси когда-то такие точки прописывали, и всё работало.

liosha
Другими словами патчить надо не
http://peirce.gis-lab.info/misc/osm2mp_new.zip
а
https://github.com/Zkir/osm2dcm/tree/master/osm2dcm/osm2mp.config
?

Не, я могу отвечать только за современный конвертер. А в http://peirce.gis-lab.info/misc/osm2mp_new.zip достаточно древняя версия. Есть ли баг в ней, я лично не знаю.

Ясно, спасибо.

видимо тут:

#Address on address points
- condition:
    - addr:housenumber = *
    - building != *
    - amenity != *
    - shop != *
    - office != *
    - tourism != *
    - craft != *
    - only_node
  action:
    - action: write_poi
      type: 0x6100
      contacts: no

Последняя строка что значит ?
Судя по коду: “# contact information: address, phone” - то адрес именно там собирается, а без “contacts: yes” он туда не добирается. Но без отладчика это так, гадание на кодовой гуще :slight_smile:

freeExec

Похоже дело не в этом. При наличии contacts: yes/no адрес точки записывается в MP файл если на ней есть тег addr:street. А вот на наличие associetedStreet он почему-то никак не влияет.
В общем я попробую поиграться с конфигом, если будет результат напишу.

Ох. Ну и непросто же копаться в коде на языке в котором ни бум-бум.
Так что не знаю даже то это или нет + нужно оттестировать, но вот выложу получившийся патч к конвертеру
http://peirce.gis-lab.info/misc/osm2mp_new.zip (кстати там версия 90b)

--- osm2mp_new.pl       2012-04-07 22:27:24.000000000 +0300
+++ osm2mp_new.pl.2     2013-01-21 17:46:56.409912875 +0200
@@ -2176,6 +2176,13 @@
             $street .= qq{ ($suburb{$suburb}->{name})}      if $suburb;
             printf "StreetDesc=%s\n", convert_string( $street );
         }
+        else {
+            my $poyid_temp = "node:" . $param{nodeid};
+            my $street_name = $street{$poyid_temp};
+            if ($street_name) {
+               printf "StreetDesc=%s\n", convert_string( $street_name );
+            }
+        }
 
         printf "Zip=%s\n",          convert_string($tag{'addr:postcode'})   if exists $tag{'addr:postcode'};
         printf "Phone=%s\n",        convert_string($tag{'phone'})           if exists $tag{'phone'};

Смысл патча:
Если POI (а как POI там в том числе и адресные точки) не имеет тега addr:street, но входит в relation street/associetedStreet с ролью house, то прописываем такой POI параметр StreetDesc значение которого берем из хэш таблицы отношений улиц.
Как доберусь домой оттестирую это получше.

PS Правда я хз StreetDesc это именно то что нужно или нет :smiley: