User:Danidin9/Обозначение разновысотных зданий

From OpenStreetMap Wiki
Jump to navigation Jump to search

Проблема

В последнее время всё чаще в OSM стали отмечать здания, имеющие сложную форму, которую невозможно описать через однократное применение тегов building:levels=* и/или height=*. В результате сложилась практика, когда разновысотные здания разбивают на части, присваивая им теги building:levels=*, building:min_level=*, height и min_height=*. Получившиеся части в ряде случаев обозначают как building=*, а иногда - как building:part=yes. Однако в такой схеме есть ряд слабых мест:

  • разница между building=* и building:part=yes весьма расплывчата и каждым понимается по своему, некоторые против использования тега building:part=yes;
  • не ясно, какому полигону присваивать теги адреса и другие, общие для всего здания (напр. amenity);
  • не ясно, необходимо ли создавать новое отношение (или использовать одно из существующих) для группировки частей здания в единое целое, или это будет являться излишним усложнением.

Факты и следствия из них

  • Для обозначения здания используется полигон или мультиполигон с тегом building=*. Утверждение иной схемы (например,здание как отношение) будет означать необходимость переделки части уже существующих зданий. Даже если таких будет доли %, это всё равно составит многие тысячи правок, что нежелательно.
  • Для обозначения высоты здания используются теги building:levels=* и height=*, которые устанавливаются на один полигон/мультиполигон с тегом building=*. Эти теги широко распространены и схема их использования изменению не подлежит.
  • Теги building:part и building:min_level являются куда менее распространёнными и до сих пор официально не приняты. Поэтому считаю допустимым их изменение либо изменение схем их испрользования.

Предложение

Для обозначения зданий сложной формы пользоваться следующей схемой.

  • Если несколько строений, имеющих общий адрес, сблокированы, однако каждое из них могло бы полноценно функционировать и отдельно, то каждое из таких строений является зданием, обозначается тегом building=* и адресуется отдельно.
    • Примеры: многосекционный жилой дом с секциями разной этажности, жилой дом с пристроенным зданием магазина.
  • Если некая пристройка по смыслу неотделима от здания, однако отличается от него по высоте или этажности, она является частью здания, для её обозначения используется тег building:part=*
    • Примеры: надстройки в виде башен, пентхаусов; шпили; нижние части зданий, отличающиеся по форме; навесные переходы; балконы.
  • Контур любой части, принадлежащей зданию, должен быть внутри контура этого здания (возможно касание, но не пересечение).
  • Если здание имеет сложную форму, и в нём невозможно выделить основную часть, то все части здания обводятся по внешнему контуру; этому объекту присваивается тег building=* и теги адреса.
    • В таких случаях рекомендуется использовать мультиполигоны со составным outer для обозначения как здания, так и его частей.
  • Тег building=* используется совместно с тегами building:height=* (допустимо: height=*), building:levels=*
  • Тег building:part=* используется совместно с тегами height=* , min_height=* , building:part:levels=* , building:part:min_level=*
  • Если одна из частей здания совпадает формой контура со зданием в целом, но её высота/этажность отличается от высоты/этажности здания в целом, то создаётся один полигон (мультиполигон), с тегами и building=* и building:part=*.
  • При одновременном наличии у объекта тегов building=* и building:part=* значения его тегов building:height=* и building:levels=* игнорируются при создании рендера.