User:Vovanium/Идея

From OpenStreetMap Wiki
Jump to navigation Jump to search

Идея

Отношение — основной элемент карты

Почему?

Сейчас с объектами на местности могут идентифицироваться точки (узлы), линии (полигоны). Это простой и понятный способ, но имеет серьёзные недостатки:

Одной геометрической фигуре может соответствовать только один объект.
За исключением, конечно, некоторых случаев, когда для обозначения объектов используются различные ключи. Проблема возникает тогда, когда объекты или их границы частично или полностью совпадают, например, границы различных естественных форм местности (лес—степь и т. п.) или форм землепользования. В этом случае часто приходится идти на ухищрения, например, рисовать линии по общим точкам (что усложняет редактирование), или с небольшим зазором (что неверно, т. к. пустого пространства на самом деле нет).
И наоборот, одному объекту может соответствовать только одна фигура.
Это создаёт неудобства во многих случаях: в случае, если объект имеет пустоты внутри, состоит из нескольких несвязных частей, или просто очень велик (из-за того, что в OSM существует ограничение на длину линии); в случае, когда части неравнозначны.
При делении объекта информация дублируется. Например, улицы часто состоят из нескольких сегментов линий, при этом каждый сегмент имеет свою копию названия, статуса, и т. п. Это создаёт трудности при работе с ними.
Для обхода этих проблем созданы отношения, идею которых и следует развить.

Что же делать?

Развитие идеи отношений в том, что отношение оказывается универсальным средством обозначения любых объектов, а геометрические фигуры — узлы и линии становятся их элементами. Всё, что до сих пор обозначалось тегами линий и узлов может точно также выразить тегами отношений. С одной стороны это выглядит усложнением, но на самом деле — упрощение: при анализе данных требуется работать только с одним типом (отношениями), а не как минимум тремя. А узлы и линии уже представляют лишь информацию о географическом положении.

Как?

1. Правило соответствия

Узел или линия с набором тегов приравнивается отношению с идентичными тегами и единственным безымянным членом, являющимся данным узлом или линией.

Это даёт нам работать над объектом одинаково, обозначенным одним узлом, линией или отношением multipolygon.

С другой стороны это требует несколько иного подхода к данным:

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

2. Развитие системы отношений

Реализации в виде отношений требуют многие виды объектов, вот лишь некоторые из них:

  • Дороги и улицы: сложные объекты, в них можно выделить множество логически связанных элементов: пути маршрутизации, границы, полосы, разделители и т. д.
  • Мосты.
  • Остановки, станции.
  • Здания.
Пример нового типа отношений: полоска

Полоска — весьма характерный и распространённый вид объекта: к ним относятся дороги, реки, мосты и многое другое. Теги:

  • type = strip — тип.
  • width = * ширина.

Роли:

  • side — боковая граница
    • left side — левая граница и
    • right side — правая граница (если различаются)
  • end — край (начало и конец).
    • front end — передний
    • back end — задний (если различаются)
  • midline — средняя линия: генерализация полосы в тонкую линию, если отсутствует, интерполируется из сторон.

3. Развитие геометрии

Линия приравнивается отношению с тегом shape=way, в котором вершины — безымянные члены.

Вводятся другие виды геометрических фигур:

  • окружность,
  • дуга,
  • сплайн,

и т. п. А также информация о построениях.