Обсуждаем способы задать адресацию

В почтовом адресе шесть уровней: страна, регион, район, НП, улица, дом+квартира. Индекс не рассматриваю, поскольку у одной улицы может быть несколько индексов и у нескольких улиц может быть один индекс. Индекс это, фактически, код почтового отделения.

На начальном этапе достаточно определиться с уровнем объединяющим улицы с домами. Следующие этапы проще.

Я тоже за адресацию с помощью отношений. Предлагаю обсудить схему им. Котяры (вернее, им. Michael_D).

Ну, для начала, я не согласен, что уровней шесть - на мой взгляд их три :slight_smile:

Кроме того, объединить дома в релейшен улицы - это самое простое, что можно придумать.
Релейшены такие уже есть:
http://wiki.openstreetmap.org/wiki/Relations/Proposed/Street
http://wiki.openstreetmap.org/wiki/Relation:associatedStreet#Using_Relations_to_associate_house_and_street_.28optional.29
Так что тут особо и обсуждать нечего. А вот дальше-то что? :slight_smile:

Я хоть за какую-то единую схему адресации.

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

liosha, а какие три уровня? IMHO, даже если исключить страну, останется еще 5…
associatedStreet может включать только один вей в роли street, что не есть хорошо.

Основных уровня три:

  1. Страна
  2. Адрес населённого пункта внутри страны
  3. Адрес владения/дома внутри населённого пункта.
    можно добавить 4. Адрес внутри владения/дома, но это вроде уже не наш вопрос.

Все остальные “уровни” - это скорее группировки, их может и не быть, или у них может быть слишком много вариаций, чтобы их все учитывать в общей схеме.

релейшен address никем пока не забит, так что можно взять street за основу и расписать свои пожелания.

liosha, в принципе согласен. Можно обойтись и тремя уровнями. Хотя пять выглядело бы более естественно.
По пункту 4 я думал вписывать на точки подъездов тег rooms=xx-xxx. И если бы какой из конвертеров смог бы это использовать - указывал бы путь до подъезда. Но включать это в адресацию смысла нет никакого.

Мои пожелания к релейшену (дополнительно к тому, что есть в street):

  • возможность указать, в каком теге хранится адрес дома;
  • возможность указать, что тег name не должен использоваться для адресации.

Ну так я и призываю сначала определиться с уровнями и объектами адресации.
И только потом можно будет придумывать, как описывать и определять, например, принадлежность дома к нас. пункту и адрес дома внутри этого нас. пункта.

Мне кажется нет никакого смысла собирать прям все в релейшны а-ля РБ. Для площадных объектов вполне можно использовать попадание в этот площадной объект, нежели дублировать это попадание в бесполезных релейшнах. Ну а улицы, конечно надо собирать.

IMHO тремя уровнями иерархии не обойтись. Ведь надо, чтобы было все по человечески и легко проверяемо.
Возникают вопросы к “адрес НП внутри страны” - сколько НП будет в таком релейшене? Как его проверять? Как его поддерживать?
Аналогично и по “адрес владения/дома внутри НП” - сколько там домов внутри той же Москвы? Размер такого релейшена трудно представить…

Таки 5 уровней более приемлемо и контролируемо.
Дома собираются в улицы, улицы в НП, НП в районы/ГО, районы/ГО в регионы, регионы в страну. Объем одного релейшена на каждом уровне не сильно большой и вполне поддается проверке и модификации.
Разберу на своем доме (Челны - ГО, поэтому отнес к уровню 3):
(1) дом 2 по бульвару 60 лет Октября, (3) в г.Наб.Челны, (4) в РТ, (5) в России.
или
(1) дом 7/09 [в 7ом комплексе], (2) в Новом городе, (3) в г.Наб.Челны, (4) в РТ, (5) в России.
Такая схема позволит получать полный адрес объекта последовательным соединением полей name (кроме дома, где вместо name берется addr:housenumber/addr:streetnumber или еще какой number).

Во-первых, три уровня - это базовые уровни. Они есть всегда и без них не обойтись.
Иногда их достаточно трёх: Россия, г. Зеленоград, к100.
Иногда гораздо больше: в адрес могут при необходимости включаться и регион, и муниципальный район, и сельсовет, и городской район, и улицы, и микрорайоны, и ещё фиг знает что. Но всегда половина адреса будет описывать НП внутри страны, а другая половина - дом внутри НП.

Во-вторых, не надо смешивать адресацию (НП) с административным делением (ГО). Это совершенно разные и слабо связанные вещи.
И не надо упираться в релейшены, на них свет клином не сошёлся. Первична задача, а не средства. :slight_smile:

Ну вот вы сразу круто спорить взялись, с количеством уровней… Щас все испортите :slight_smile: Давайте сперва про улицы с домами договоримся?
Взять тот же street, добавить (хотя бы по варианту ikz) возможность включить один дом в два отношения…

А номера как указывать?

Я сначала хотел настроить бота на релейшены, но, во-первых, это сложнее, а во-вторых создает конфликт человек - робот.
Робот не совершенен, и поэтому позволять ему править за человеком рискованно. Настроить его на внесение/исправление техничесокй информации - вполне нормально.

Предполагается, что кладр-код периодически проверяется ботом на соответствие тэгу addr:street.

По правде говоря, не уловил, в чем принципиальная особенность. И в Москве таких домов предостаточно. Да хотя бы взять те же угловые здания.
Во всех этих случаях вариант адресации по кладр-коду реализуем. Можно н/р указывать

addr:street=Московский проспект
addr:housenumber=159
addr:street2=56-й комплекс
addr:housenumber2=14
addr:street3=Набережные Челны
addr:housenumber3=56/14
...

Это, конечно, пока только предложение.
2-й вариант предложил ViVish на форуме Покетгиса: обводить в таких случаях контуры зданий несколько раз и указывать для каждого контура свой адрес. ИМХО, довольно топорный вариант, но зато работает уже сейчас без переделки конвертеров.

Не хотеть такого. Это то же самое, что жестко захардкодить элементы массива в отдельные переменные. Думаю, многие программисты со мной согласятся. :3

liosha, ну я то взял за основу почтовый адрес, в котором идет (почти) именно такое разделение.

Еще один интересный момент. Кол-во уровней нужно только в том случае, если делать единственный, универсальный релейшен для любого уровня иерархии. Минус в том, что такой релейшен будет перегруженным, сложным для составления и валидации.

Есть предложение сделать несколько различных релейшенов для разных целей:
streetaddress для сбора домов в улицы; districtaddress для сбора в районы; settlementaddress для сбора в НП; regionaddress для региона. Момент в том, что disctrictaddress и settlementaddress можно включать друг в друга в любой последовательности, что дает любой уровень иерархии.

Фактически же, у нас есть уже несколько используемых релейшенов, которые легко можно приспособить под адресацию для уровней начиная с районов. Достаточно вспомнить, что вся Россия собрана в collection “Административное деление России”, в котором есть ссылки на все регионы. Такие же collection с районами есть по многим регионам, осталось в районах собрать collection с НП, а в НП - с улицами. Промежуточных collection можно собрать сколько угодно. Так что достаточно решить во что и как собирать улицы с домами :slight_smile:

ПыСы. А в collection можно добавить необязательный тег postal_name и при разворачивании цепочки у нас выстроится полный адрес.

В случае нашей схемы - на контуре дома оставляется только информация для рендерера (типа address:housenumber=107/38)
На отдельные адреса делаются релейшены, в которых пишется адрес и в который включается контур.
Дальше каждый из этих релейшенов идёт своим путём, как отдельный объект.

(про нижнюю часть иерархии: улица-дом)
Да, единственная накладка – это двойные адреса. На вскидку хочется тогда вытащить с дома номер как-то в само отношение street, а на доме оставить только buildig=yes. Но это слишком нереально))

“addr:street3, addr:housenumber3” – тоже весьма пугает…

Остаётся не очень прочувствованная мной Котярная схема с отношениями И на адреса, в которые (как-то?) включается контур дома. Котяра, с какой ролью сам билдинг включается в отношение адреса?

А она документирована где-нибудь? Интересно посмотреть :3

Если хочется иметь возможность двойной адресации то без родителя не обойтись. addr:street в купе с addr:housenumber это ни что иное как ссылка на родителя с атрибутом под каким номером ребенок входит в состав родителя.

Для того чтобы привязать дом к двум улицам (либо к улице и НП) под разными номерами в любом случае требуется отношение вида is_in с указанием номера. (addr:street с addr:housenumber - это лишь вариант реализации такого отношения).

Релейшен, который просто группирует все здания относящиеся к одной улице, новых возможностей по построению иерархии адресов не дает. В общем к чему я все это: если хочется использовать двойную аддресацию или пропускать уровни адресной иерархии то основных варианта два: релейшен is_in и addr:street2.

is_in мне как то поприятнее в силу его универсальности.