IMHO достаточно только name:* на отношении street. Все name:* на веях - ф топку. addr:street туда же.
Ботом регулярно приводить улицы и адреса к данному виду.
Минусы: множественные адреса идут лесом. Далеко и надолго.
Создать-то можно, но как их будет обрабатывать конвертор?
Сейчас конвертор будет делать так: обработает один релейшен, потом обработает другой релейшен. В результате на домике останется только одно название улицы (из того релейшена, который был обработан последним). А потом конвертер обработает все addr:street и название улицы останется из addr:street. И пойдут лесом ваши мультиязычные названия
Множественные адреса (кстати, какой дурак их придумал?) можно обозначать двумя (тремя, четырьмя,…) точками с тегом building=yes и addr:housenumber=*. Точки ставить на контуре домика со стороны соответствующих улиц. Потом точки включить в соответствующие релейшены. Да, это “костыль”. Особенно феерично будет прописывать в таком доме номера подъездов
freeExec при включении домика в два отношения, как понять, к какому отношению относится addr:housenumber? Номер дома без смазки в отношение не запихивается.
dimoster в случае с точками POI в здании лишатся адреса. И его (точнее их) надо будет прописывать везде - дублирование информации и огромное поле для ошибок.
И не всегда есть “сторона соответствующей улицы” - в НЧ дома собраны в стриты псевдорайонов, мне с какой стороны ставить точку?
А в чем проблема то? Сопоставление идет по addr:street = name или addr:place = name. У улицы могут быть name:* Вроде между этими пунктами не возникает противоречий.
Почему-то не идёт
Имеем домик addr:street=Гагаріна вулиця и отрезки улицы с name=Гагаріна вулиця, name:ru=Гагарина улица.
После конвертации русскоязычной карты с помощью osm2mp имеем в базе улицу “Гагарина улица” без домов вообще и улицу “Гагаріна вулиця” с домами.
Адрес на объект один, но объектов может быть несколько (точнее, сколько угодно). Дополнительные адреса навешиваются на (невидимые) надписи, которые также участвуют в адресном поиске.
Но это хорошо только для адресов зданий. POI так продублировать сложнее, их с одним адресом может быть много.
Имхо, все-таки собирать в отношение, аналогично 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: вроде бы больших накладных расходов такая схема не несет - достаточно одного члена отношения для простановки имен на нужном языке/языках при рендеринге/конвертации (или одного члена внешнего отношения для получения его списка имен).
Далеко не все веи входят в релейшны. Потому: предложенное - вандализм.
По хорошему нужно вводить в ОСМ новую сущность - объект, и освобождать узлы, пути и отношения от несвойственных им функций (в частности, от всех тегов).
Ну, если на выходе должен быть изначально “кривой” формат, в котором адрес не привязывается, а присваивается “домику”, то - да.
Но это проблема не ОСМ, а того кривого формата, в который конвертируются ОСМ данные.
Нет, нужно изначально проектировать структуру данных так, чтобы не было ограничения “один объект - один адрес”.
Ещё вариант обозначения множественных адресов вроде ул. Садовая, 7 / ул. Парковая, 22 :
На полигон домика вешаем тег addr:housenumber=7 и включаем его в релейшен ул. Садовой.
На контуре полигона домика вешаем точку с тегами building=yes, addr:housenumber=22 и включаем его в релейшен ул. Парковая.
Если в доме есть POI, размещаем их внутри полигона домика. При этом POI получают адрес из тегов полигона здания и релейшена улицы
(ул. Садовая, 7).
Так что если таксист с навигатором будет искать ул. Садовая, 7 - навигатор приведёт к домику.
если будет искать ул. Парковая, 22 - приведёт туда же.
А если будет искать по названию POI, то какая разница по какому из двух адресов он его найдёт, если это один и тот же дом.
andriano, ну ты, ей богу, как вчера родился… Все это уже по пятому кругу предлагается, обсасывается и отвергается…
:facepalm: видимо только тебе непонятно, что убирать name:* надо с тех веев, которые уже собраны в адресный street. На остальных пусть пока остается.
То, что ты описал и есть “смазка”, позволяющая впихнуть один билдинг в два разных стрита. Только накладные расходы в твоем случае выше. И профит выходит отрицательный.