Мультиязычные адреса

Имхо, все-таки собирать в отношение, аналогично street.
При этом name:* может как содержаться в самом отношении, так и ссылаться на внешний объект (возможно, фейковый), name которого соответствует нужной части адреса.
Например, отношение для addr:district может выглядеть так:
type=district
name=Запупырский район
name:en=Zapupyrskiy district
Члены отношения в роли address - либо города (тогда к полигонам городов неявно добавляется addr:district на нужном языке), либо непосредственно дома или какие-то другие адресуемые объекты (тогда name на нужном языке добавляется непосредственно к адресу объекта, независимо от вхождения в полигон НП).
Вместо набора name в самом отношении может использоваться ссылка на границу Запупырского района в роли district (предполагается, что граница имеет набор названий района name:*).
Возможна ссылка на фейковый объект (в роли district или label) с нужным набором имен.
Аналогично для region (addr:region) etc.

UPD: вроде бы больших накладных расходов такая схема не несет - достаточно одного члена отношения для простановки имен на нужном языке/языках при рендеринге/конвертации (или одного члена внешнего отношения для получения его списка имен).

Далеко не все веи входят в релейшны. Потому: предложенное - вандализм.
По хорошему нужно вводить в ОСМ новую сущность - объект, и освобождать узлы, пути и отношения от несвойственных им функций (в частности, от всех тегов).

Ну, если на выходе должен быть изначально “кривой” формат, в котором адрес не привязывается, а присваивается “домику”, то - да.
Но это проблема не ОСМ, а того кривого формата, в который конвертируются ОСМ данные.

Нет, нужно изначально проектировать структуру данных так, чтобы не было ограничения “один объект - один адрес”.

Отнюдь.
Нужно просто понять, что адрес - это самостоятельная сущность.
Итак:

  1. Дом в виде узла или вея.
  2. Адрес по улице 4 в виде релейшна со ссылкой на 1 и номером дома.
  3. Адрес по улице 5 в виде релейшна со ссылкой на 1 и номером дома.
  4. Улица-релейшн, ссылающаяся на адрес-релейшн 2.
  5. Улица-релейшн, ссылающаяся на адрес-релейшн 3.

Об этом есть пропозал?

Ещё вариант обозначения множественных адресов вроде ул. Садовая, 7 / ул. Парковая, 22 :
На полигон домика вешаем тег addr:housenumber=7 и включаем его в релейшен ул. Садовой.
На контуре полигона домика вешаем точку с тегами building=yes, addr:housenumber=22 и включаем его в релейшен ул. Парковая.
Если в доме есть POI, размещаем их внутри полигона домика. При этом POI получают адрес из тегов полигона здания и релейшена улицы
(ул. Садовая, 7).

Так что если таксист с навигатором будет искать ул. Садовая, 7 - навигатор приведёт к домику.
если будет искать ул. Парковая, 22 - приведёт туда же.
А если будет искать по названию POI, то какая разница по какому из двух адресов он его найдёт, если это один и тот же дом.

andriano, ну ты, ей богу, как вчера родился… Все это уже по пятому кругу предлагается, обсасывается и отвергается…

:facepalm: видимо только тебе непонятно, что убирать name:* надо с тех веев, которые уже собраны в адресный street. На остальных пусть пока остается.

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

P.S. А ты точно программист?

Это поломает конвертацию у тех, кто не поддерживает адресные отношения. Т.е. на данный момент у большинства.

по моему они будут только рады тому, что не придется навешивать дополнительные условия по вычислению дублей.

Нет, потому что это (как и все схемы с отношениями, пока) не позволяют указать какой адрес главный. И это зверский overcomplication несовместимый с реальным миром.

Первую проблему можно было бы решить так: на каждый дом создаётся одно отношение “набор адресов”, а внутри него уже что-то из существующих схем - проще всего та что с номером дома в role, но можно и тот ад, что ты предложил. Главное, что адреса в таком случае будут упорядочены.
Вторую решить сложнее, потому что нет, мы не можем просто взять и перейти на такие сложности для самых базовых объектов на карте - как минимум, нужна полная поддержка во всех редакторах.
Без решения обеих проблем адресные отношения использовать нельзя.

К сожалению, без отношений полного решения тоже нет. addr:street можно матчить с улицей (дабы выбрать оттуда нужные name:*), но это не работает для адресации по не-улицам. Можно матчить и с place, но и place может не быть (кстати, использования addr:place тут поможет тем, что ускорит поиск). Но на практике непокрытыми остаётся такое незначительное количество случаев, что им можно либо пренебречь (оставив адрес на одном языке), либо исправить добавлением условно-фейкового place, либо добавлением addr:place:{lang} только для таких объектов. Затраты и возможные проблемы от этого на порядки меньше любых извращений с отношениями.

Надеюсь, что нет. (потому как его не должно быть - это не тот вопрос, который решается голосованием)

А моё предложение постом выше? http://forum.openstreetmap.org/viewtopic.php?pid=279208#p279208
Тот адрес, который на тегах полигона домика, а не на точке - тот и главный.

Так стоит применять схему с отношением хотя бы для домов с одним адресом, которых вообщем-то 98% ?

У нас в Украине схема с отношениями широко применяется и рекомендована к использованию.
Но вообще-то мне не нравится такой разнобой со схемами. Интересно, а что по этому поводу думают в DWG?

Немножко про Беларусь.

Дом линкуется к улице по addr:street=name + ближайшее расстояние.
name:* лежат на линии улицы, в доме - только addr:street.
Если в доме несколько адресов, то адреса стоят на точках внутри зданий и линкуются аналогично.

Как это работает, можно посмотреть по указателю вверху карты, например, на http://openstreetmap.by/?zoom=18&lat=53.898315&lon=27.556999 - попереключайте языки, чтобы увидеть разные адреса на русском-английском-белорусском.

Попытки решать это как-то иначе (через сложные релейшены, тегами addr:street:*) в целом показали свою неэффективность.

Но почему тогда при конвертации не подхватываются name:ru с тегов линий улицы, а берётся значение addr:street на том языке, на котором оно написано?

Я имел в виду вот это http://www.openstreetmap.org/browse/relation/81697
a1 - Страна

a6 - улица с домами

Структурированная схема, готовая для конвертации, с name:*
Можно про нее поподробнее, и функции препроцесорра который, насколько я знаю, ее обрабатывает перед конвертацией в MP

Точки даже рассматривать не стоит.

Нет. Во-первых, иметь две схемы нельзя, во-вторых, сложность никуда не девается.

Это не решение проблемы, а уход от нее.
Адреса - объективно у дома, а не у точек внутри него. У нас же получается, что у одного объекта все равно не может быть двух разных адресов, а разные адреса - у разных объектов (у полигона и у точки).

Это нелогично: правило должно быть одно - общее.
Это во-первых.
А во-вторых, чем тег name:* отличается от других тегов, что убирать нужно именно его?
И что делать в случае, когда улица обозначена hw=residental, а в отноршении - она же hw=primary?

Выше чем где? В варианте с точкой внутри дома с самостоятельным адресом?
Система адресации в первую очередь должна быть логичной и только после этого компактной.
Правильно надо расставлять приоритеты. Иначе вместо “улица Ленина” нужно писать исключительно “ул. Ленина”, а то иначе “профит отрицательный”.