Какими бы они не были, есть возможность такими их и записать, все. Причём компактно, консистентно и с возможностью выбрать потом что обрабатывать, а что нет.
Проблема как обычно - в поддержке этой схемы в редакторах/рендерерах/конвертерах.
Все эти костыли возникают из-за отсутствия списков в качестве атрибутов. Если на API мы влиять не в силах - есть смысл попробовать повлиять на поддержку в редакторах & etc. А как именно потом это в базу разложится - вопрос больше технический.
В стандартах обычно используют слова MAY, SHOULD и MUST для описания частей, для которых допустима частичная реализация. Не вижу проблемы постулировать необходимость поддержки фиксированного набора дополнительных адресов, а именно addr2, addr3, addr4 (хватит всем). Ограниченные средства смогут просто продублировать правила/запросы для адресов ещё 3 раза и успокоиться. Более умный софт сможет перебрать все addrN и для каждого из них все housenumberN.
На самом деле главный вопрос, на мой взгляд звучит так: есть ли у дома основной адрес и ряд дополнительной информации или несколько равноправных адресов.
Я считаю что есть основной, чему отлично соответствует схема с addr{n}:
давайте сначало с вариантами разберемся, а потом поддержка, api, распознование поисковиком и пр.
P.S. что избавится от догадок, и “а может этого не хватит”
Одно можно сказать точно: должна быть возможность воспроизвести (отрендерить) адрес в том виде, в котором он известен жителям города. Если на табличке дома и в паспортах жителей стоит адрес “Улица1 17/2”, то по адресу “Улица2 2/17” тот же самый дом вы никогда в жизни не найдете. Т.е. варианты с разбиением дома пополам или добавлением адреса в виде двух точек ущербны изначально.
Если уж не устраивает просто запись через дробь, то должно быть что-то вроде:
addr:street=Улица1
addr:housenumber=17/2
addr:street1=Улица1
addr:housenumber1=17
addr:street2=Улица2
addr:housenumber2=2
Только не addr:…N, а addrN:…
В Воронеже крайне редко встречается угловая нумерация, возможно её даже и нет.
Единственный раз когда видел такую нумерацию - был в Сочи. И согласен, что проще ставить addr и addr2 без деления дома (особенно если он сложэной формы и не понятно где что).
Но, если дом простой формы (хрущевки и т.п.) и человек его разделил, то ничего страшного в этом не вижу
значит других аншлагов не бывает (в гугле я тоже не нашел).
Тогда предлагаю следующее:
- для записи двойных/тройных/четверных адресов официально (на сколько это возможно в ОСМ) использовать addrN:
- начальные теги (addr:street, addr:housenumber) использовать для официального адреса или наиболее употребляемого жителями (если таковой есть), в противном случае любой (можно например по часовой стрелке или просто любой)
- для адресов ул. Первая, д. 5/6 записывать: addr:street=Первая улица, addr:housenumber=5/6, addr1:street=Первая улица, addr1:housenumber=5, addr2:street=Вторая улица, addr2:housenumber=6
- для адресов ул. Первая, д. 5 и ул. Вторая, д.6: addr:street=Первая улица, addr:housenumber=5, addr1:street=Вторая улица, addr1:housenumber=6
- теги addr:streetN и addr:housenumberN не использовать
сомнения:
- возможна война правок по определению официального адреса или наиболее употребляемого
- не ясно надо ли записывать адрес с обратной дробью ул. Вторая, д. 6/5
Что скажет сообщество?
Во-первых, совершенно необязательно. Если дом нигде (ни на табличках, ни в адресах) не значится как 5, но не надо ничего придумывать, писать только 5/6. Кроме того:
addr:streetN не использовать, а addr:housenumberN нужен для записи разных написаний номера дома. Во-первых, это всевозможные варианты дробей, во-вторых, разные написание из разных источников. В КЛАДР “3-5 с1Б”, на табличке “3/5 сВ”, и хоть ты повесься. Кроме того, если улица одна, нет смысла дублировать addr:street.
Вы не читаете меня совсем, похоже.
Моё предложение формулируется так:
- для записи двойных/тройных/четверных адресов официально (на сколько это возможно в ОСМ) использовать addrN:
- начальные теги (addr:street, addr:housenumber) использовать для официального адреса или наиболее употребляемого жителями (если таковой есть), в противном случае любой (можно например по часовой стрелке или просто любой)
- при наличии адресов по разным улицам используются тэги addrN
- при наличии разных вариантов написания номера дома по одной улице, в соответствующем addr или addrN используются addr:housenumberN
- как для адресов по другим улица, там и для альтернативных номеров домов заносить только те, что реально используются
- addr:streetN не использовать
Таким образом:
Первая улица, д.5/6
addr:street=Первая улица
addr:housenumber=5/6
Первая улица, д.5/6, Вторая улица, д.6/5
addr:street=Первая улица
addr:housenumber=5/6
addr2:street=Вторая улица
addr2:housenumber=6/5
Первая улица, д.5/6 (и табличка со стороны Первой улица с номером 1), Вторая улица, д.6/5 (и табличка со стороны Второй улицы с номером 6)
addr:street=Первая улица
addr:housenumber=5/6
addr:housenumber2=5
addr2:street=Вторая улица
addr2:housenumber=6/5
addr2:housenumber2=6
Существенная разница между этими двумя схемами … мапник Он прекрасно работает с адресными точками но про addrN: ничего не знает …
не понял, если первая табличка Первая улица, д.5, вторая табличка Вторая улица, д.3 сВ (а в КЛАДРе 3 с1Б) то:
addr:street=Первая улица
addr:housenumber=5
addr1:street=Вторая улица
addr1:housenumber=3 сВ
addr1:housenumber1=3 с1Б
так?
мапник можно научить. Сейчас главное найти удобный/понятный/универсальный вариант
Так, но addr2 и housenumber2, потому что addr1 это просто addr и
% grep -o 'addr[0-9]' russia-120224.osm | sort | uniq -c
2 addr1
1612 addr2
10 addr3
% grep -o 'housenumber[0-9]' russia-120224.osm | sort | uniq -c
9 housenumber1
1539 housenumber2
10 housenumber3
Прочёл всю тему и наиболее вразумительными мне кажутся доводы AMDmi3. Всецело поддерживаю.
Немного напрягает слитное написание числа и тега, это же ужасно. Давайте, что ли, как массив писать.
addr:street=Первая улица
addr:housenumber=5/6
addr:housenumber[2]=5
addr[2]:street=Вторая улица
addr[2]:housenumber=6/5
addr[2]:housenumber[2]=6
И все двоеточия заменить на точку, вот тогда будет ня.
Немного напрягает слитное написание числа и тега, это же ужасно.
Зато писать быстрее. На вкус и цвет. ЧТо скажут конвертерщики? AMDmi3?
И все двоеточия заменить на точку, вот тогда будет ня.
А это ещё зачем? рушить существующую схему " addr: " не хорошо.
addr2 и housenumber2, потому что addr1 это просто addr и
А возможность появления addr0 учтена?
Зато писать быстрее. На вкус и цвет. ЧТо скажут конвертерщики? AMDmi3?
Машине всё равно. Тэги - для людей.
Скобки дольше писать, они увеличиваю вероятность ошибок (“addr[2”, “addr]2]”), и это не будет соблюдаться новичками. Вообще, я бы в тегах придерживался минимального алфавита.
А возможность появления addr0 учтена?
Также как и появления addr31337 - никто это парсить это не обязан, но может если умеет.
Что скажут противники схемы предложенной AMDmi3? Или все согласны?
Мне кажется, что этот вопрос ещё раз нужно рассмотреть нашим “Советом” и уже закрепить как соглашение об именовании дорог.
я за простоту.
[] - не стоит
а вот пропуск addr1 не очень хорош, я как программист понимаю, но как человеку объяснить что addr1: писать не надо, т.к. это addr: он возьмёт и напишет addr1: (что доказывает grep). Ясно что addr2 сейчас больше, но не обязательно что это правильно, да запустить бота для перекидывания addr2->addr1 запросто и не думаю что тут можно накосячить. т.е. я прошу рассмотреть addr1 в контексте понимания пользователем, а не в том сколько уже использовано.