Як правильно вказувати адресу ?

может, и удобнее. Но при рендеринге карты на osm.org названия для подписывания улиц берутся не из релейшена, а из тегов отрезков улиц. Кроме того, как я понял, конвертор osm2mp для подписей улиц берёт теги отрезков улиц. Так что если названия улиц хранить только в релейшене, то мы не увидим названий улиц ни в карте на osm.org, ни в навигаторе.

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

кто знает, подскажите, osmand не поддерживает нашу схему адресации?
поиск улицы находит, а дома нет :frowning:

Возможно не поддерживает. Скорее всего, не сам Османд, а конвертер.

Кстати, надо бы ради интересу попробовать этот Османд, пока у меня этот дурной нетбук (Toshiba AC-100) не забрали. Или пока я его об стенку не разбил:D

[offtop] Цікаво — нетбук на Андроїді, які враження? [/offtop]

Погані враження :frowning:
Уявіть, що “залізо” смартфона чи КПК встромили в корпус від нетбука. Замість тачскріну зробили маненьку клавіатуру, тачпад та мишу. Дзвонити з нього неможна, але є Wi-Fi (нажаль, без режиму Ad-Hoc, тож без Wi-Fi роутера чи точки доступу не працює). Нема Ethernet. Блютузу нема або не працює. GPS нема. Є HDMI, але нема VGA, тож до проектора не підключити. Вібро нема, акселерометра нема. Є флеш-вінчестер на 5 чи 8 ГБ та дірка для SD-карти. Ще можна вставити USB-флеш, але тоді будеш без USB-мишки чухати пальцем тачпад, бо дірка USB лише одна. Однак, є порт mini-USB. Можна підключити це гімно до нормального компа та перепрошити чи скопіювати якісь файли.
А ще іноді ця гидота може зависнути.
Запустив CityGuide7, але не зміг запустити Navitel (ні 3, ані 5 версію). Запустив quake3, але миша там якось дивно працює. Незручно або треба щось налагоджувати.

На мою думку, воно годиться лише для забавок: іграшки, сьорфінг по інтернету, музончик, фільми.
Ось тут багато розписано про цю іграшку http://4pda.ru/forum/index.php?showtopic=198800

[offtop]

У мене теж майже-андроід-нетбук.
Точніше андроід-планшет, який переводиться в ноутбучний режим: Eee Pad Transformer Prime TF201. ASUS до нього навіть безкоштовно прислала GPS-модуль.
Враження вцілому позитивні, все-таки робота з клавіатурою набагато продуктивніша за пальцетикання.
Але у андроіда своя специфіка - програми заточені під мобільне використання і саме під палець. Не уявляю, як можна організувати повноцінну розробку чого б то не було, обмежуючись самою лише платформою Android, навіть з клавіатурою. Сама ОС з користувацькою ідеологією.
[/offtop]

[offtop] Це коли в нетбука є нормальна клавіатура. А в цьому недоробку клавіши під Німеччину зроблені. Я встановив AnySoftKeyboard, але не знайшов підходящої розкладки під російську та українську мови. Деякі букви не на своїх місцях. І коли воно все працює і не висне. І коли в нього є багато різних інтерфейсів вводу/виводу, а не один порт USB.
Ось у моєму ноуті є повноцінний WiFi, Bluetooth, 4 USB 2.0, DVD-RW, Ethernet, modem, VGA-port, com-port, IEE1394, IR-port, вихід для навушників, вхід для мікрофона (може працювати ще й як лінійний вхід), вбудований мікрофон, PCMCIA slot, ExpressCard slot. Та навіть слот для карток iso-7816. Нажаль, веб-камери нема.
[offtop]

І, повертаючись до основної теми, хочу запитати: хто придумав систему адресації з релейшенами? І чому вона не має серйозної підтримки в усіх “механізмах” OSM?

Придумали її у Німеччині, вперше для містечка Карлсруе. А підтримку має, в першу чергу у Номінатімі. Може не має у чиїхось самописних валідаторах, бо люди може лінуються додати підтримку, і то треба їх заохочувати доробити їхні інструменти.

Гм. Поліз я у Німеччину…
Спочатку Берлін.
Намальовано будинок (building=yes), всередині нього точка без тегу building, але прописані теги
addr:city=Berlin
addr:country=DE
addr:housenumber=2
addr:postcode=10707
addr:street=Xantener Straße
building=yes

На іншій вулиці адресу вже вказано на будинку
addr:city=Berlin
addr:country=DE
addr:housenumber=33
addr:postcode=10707
addr:street=Brandenburgische Straße
building=yes

Дивлюся у бічну панель ДЖОСМу, бачу три релейшени вулиць. Відкриваю. Бачу
name Große Diesdorfer Straße
type associatedStreet
в релейшені три будиночки з роллю house. Ділянок вулиці в релейшені немає.

Потім почав шукати Карлсруе. Знайшов :slight_smile:
Справді. Адресація задана релейшенами.
name Brauerstraße
type street
Члени релейшена
street - відрізки вулиці (причому розташовані послідовно (!) )
house - будиночки.

Однак чомусь на будиночках все одно проставлені теги
addr:city=Karlsruhe
addr:country=DE
addr:housenumber=3a
addr:street=Brauerstraße
building=yes

Поліз в Номінатім.
Шукаю “Харків, Єлізарова вулиця, 6” - знаходить лише вулицю. Вказую російською мовою - те ж саме.
Шукаю “Харків, Єлізарова вулиця, 4” - знаходить. Вказую російською мовою - теж знаходить.
Але чомусь вказано район Залютино. Хоча ці будинки на Холодній Горі.

Запускаю ДЖОСМ, дивлюся. На №4 вказано addr:street. На №6 вказано лише номер будинку.
Обидва будинки включено до релейшену.

Потім я згадав про проблеми з містом Борова. У Харківській обл. є дві Борові (в Зміївському та Борівському р-ні). Тож у Навітелі були проблеми з пошуком.
Шукаю “Борова, Гагаріна вулиця, 25”. Номінатім швиденько знаходить.
Шукаю “Боровая, Гагарина улица, 23”. Теж знаходить.

Відкриваю ДЖОСМ, дивлюся. На будинку лише номер та building=house, адресація задана релейшеном. В тегах релейшена лише українська назва в name, відрізки вулиці мають назви українською та російською мовами.
На межі міста Борова лише теги place=town та name, name:ru. На точці міста теж ніяких addr:district, addr:country, та ін.
Але Номінатім все це сприйняв! Причому правильно. Не переплутав райони!

Але чому в Харкові йому знадобився тег addr:street?
Не розумію. Піду спати.

Друже, тому, що Номінатім відстає, а ти додав ті будинки 5-го вересня. Спробуй пошукати інші будинки, 37, 26 і таке інше. Тобто, одноповерхові, рілейшени для яких я зробив 2-го вересня

Район вказано невірно тому, що ніхто не намалював полігон для Холодної гори – звідки ж йому знати?

Он воно шо!
Спробував. Працює.

Отже, треба допилювати конвертор. Погано, що liosha не хоче це робити :frowning:
Хлопці, хтось розуміється на Perl? Бо хоч воно й опенсорс, але моїх знань вистачає лише на те, щоб відкрити osm2mp.pl у текстовому редакторі, пробігти очима та закрити :frowning:
А інтуіції вистачило лише на те, щоб знайти шмат коду, який начебто відповідає за обробку релейшенів вулиць.


if ( $flags->{street_relations} ) {
    for my $type ( qw{ street associatedStreet } ) {
        my $list = $relations->{$type};
        next if !$list;

        while ( my ($relation_id, $members) = each %$list ) {
            my $street_name = name_from_list( 'street', $reltag->{$relation_id} );
            next if !$street_name;
            
            for my $member ( @$members ) {
                next if !( $member->{role} ~~ [ 'house', 'address' ] );
                $street{"$member->{type}:$member->{ref}"} = $street_name;
            }
        }
    }
    printf STDERR "  %d houses with associated street\n", scalar keys %street;
}

[offtop]
Щодо нетбука toshiba AC100 : я зробив “reset to factory defaults”. Не допомогло. Все одно час від часу нетбук зависав. Тоді я відформатував розділ з юpерськими даними (при перепрошиванні його не чіпали) та скопіював все те “добро” назад, стало краще. Тепер вже не висне vplayer через 10 хвилин після запуску, і поки що немає спорадичних зависонів без причин.
Проблему з клавіатурою майже подолано: поставив Multiplay IME keyboard (довелося власноруч переробити турецьку розкладку на українську), але перестали працювати комбінації Ctrl+C, Ctrl+V, Ctrl+A. Але можна й без них. [/offtop]

Угу, воно дивиться на теґ street у відношенні. Ясно, чому не працює.

Я би в лоб, не дивлячись сильно на код, написав би так:


        while ( my ($relation_id, $members) = each %$list ) {
           my $street_member = first { $_->{type} eq 'way' && $_->{role} eq 'street' } @$members;
           next if !$street_member;

           $street_name = name_from_list( 'name', $waytag->{$street_member} );
           next if !$street_name;

Спробуй.

Так, воно бере тег name з відношення. В нас name відношення співпадає з назвою вулиці українською мовою. А при створенні карти на інших мовах виникає помилка.

Завтра спробую. Тільки спочатку знайду довідник з синтаксиса Перл.
Бо без довідника я якось розумію лише Бєйсік та Паскаль. :smiley: А тут ситаксіс не дуже схожий на паскалевський. Скоріше на С++

Ні, по коду воно бере власне с теґа street, а не name. Тому більшість відношень і пропускаються.

Спробував. Воно матюкається на $street_name
Я подивився на оригінальний код, інтуітивно дописав my перед $street_name у рядку

my $street_name = name_from_list( 'name', $waytag->{$street_member} );

Запустилося. Зараз чекаю на результат.

Результат поки невтішний. Я вказав брати назви з name:ru, name

perl osm2mp_sev.pl --config=cfg\navitel-ru.cfg --full-karlsruhe --navitel --bpoly OSM_UA_KHR.poly --namelist label=name:ru,name --namelist place=name:ru,name --namelist street=name:ru,name --defaultcountry="Ukraine" --defaultregion="Kharkivska obl." --codepage=utf8 --output=UA-KHR-ru.mp UA-KHR.osm

Воно видало “0 houses with associated street”. Відкриваю Харків, дивлюся: там, де будинки не мають addr:street, замість назви вулиці прописано “Харьков”. А там, де addr:street задано, воно вписало назву вулиці "Єлізарова вулиця"з addr:street. Хоча в параметрах задано брати назву з name:ru.

dimonster, а откуда ты пытаешься брать имя улицы?

Там задано --namelist label=name:ru,name --namelist place=name:ru,name --namelist street=name:ru,name

Index: osm2mp.pl
===================================================================
--- osm2mp.pl   (revision 581)
+++ osm2mp.pl   (working copy)
@@ -413,7 +413,17 @@
         next if !$list;

         while ( my ($relation_id, $members) = each %$list ) {
-            my $street_name = name_from_list( 'street', $reltag->{$relation_id} );
+            my $street_name;
+            for my $member ( @$members ) {
+               next if !( $member->{role} eq 'street' );
+               next if !( $member->{type} eq 'way' );
+               my $s_name = name_from_list( 'street', $waytag->{$member->{ref}} );
+               next if !$s_name;
+
+               $street_name = $s_name;
+               last;
+
+            }
             next if !$street_name;

             for my $member ( @$members ) {

ось. тут ім"я береться з тегів на першій лінії з роллю street, у якої є якесь ім"я. відповідно, якщо першою зустрінеться вулиця, у якої заданий name, а name:ru - ні, то вся вулиця буде вважатись українською. вже вибачте :slight_smile:
також, якщо вулиця з лівою назвою затесалась у відношення, так і буде.

патч можете передати liosha якщо він буде працювати як треба