Proposed features/RU:Схема Карлсруэ

From OpenStreetMap Wiki
Jump to: navigation, search

+/-
Other languages:

English  •  Deutsch  •  Español  •  Suomi  •  Français  •  Italiano  •  Русский  • 

Tag:addr:housenumber
Status: Approved (active)
Proposed by: MarcusWolschon
Tagging: addr:housenumber=*
Applies to: node
Definition: Addresses
Rendered as: number
Draft start: 2008-04-19
RFC start: 2008-07-01
Vote start: 2008-12-01
Vote end: 2008-12-31
The Feature Page for the approved proposal addr:housenumber can be located at Key:addr.


Эта схема используется для обозначения (тегирования) адресации зданий (или их полных адресов). Вы можете посмотреть короткое видео демонстрирующее, как это можно сделать в упрощенной форме в Potlatch.

Схема Карлсруэ - одна из нескольких предложенных схем. В настоящее время она пользуется наибольшей популярностью, но вы сами вольны решать, использовать ее или нет. Эта схема описывает то, как создаем адресацию мы.

Housenumber-karlsruhe-de.png

Схема (как и все в OSM) может быть изменена любым человеком, после того, как тот наберется опыта в адресации зданий и интерпретировании помеченных данных.

Contents

Основы

В геолокации здания следуют за улицами. С улицей они связаны почтовым адресом, но также имеют свою собственную, независимую от улицы геолокацию.

В терминах OSM:

Теги

В общем случае используются следующие теги:

Тег Наличие Тип элемента Значения Описание
addr:housenumber или

addr:housename

требуется Node Area строка Номер дома. Может состоять не только из цифр. Если у какого-то объекта несколько номеров, разделите их символом ",". Пример: "12b,12c".

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

addr:street необязательно Node Area строка Основное название соответствующей улицы. Если оно не задано, программа присвоит имя ближайшей улицы, которую она обнаружит. Не всегда получается сделать это просто и быстро, поэтому считается, что лучше все же имя задать. (А еще лучший выбор - использовать отношение, которое описывается ниже.).
addr:state необязательно Node Area строка Для тех стран, в которых при описании адреса указывается штат, например, в США или Австралия. Для других стран не используется.
addr:postcode необязательно Node Area строка Почтовый индекс здания/адресуемой области. В разных странах почтовые индексы бывают разной длины и состоят из разных символов.
addr:city необязательно Node Area строка Наименование населенного пункта, указываемого в почтовом адресе.
addr:country необязательно Node Area двухбуквенный код Двух-буквенный код страны по стандарту ISO 3166-1 alpha-2 заглавными буквами. Необходим из-за того, что почтовый индекс уникален только в пределах страны. Например, код России - "RU", код Беларуси - "BY".
addr:full необязательно Node Area строка Полный почтовый адрес. Используется в дополнение к другим тегам, если с их помощью не удается описать адрес.
addr:interpolation требуется Way even/odd/all/alphabetic Метод, по которому должна быть создана адресная интерполяция домов на определенной улице. Смотрите ниже.

Эти теги хорошо работают в большинстве стран. Но из-за того, что встречаются и другие способы адресации, обойтись только этими тегами невозможно. Свободно используйте другие addr:* теги, необходимые для указания адресов в вашей местности. Пока вы согласны с простым предположением, что у зданий (или участков земли) есть адреса, вы должны уметь пользоваться какой-нибудь адресной схемой.

Простой дом рядом с линией

NodeNextToRoad.png

<node id="1">
  <tag k="addr:housenumber" v="10" />
  <tag k="addr:street" v="AStreet" /> 
</node>

Расположение линии определяется по ближайшей точке на ближайшей улице. (Смотри ниже, как можно сделать подсказку, какая улица на самом деле подразумевается.)

Для обозначения здания можно также использовать полигон (building=yes). Если же для этого требуется только одна точка, так как другие - для более полного описания - определить невозможно, то в качестве такой точки можно использовать центр полигона.

Использование интерполяции для обозначения нескольких домов вдоль линии

HouseNumbersInterpolation.png

Параллельно с линией, обозначающей улицу, создаются n, соединенных еще одной линией, точек. Единственное применение этой линии это описание адресной интерполяции между соединенными точками (и того, какая схема используется для интерполяции).

<node id="01" lat=... lon=...>
  <tag k="addr:housenumber" v="10" /> 
  <tag k="addr:street" v="AStreet" /> 
</node>
<node id="02" lat=... lon=...>
  <tag k="addr:housenumber" v="20" /> 
  <tag k="addr:street" v="AStreet" /> 
</node>
<node id="03" lat=... lon=...>
  <tag k="addr:housenumber" v="100" /> 
  <tag k="addr:street" v="AStreet" /> 
</node>
<way id="??">
  <node ref="01"/>
  <node ref="02"/>
  <node ref="03"/>
  <tag k="addr:interpolation" v="even" />
  <!-- see note below on putting street names here! -->
</way>

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

В случае, если один из домов пропущен (к примеру "12"), необходимо будет нарисовать две линии ("1-11" и "13-25")

Если номер дома присвоен единственной точке или полигону, а сам номер появился в результате интерполяции, программа должна изящно преобразовать интерполяцию в обычный тег, сигнализирующий о номере дома. Все такие конфликты рано или поздно должны быть исправлены.

Мы ожидаем, что все "линии интерполяции" создаются временно. В долгосрочной перспективе каждый дом в OSM должен быть обрисован контуром с пометкой о номере этого дома. Постепенно линии интерполяции должны полностью исчезнуть. Пока же они помогают быстро задавать нумерацию домов, и по сообщениям существуют данные, которые должны быть импортированы, и по отношению к которым также необходимо будет применить интерполяцию.

Если при интерполяции по схемам odd/even/all используется тег addr:housenumber не с целочисленным значением (например, "12б"), он будет игнорироваться. Дома, содержащие нецелочисленные значения, не могут использоваться как крайние точки для интерполяции по этим схемам.

Заметка: Некоторые составители карт используют тег "addr:street" для линий интерполяции, но не присваивают его отдельным точкам. Конечно, каждый может использовать те теги, какие захочет, но это не рекомендуется создателями Схемы Карлсруэ. Причина состоит в том, что линии интерполяции создаются временно; мы ожидаем, что однажды каждый дом будет помечен отдельно, а линии интерполяции будут просто удалены, и это не приведет к потере информации. Эти линии не должны оставаться надолго.

Нецелочисленная интерполяция

Вы можете также использовать метод "alphabetic" для интерполяции алфавитных символов в буквенной нумерации домов. Таким образом, если вам надо отметить дома от 7a до 7f, вы можете соединить их линией, помеченной тегом addr:interpolation=alphabetic. Вы не можете смешивать алфавитную интерполяцию с другими интерполяционными методами. Существует только один особый случай, в котором первый дом может иметь целочисленный номер, а остальные пронумерованы буквами латинского алфавита, начиная с A. Например, последовательность 25-25F означает, что дома пронумерованы так: 25 — 25A — 25B .. 25F.

Описание полного адреса (необязательно)

<node id="01" lat=... lon=...>
  <tag k="addr:housenumber" v="10" />
  <tag k="addr:postcode" v="832989" />
  <tag k="addr:full" v="First Street 10
                           832989 My Town
                           France" />
</node>

Описание подъездного пути (необязательно)

<relation id="??">
  <tag k="type" v="roadAccess" />
  <member type="node" ref="11" role="accessto" />
  <member type="node" ref="12" role="accessvia" />
  <!-- (можно использовать несколько тегов <member type="node" ref="11" role="accessvia" />
	для различных подъездных путей к месту с определенным адресом, например, к центрам для больших собраний) -->
  <member type="way" ref="???" role="accessfrom" /> <!-- optional -->
</relation>

Другими словами необходимо создать отношение типа "roadAccess" с тремя компонентами:

Использование отношения, чтобы связать дом и улицу (необязательно)

Чтобы установить связь между улицей и номером дома, вместо тега addr:street можно воспользоваться отношением. Это упрощает адресацию и, согласно оценке, сделанной программой, уменьшает количество ошибок. Однако если вам хочется повозиться, свободно используйте для описания следующего участка тег addr:street. Как кажется, в настоящее время большинство пользователей продолжают придерживаться именно этого метода.


Согласно мнению, которое изложил Marcus Wolschon, использование чего-то одного (тега addr:street или отношения associatedStreet) будет достаточно. (Смотри письмо "Re: Hausnummernmapping & Relationen (Karlsruher Schema)" от 2009-04-15 09:18:48 GMT).

Теги

Ключ Значение Комментарий
type associatedStreet (используйте значение "associatedStreet", разрешено также: "street")
name streetname необязательно, но рекомендуется

Члены

Линия/точка Роль Количество Комментарий
Way street одна или больше Соответствующая улица (можно использовать больше, чем одну линию, если все они являются частью одной и той же улицы, но по каким-то причинам были разделены при нанесении на карту)
Node Area house один или больше Один или больше пронумерованных домов (используйте значение "house", разрешено также: "addr:houselink", address )

Смотри Relations/Proposed/Street и Relations/Proposed/Collected_Ways!

Совет: если эти отношения пропущены, компьютер легко могжет добавить их во время препроцессинга определенной области для поиска.

Установить связь дома и улицы

<node id="11" lat=... lon=...>
  <tag k="addr:housenumber" v="10" /> 
</node>
<relation id="??">
  <tag k="type" v="associatedStreet" /> 
  <member type="node" ref="11" role="house" />
  <member type="way" ref="???" role="street" />
</relation>

Совет: компьютерные программы, которые используют навигацию по номерам домов, могут создать эти отношения во время предварительной обработки данных.

Установить связь между отношением building-полигон с улицей

HousePolygonNextToRoadWRel.png

<relation id="??">
  <tag k="type" v="associatedStreet" /> 
  <member type="node" ref="11" role="house" />
  <member type="way" ref="???" role="street" />
</relation>

Установить связь нескольких пронумерованных домов с улицей

<relation id="??">
  <tag k="type" v="associatedStreet" /> 
  <member type="way" ref="11" role="house" />
  <member type="way" ref="???" role="street" />
</relation>

Использование

Алгоритм

Возможная реализация может быть следующей:

  1. Загрузите в память линию
  2. Загрузите все точки и линии, связанные с исходной линией через отношение "type=associatedStreet"
  3. Если шаг 2 не дел желаемых результатов, загрузите все точки и линии с тегом "addr:housenumber" или "addr:interpolation" в определенной области вокруг улицы, для которых эта улица является наиболее близкой. [1]
  4. Если после 2 и 3 шагов нашлись точки или здания-полигоны, номера которых совпадает с тем, что мы ищем, выведите их и завршите алгоритм
  5. Просмотрите все объекты интерполяции "addr:interpolation", которые добавились после 2 и 3 шагов, и определите, содержат ли они номер дома, который необходимо найти.
  6. Определите диапазон номеров между двумя домами A и B, располагающихся на линии интерполяции, между которыми находится запрашиваемый дом X
  7. posNumeric = X / (B - A)
  8. Если сегмент состоит только из точек, помеченных как A и B, ваше расположение тривиально для интерполяции
  9. Если сегмент содержит дополнительные точки, определите ваше расположение, используя сумму длин сегментов и posNumeric.
  10. Определите ваше расположение на найденном сегменте, используя длину сегмента и суммы сегментов, которые идут до него.

Примечания

  1. Можно полностью удалить это во время препроцессинга. Соответствующие препроцессоры могут быть написаны для формата osm-xml или же такой процессор, вместо того, чтобы внедрить его в каждое приложение, может быть представлен, как новый Osmosis модуль, которым все смогут воспользоваться. Благодаря таким предварительным вычислениям запросы данных из определенной области больше не потребуются.

Реализацию можно найти в AdvancedAddressDBPlaceFinder для навигатора Traveling Salesman.

Personal tools
Namespaces
Variants
Actions
site
Toolbox