RU:Один объект — один элемент OSM
Один объект — один элемент OSM — это принцип хорошего стиля. Это означает, что один объект реального мира на местности должен быть отображен только с одним элементом OSM.
Объекты карты
Общие правила
Элемент OSM должен соответствовать только одному существующему на земле объекту. Примеры:
- Объект, состоящий из зданий на территории (например, школа), должен отображаться как полигон, очерчивающий территорию, с полигонами, обозначающими здания. Теги должны быть на всей территории, а не на зданиях, если только здания не отличаются друг от друга. Пользователи базы данных могут предположить, что здания на территории школы являются частью школы.
- Объект, являющийся зданием, форма и положение которого известны, должен быть полигоном с соответствующими тегами.
- Объект, положение которого известно, но форма которого либо неизвестна, либо не имеет значения, должен отображаться точкой с соответствующими тегами.
- Объект, состоящий из нескольких более мелких объектов, обычно лучше всего описывается отношением. Например, отношение:маршрут для пешеходного маршрута или линии общественного транспорта, которая следует по нескольким линиям дорог (highway=*) или железнодорожных путей (railway=*).
Примеры неудачных ситуаций
- Полигон с точкой внутри, оба с одинаковыми тегами, представляющими один и тот же объект реального мира.
- Полигон, представляющий территорию, с одним отмеченным полигоном, представляющим единственное здание на ней, оба отмечены одним и тем же тегом объекта.
- Замкнутая линия, отмеченная двумя тегами объектов, один из которых обычно является линейным объектом (таким, как barrier=hedge, а другой представляет полигон, такой как amenity=school). В этом случае неясно, должен ли барьер представлять собой полигон или линию, и для всех свойств неясно, к какому объекту они относятся. В таком случае вы можете рассмотреть возможность создания отдельного отношения для объекта amenity=school: сделайте замкнутую линию с ролью outer (внешней) участником отношения и перенесите "образовательные" теги с полигона в соответствующее отношение "отношение".
- Отображение отеля и ресторана внутри отеля как единого объекта, с tourism=hotel и amenity=restaurant на одной точке или полигоне. Это вызовет проблемы, как только будут добавлены какие‑либо более подробные теги, такие как opening_hours=*[1].
- Паб и банкомат поблизости как единая точка, с amenity=pub;atm, name=Lone Buffalo;Credit Bank и opening_hours=24/7.
- Магазин в здании, отображаемом как единый объект с building=* + shop=* + name=* (которое часто применяется только к POI). Этот вариант более спорный, и обычно он не рассматривается как явно неправильный, пока все свойства применяются ко всем объектам одновременно[2].
Ситуации, в которых несколько элементов OSM могут быть необходимы
Этот принцип не является абсолютным. С практической точки зрения некоторые объекты представлены более одного раза из‑за тонких семантических различий между представлениями точки/линии/ отношения объекта, либо потому, что разные типы потребителей данных имеют очень разные потребности, либо для сохранения обратной совместимости с существующими потребителями данных в течение переходного периода. Примеры включают, но не ограничиваются ими:
- Несколько объектов в одном месте: например, две школы, расположенные на одной территории. Если у школ есть отдельные здания, их можно обозначить на зданиях, а территорию можно отметить тегом landuse=education. Если несколько школ расположены в одном здании, обе должны быть обозначены тегом amenity=school (обычно точки).
- Многофункциональные здания: здание должно быть отмечено тегом building=*.
- Если у здания есть конкретное основное назначение, о котором можно сказать, что здание содержит другие объекты, основное назначение может быть отмечено на самом здании, а другие объекты могут быть отмечены на карте внутри периметра здания (например, ресторан внутри отеля, магазины внутри торгового центра).
- Если в здании нет одного основного объекта, который содержит остальные, все объекты должны быть отмечены на карте внутри полигона здания (например, здание, в котором находится несколько магазинов с отдельными входами).
- Объекты, отмеченные на карте внутри полигона здания, могут быть как точками, так и полигонами. При желании для уточнения планировки здания можно использовать схему Simple Indoor Tagging.
- Населённые пункты обычно обозначаются тегом place=village/town/city/… с такими тегами, как name=* на точке в центре деревни. Районы с жилой застройкой в пределах деревни следует рассматривать как отдельные объекты и обозначать отдельно тегом landuse=residential, как и другое землепользование landuse=*.
- Объектно‑ориентированное против функционально‑ориентированного обозначения: один и тот же объект может быть обозначен дважды, один раз по функциональным соображениям (например, маршрутизация) и один раз в объектно‑ориентированных целях (например, для отображения фактической формы и получения информации об объекте). Например, объекты, образующие маршрутные сети, такие как автомагистрали и водные пути, отображаются с использованием непрерывной линии обозначающей дорогу (highway=*) для маршрутизации (даже когда они физически прерываются, например, при переходе вброд через берег реки), в то время как их фактическая форма и топология на перекрёстках представлены на полигоне с тегом (area:highway=*), который, например, может показать, какова поверхность на пересечении двух дорог с разными поверхностями. Другими примерами являются мосты. Использование bridge=yes на автодорогах является примером функционального отображения, чтобы сообщить маршрутизатору о наличии моста (с дополнительной информацией, такой как максимальный вес транспортного средства). При объектно‑ориентированном отображении фактическая форма моста может быть обозначена тегом man_made=bridge, который может быть дополнен информацией, такой как название моста или викиданные. Один и тот же объект реального мира отображается дважды с разными целями.
- Реки обычно обозначают тегами natural=water + water=river для территории, покрытой водой, и одного или нескольких waterway=river на маршрутных линиях, которые следуют вдоль основного течения реки, с такими тегами, как name=* на объекте waterway=river.
- Длинные линейные объекты, такие как waterway=river и другие линейные теги, могут для практических целей быть разделены на несколько линий, если они очень длинные.
- Характеристики на линии, изменяющие значение тегов, таких как surface=*, lanes=*, turn:lanes=*, maxheight=* делают необходимым разделение линии дороги (highway=*). Это также относится к другим объектам, таким как реки (waterway=river). Реки необходимо разделить на части, где, например, изменится основное местное название (name=*).
- Когда наземный объект был разделён на несколько элементов в OpenStreetMap, их можно сгруппировать в один элемент, такой как Отношения:Водные потоки представляющий реку в целом
- Обратите внимание, что такие отношения не заменяют теги на линиях и во многих случаях принципиально не могут заменить её, например, когда одна река имеет разные доминирующие местные названия вдоль своего русла.
- Именованные природные территории, состоящие из множества территорий, такие как леса, водно‑болотные угодья и водохранилища. Некоторые картографы предпочитают повторять тег name=* для всех вложенных территорий, но это спорно и выходит из строя, если вложенная территория имеет собственное название.
Несколько тегов
Принцип один объект, один элемент OSM касается точек/отношений/линий, а не тегов.
Некоторые объекты могут иметь несколько тегов, описывающих одно и то же. Например, и водный waterway=riverbank и natural=water + water=river имеют совершенно одинаковое значение.
Такое двойное обозначение не противоречит этому конкретному правилу. В зависимости от ситуации это может быть приемлемо (поэтому следует сохранить оба тега), явно нежелательно или что‑то среднее. Например, contact:phone=* + phone=* с одинаковой информацией порадуют сторонников обеих версий тегов, и нет поддержки, позволяющей отказаться от любого из них. Но иногда один тег явно стандартный, и будет нормально удалить его дубликат. Например, в amenity=police + emoji_encoded_tag=:cop:, второй тег можно безопасно удалить, и его удаление действительно улучшило бы OpenStreetMap.
Повторяющиеся свойства
Обратите внимание, что в случае линейных объектов, таких как waterway=river, тег name=* не должен повторяться на полигонах реки (например, natural=water + water=river), он должен обозначаться только на линии реки.
То же самое относится к area:highway=* и highway=*: такие теги, как название (name=*), не должны повторяться.
Смотрите также
- Сохраняйте историю — аналогично этому руководству, но относится к истории, а не к тегам
- RU:Relation:multipolygon — отношение "мультиполигон" используется для картографирования сложных территорий; стандартный способ обозначения сложных территорий (например, школы, разделённой дорогой на 2 части, либо озеро с островом)
- Линия — о различиях между линейным и полигональным представлением объектов
- Отношение:место — группа объектов с общей идентичностью, но неоднородной геометрией; предлагается для объектов, состоящих из нескольких частей, которые не могут быть представлены в виде мультиполигона (например, ветроэлектростанция: объект, который состоит из несколько точек).
- building:part=* — часть здания, имеющая теги, отличные от других частей; способ обозначения сложных зданий