Я тут подумал…
Может, в русской ветке форума и в русской статье вики про адресацию расписать подробно. (Выложу, когда обсудим все детали).
Типа так:
Преамбула:
В Украине, как и в других бывших республиках СССР, есть много народу, которые хотят иметь карты на родном языке, и много другого народа, которые хотят карты на русском языке. Поэтому приходится указывать для каждой улицы, населённого пункта, района, области и всяких там POI сразу несколько вариантов названия на разных языках. Использовать транслитерацию названий не получается. Пример: “Радянська вулиця - Советская улица”, “Квітковий бульвар - Цветочный бульвар”.
При этом нужно, чтобы:
-
Система адресации нормально работала на любом языке. Чтобы не было на карте “Социалистическая улица”, а в базе адресного поиске она же “Соціалістична вулиця”, причём домики привязаны непонятно к какой из “улиц”.
-
Человек, который хочет иметь карту на нужном ему языке, мог просто указать язык в параметрах конвертации, и не иметь потом проблем с адресным поиском
Поэтому практически выведены такие правила адресации:
Тегирование домиков:
- теги addr:country, addr:city, addr:street, addr:region, addr:district и прочие addr:чегототам на домах НЕ ИСПОЛЬЗУЮТСЯ! Кроме addr:housenumber (или addr:housename, но он реально нигде не нужен)
Номера домов с буквами указываем без пробелов и дефисов. Буквы пишем в нижнем регистре кириллицей.
Например,
addr:housenumber=12а
- привязывание домиков к улицам, (а при адресации по микрорайонам - к микрорайонам) делается с помощью релейшенов (отношений) типа associatedStreet. (см. ниже)
- остальные теги домиков пишем как обычно (building=yes или что-то иное, этажность, amenity и др.)
- если один домик официально имеет несколько адресов, например, находится на пересечении улиц Иванова и Петрова и имеет два адреса: “Иванова улица, 1” и “Петрова улица, 14”, то на контуре домика пишем тот номер дома по тому адресу, который используется чаще. Потом ставим внутри контура точку, пишем на ней
building=yes и пишемномер дома по второму адресу.
Затем контур дома включаем в отношение для улицы Иванова, а точку с номером включаем в отношение для улицы Петрова.
Получаем:
-Полигон дома с тегами building=yes, addr:housenumber=1, включен в отношение улицы Иванова
-Точку с тегамиbuilding=yes, addr:housenumber=14, включен в отношение улицы Петрова
(надо уточнить, нужно ли на точку ставить building=yes. По логике, не нужно, но надо чтобы конвертер это понимал) - Если здание выстроено замкнутым кольцом, то его рисуем двумя линиями: внешний контур и внутренний контур. После чего выделяем оба контура и создаём мультиполигон (роль inner для внутреннего контура, роль outer для внешнего контура). В тегах мультиполигона пишем building=yes (или apartments, house или что там ещё), addr:housenumber=…, amenity=…. и др.
Потом мультиполигон здания включаем в отношение соответствующей улицы. - если один физический домик поделён на два логических домика с разными номерами, то рисуем это чудо как два домика с разными номерами. Можно контуры этих домиков слепить вместе. Пример: Харьков, Социалистическая улица, 68 и его “сиамский близнец” 68А.
- если рядом с домом имеется отдельно стоящий магазин или киоск с тем же номером, то (… пока не знаю как обозначить. Обсуждаем…)
Пример: Харьков, Полтавский Шлях, 148/2 (жилой дом и магазинчик недалеко от этого дома у входа в метро).
– Вопрос: Почему нельзя поставить два номера через дробь на контур дома и включить дом в два отношения?
– Ответ: Потому что тогда непонятно к какой улице относится какой номер дома.
– Вопрос: А почему так получается, что для одного домика нужно два объекта - контур и точка. Дом-то один.
– Ответ: Дом один, а адресов два. В реальности само наличие двойных (тройных, четверных) адресов - это извращение и маразм. Нечто вроде одного человека с двумя паспортами на разные имена и фамилии. Поэтому и в OSM это явление отображается извращёнными средствами и кажется маразмом.
Тегирование подъездов в многоэтажках
Актуально для домов с нестандартной нумерацией подъездов (справа налево), с нестандартным расположением подъездов (с разных сторон дома), для домов, где проехать к разным подъездам нужно с разных улиц (бывает, что проезд перед домом перегорожен шлагбаумом или бетонными блоками, чтобы не было сквозного проезда).
- на линии контура дома ставим точку в том месте, где расположен вход в подъезд
- на эту точку ставим теги entrance=yes, ref= номер подъезда (1,2,3 и т.д.) Например, ref=1
Конвертер osm2mp пока не поддерживает адресацию подъездов, но Liosha обещал добавить такую возможность.
Тегирование линий улиц
- Линии улицы подписываем по названию, используя теги name, name:ru, name:uk и другие name:xx
- В теге name пишем название улицы на украинском языке (кроме Крыма - там отдельный разговор, но в принципе, тоже на украинском).
- В тегах name:ru, name:uk и прочих name:xx пишем название улицы соответственно на русском, украинском и xx-ском языках
- Название улицы на английском языке (name:en), если оно получено простой транскрипцией, можете не писать.
Его потом автоматически проставит робот “_sevbot”.(Вопрос про робота спорный. Пожалуй, желательно, чтобы название на “таком-то” языке писал человек-носитель этого языка) - Статусную часть названия (слова вулиця, улица, Street, провулок, переулок, Lane и т.д.) пишем обязательно, указываем полностью, без сокращений и в конце названия.
Например:
name=Радянська вулиця
name:ru=Советская улица
name:uk=Радянська вулиця
Учтите, что для многих населённых пунктов существуют официальные перечни названий улиц на украинском и на русском языке. Желательно сверяться с ними.
– Вопрос: Почему не “ул. Советская” или “Советская ул.”?
– Ответ: Для однообразия. Это важно для компьютера. И так меньше ошибок.
– Вопрос: Почему надо указывать одно и то же название и в name, и в name:uk ?
– Ответ: Чтобы после “языковых войн” можно было бы всё-таки получить из базы название на украинском языке. Впрочем, в тех местах, где “войн правок” не происходит, можно ограничится украинским названием в name.
– Вопрос: А если я не знаю украинского названия?
– Ответ: Не знаешь - не пиши. Будет улица без тега name. Либо спроси на форуме. Либо узнай из официальных документов.
– Вопрос: А я хочу видеть на карте названия на русском языке. А на osm.org выдаёт украинские! Что делать?
– Ответ: Используйте рендер www.toolserver.org. Например, на http://openstreetmap.org.ua/ мы сделали для выбора языка кнопки name:uk, name:ru. Или ждите, когда подобный инструмент появится на главной странице osm.org (насколько я знаю, работы по этой теме ведутся).
Привязка домиков к улицам (или микрорайонам) с помощью релейшенов (отношений):
- выбираем мышкой все линии с тегом highway, относящиеся к данной улице, а также все домики, относящиеся к данной улице
- создаём отношение
В тегах отношения (вверху) указываем тип type=associatedStreet (можно использовать и тип street, но желательно, чтобы в пределах одного населённого пункта использовался только один типиспользовать тип street не рекомендуется).
В тегах отношения указываем названия улиц на разных языках. Так же, как это делали на линиях улиц.
name=Радянська вулиця
name:ru=Советская улица
name:uk=Радянська вулиця
Добавляем в отношение участников (выбранные нами линии улицы и домики).
После добавления прописываем для каждого участника отношения его роли.
Для линии улицы пишем роль street, а для домика роль house.
Если домики адресуются не по улицам (“Советская улица, 72”) а по микрорайонам ("Юбилейный микрорайон, 72), то в тегах отношения пишем названия микрорайона на разных языках.
name=Ювілейний мікрорайон
name:ru=Юбилейный микрорайон
name:uk=Ювілейний мікрорайон
При адресации по микрорайонам в релейшене отсутствуют учасники с ролью street. JOSM на это ругается, но ничего не поделать, пусть ругается.
Учтите, что в программе СитиГид адресация по микрорайонам всё равно не поддерживается. (уже вроде поддерживается)
Если вы, я надеюсь, используете редактор JOSM, то рекомендую установить плагин для работы с отношениями RelationToolbox.
-
Если в населённом пункте имеются улицы - “однофамильцы” в разных районах, то в теги отношений для таких улиц добавляем тег
addr:suburb с названием района города, в котором расположена эта улица. Не забудьте обозначить сам район точкой или полигоном с тегом place=suburb и названиями (name, name:ru, …). -
для одной улицы (микрорайона) создаём только одно отношение. Даже если улица имеет разрывы или состоит из нескольких линий.
Если кто создал два отношения для одной и той же улицы, то надо убедиться, что это одна и та же улица, а не разные одноимённые улицы в разных районах, после чего выделить всех членов второго отношения, добавить их в первое, не допуская дубли, после чего второе отношение удалить. Потом выделить всех членов первого отношения и проверить правильность.
– Вопрос: А зачем названия прописывать дважды: сначала на линиях улиц, а потом в релейшене?
– Ответ: Потому что конвертер не хочет брать названия улиц из тегов линий улиц. Поэтому названия на линиях улиц пишутся для того, чтобы их было видно на карте, а названия в тегах релейшена пишутся для базы адресного поиска.
– Вопрос: А нельзя ли написать на домике addr:street=Радянська вулиця, на линиях улицы написать name=Радянська вулиця, name:ru=Советская улица. А потом заставить конвертер искать улицу с названием “Радянська вулиця”, чтобы взять с неё русскоязычное название?
– Ответ: Нельзя! Конвертер этого не умеет и не будет. Все вопросы - к Liosha.
– Вопрос: А можно использовать теги типа addr:street:ru
– Ответ: Нет. Во-первых, это неудобно. Во-вторых, вызовет кучу возможных ошибок. Например, если на домике забыли написать название улицы на каком-то языке, то при создании карты на этом языке он выпадет из поиска.
– Вопрос: А почему не рекомендуется тип street?
– Ответ: Потому что 1) street не поддерживается системой nominatim 2)для однообразия и уменьшения путаницы, когда для одной и той же улицы вдруг окажется два релейшена разных типов 3) в плагине RelationToolbox в JOSM работать с associatedStreet удобнее (есть автозаполнялка ролей и name, правда name:ru придётся вручную прописать).
Привязка улицы к населённому пункту
- никаких тегов для привязки улицы, дома или микрорайона к городу (деревне) дописывать НЕ НУЖНО.
Необходимо и достаточно, чтобы линии улицы и все домики находились целиком ВНУТРИ границы населённого пункта.
– Вопрос:А если укажу?
– Ответ: Тогда в базе адресного поиска может появиться два города. Причём все дома будут в одном городе, а ваш домик в другом.
Тегирование населённых пунктов и привязка улиц к населённым пунктам:
- населённый пункт обозначается точкой в условном центре населённого пункта, а также границой территории населённого пункта.
При наличии в населённом пункте именованых улиц границу рисовать обязательно! - точка-центр и граница (помимо прочих тегов) должны иметь теги place и нзвания на разных языках
Например,
place=town
name=Іванівка
name:ru=Ивановка
name:uk=Іванівка
- Дописывать к названию статусную часть (слова “деревня”, “село”, “город”, с.м.т и т.д) не нужно.
В виде исключения допускается дописать статусную часть в случае, если имеется два населённых пункта в одном районе, но один из них село, а другой посёлок, и по другому их не различить
Например, в Харьковской области почти рядом есть две Одноробовки - село и посёлок:
place=village
name=Одноробівка
name:ru=Одноробовка
name:uk=Одноробовка
place=village
name=Одноробівка селище
name:ru=Одноробовка посёлок
name:uk=Одноробовка селище
- Если населённый пункт имеет “однофамильца” в другом районе, то можно в тегах обоим указать район (на украинском языке)
place=town
name=Борова
name:ru=Боровая
name:uk=Борова
addr:district=Борівський район
place=town
name=Борова
name:ru=Боровая
name:uk=Борова
addr:district=Зміївський район
(в будущих версиях В новой версии конвертора osm2mp планируется действует автоматическая привязка населённых пунктов к районам. Тогда Теперь указывание addr:district станет ненужным уже не требуется)
- Если населённый пункт имеет “однофамильца” в том же районе, его нужно привязать к территории местного совета (городского совета, поселкового совета, сельского совета).
Тут пока есть два варианта:
а) временный, но не очень правильный
На точке и на границе населённого понкта указать принадллежность к местному совету, например addr:subdistrict=Козіївська сільська рада
б) правильный, но пока трудно выполнимый
Обозначить границы территории местного совета, указать на отношении границы теги boundary=administrative, admin_level=8, name=Козіївська сільська рада, name:ru=Козиевский сельский совет. Убедиться, что территория населённого пункта целиком попадает в эти границы.
– Вопрос:А конвертер osm2mp это понимает?
– Ответ: Пока не знаю, надо проверить.
– Вопрос:А как узнать, что у населённого пункта есть “однофамильцы”?
– Ответ: После конвертации “польский” формат откройте файл карты области в GPSmapedit, запустите проверку карты. В списке ошибок увидите ошибки типа “Более чем один населённый пункт проиндексирован как “Ивановка”” со ссылками на эти населённые пункты.
– Вопрос:А как найти населённый пункт, который я вижу в GPSmapedit, на карте OSM?
– Ответ: В GPSmapedit щёлкните правой кнопкой мыши на объекте, выберите “Свойства” - “Комментарий”. В комментариях будет указан номер объекта по базе данных OSM. Откройте JOSM и загрузите объект с этим номером, а потом и прилегающую к нему часть карты.
Привязка населённых пунктов к области
Не требуется. Потому что:
- Обычно карта Украины нарезается по областям. И при нарезке название каждой области задаётся вручную.
- Конвертор osm2mp привязку районов и городов к области выполняет автоматически, если город или район геометрически находится внутри границ области.