RU:Простые 3D здания

Эта страница описывает теги для основных 3D-свойств зданий. На странице F3DB приведены предложения по улучшенному 3Dтегированию.

Следующая методика тегирования является результатом 2nd 3D Workshop Garching, где большинство разработчиков 3D согласились с поддержкой унифицированного набора тегов в своих программах. По сути мы описываем объёмную форму здания, используя два типа полигонов:

  1. контур здания (building=*) — для описания области самого здания со сложной формой
  2. часть здания (building:part=*) — для описания частей здания, особенно тех, у которых отличается высота или другие характеристики.

Как отмечать на карте

Контур здания

Контур здания отражает область земной поверхности, на которой расположены все части здания. Под контуром здания в большинстве случаев следует подразумевать проекцию (footprint) здания. Контур здания рисуется как полигон (то есть замкнутая линия или мультиполигон), отмеченная тегом building=*.

Характеристики, относящиеся ко всему зданию (адрес, название, общая высота, обслуживающая компания и так далее), должны быть указаны на контуре здания.

Контур здания также предоставляет обратную совместимость для 2D-рендеров, таких как Mapnik, и пользователей данных, которым не требуется 3Dмоделирование. Если здание содержит хотя бы одну область, отмеченную тегом building:part=*, то контур здания не берётся в расчёт при 3Dрендеринге[1].

Хотя на практике этого никто не делает, лучше следить за тем, как делают большинство, и визуализировать в 3D также область, где нет building:part, в отличие от некоторых средств визуализации, которые делают неправильно, в результате чего целые города не отображаются правильно из-за процессов импорта, которые совершенно действительны и верны, переделка целых городов потребует много работы, поэтому лучше поддерживать оба способа работы.

Каждое здание должно иметь только один контур building=*, разные здания не должны пересекаться.

Части здания

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

Весь контур здания заполняется полигонами building:part=*, с тегами соответствующей им высоты и другими атрибутами. Эти полигоны могут перекрывать друг друга или могут быть разрознены, в зависимости от того, какое это здание. Тем не менее, в то время, как 2D полигоны могут (а часто и должны) перекрываться, избегайте перекрытия объёмов 3D частей, особенно если у этих объёмов имеются общие грани.

О тегах, которые обычно применяют к building:part=* для описаниях их характеристик, смотрите в следующем разделе статьи.

Полигоны с тегом building:part=* в основном предназначены для 3D-рендеринга. 2D-рендеры игнорируют теги атрибутов зданий, описанные в следующем разделе.

Совет: может быть сложно выбрать такие перекрывающиеся формы. В JOSM щелкните, удерживая клавишу Alt, чтобы циклически перемещаться по перекрывающимся объектам и делать нужный выбор.[2]

Отношение building

Если хотя бы одна часть здания нависает над поверхностью земли или если здание имеет сложную форму с множеством частей, то отношение с типом type=building может быть использовано для группировки вместе контура здания и всех его частей. В противном случае, нет необходимости в создании такого отношения, т.е. просто отрисуйте все части здания внутри контура здания как это описано выше.

Если отношение type=building создано, то все части здания должны быть перечислены в нём как участники отношения с ролью part. Контур здания должен быть участником отношения с ролью outline. Части здания могут быть расположены любым возможным способом (внутри, снаружи, пересекаясь, касаясь) относительно контура здания при наличии отношения type=building.

Если отношение type=building отсутствует, приложениям следует рассматривать все части здания внутри контура здания как части этого здания.

Не следует дублировать адресную информацию для отношения type=building, если она прописана для составных частей.

Смотрите также предложения ProposedRoofLines#Building_Relation.

Части сооружения

Если некоторые части реального здания имеют разные атрибуты (например, высоту), их можно смоделировать как дополнительные поверхности. Они отмечены building:part=yes.

Обратите внимание: как только в здании есть часть здания building:part=yes, контур здания больше не учитывается при объёмном рендеринге, если он также не отмечен как часть здания. Например, состоящий из трёх частей (зеленый, синий, бежевый):

building=* Контур здания
(4)height=* Общая высота
building:part=yes Части здания
(2)height=* Общая высота части здания
(1)roof:height=* Высота крыши
roof:shape=gabled Форма крыши (красная)
building:levels=* Этажи (без крыши)
roof:levels=* Высота чердака, выраженная в этажах (красная)

либо roof:height=* Высота чердака (красная)

building:part=yes Часть здания (церковная башня)
(4)height=* Общая высота части здания
(3)roof:height=* Высота крыши
roof:shape=pyramidal Форма крыши (коричневая)
building:levels=* Этажи (без крыши)
roof:levels=* Высота чердака, выраженная в этажах (коричневый)
другие свойства, например цвет, материал
Отношение type=building


Каждая часть принадлежит соответствующему building:part=*. Цветное разделение представлено для пояснения

Следующие теги можно применять как к контурам здания, так и к его частям.

Теги для контуров и частей зданий

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

Высота и этажность

Ключ Комментарий
height=* Расстояние от самой нижней точки касания здания с землёй до вершины крыши здания, исключая антенны, шпили и другое размещённое на крыше оборудование.
min_height=* Примерное расстояние от нижней точки части здания до земли.

Обратите внимание, что даже при использовании тега min_height тег height всё также отмечает расстояние от земли до верхней точки здания. Так, "мост" между зданиями высотой 3 метра, у которого нижний край находится в 10 метрах над землёй, отмечается тегами min_height=10, height=13.

building:levels=* Количество этажей здания над уровнем земли (без учёта этажей в крыше) для правильного текстурирования здания.

При тегировании только что созданных зданий, старайтесь указать значение height. building:levels=* указывайте как дополнение к высоте в метрах.

building:min_level=* Количество этажей, на которое данная часть здания поднята над землёй, аналогично min_height.

Крыша

Форма крыши

С помощью тега roof:shape=* можно охарактеризовать форму крыши, используя каталог известных типов крыш. Позже могут быть введены дополнительные формы крыш (Предложения по S3DB), включая улучшенные методы для ручного моделирования (например, ProposedRoofLines или части OSM-4D/Roof_table).

Рисунок
roof:shape flat skillion gabled half-hipped hipped pyramidal
Рисунок
roof:shape gambrel mansard dome onion round saltbox

Другие распространённые значения и проблемы

Значение Примечание
saltbox Проблематично из-за противоречивых определений и значений слова «saltbox» в этом контексте[3].
double_saltbox, quadruple_saltbox То же самое
sawtooth Крыши в заводском стиле
cone, conical Оба используются редко
side_hipped Половина четырехскатной крыши, а не полушатровая. Одна вертикальная остроконечная сторона, одна «бедро» с тремя наклонными поверхностями. Это обычное явление для двухквартирных домов, где все здание имеет шатровую крышу, но каждый дом имеет крышу с боковым скатом.
lean_to Непонятно, возможно должно быть skillion
shed Непонятно, возможно должно быть gabled или skillion
gabled_row Непонятно, иногда используется на пилообразной крыше, иногда на нескольких остроконечных террасах
crosspitched Крестообразная крыша с двумя фронтонами под углом 90 градусов. Двускатная крыша типа Cross

Прочие теги для крыш

Ключ Комментарий
roof:orientation=along/across Для крыш с коньком по умолчанию подразумевается, что конёк параллелен самой длинной стороне здания (roof:orientation=along), но с помощью этого тега можно указать его направление явно
roof:height=* Высота крыши в метрах
roof:angle=* В качество альтернативы тегу roof:height, высота крыши может быть указана явно через угол наклона её скатов (в градусах)
roof:levels=* Количество этажей внутри крыши, которые ещё не были учтены в building:levels
roof:direction=* Направление крыши от верхней части к низу (то есть в направлении, куда смотрит основная грань крыши). Смотрите иллюстрацию ниже. Значения согласно direction.

Однако учтите, что некоторые крыши (например у квадратных зданий) нельзя точно смоделировать описанными здесь простыми методами.

Предлагаемые теги

Некоторые крыши (например, квадратные здания) невозможно точно смоделировать с помощью простых методов, описанных на этой странице.

Дополнительные формы крыши предлагаются в Предложении по S3DB, включая расширенные подходы для ручного моделирования (например, ProposedRoofLines или OSM-4D/Roof table).

Цвет поверхности и материал

Ключ Комментарий
building:colour=* Цвет фасада здания. Смотрите возможные значения на странице colour=*
roof:colour=* Цвет крыши здания. Смотрите возможные значения на странице colour=*
building:material=* Материал отделки фасада здания
roof:material=* Материал кровли здания

Районы для демонстрации

Чтобы просмотреть многочисленные 3D-здания в большом масштабе, смотри примеры здесь: 3D Demo Areas

Чтобы просмотреть отдельные 3D-здания, смотри примеры здесь: Примеры 3D зданий

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

Редактировать эту таблицу

Расположение OpenStreetMap OSM2World OSMBuildings F4 Map OSM go Mapbox GL Tangram
Афи́ны N/A

Бре́мен

Грац

Грац 2

Грац 3

Чика́го

Цинцинна́ти

СьюдадГуаяна N/A

Ко́бург

Де́нвер

Эдмонтон N/A

Ха́ген

Хе́льсинки

Уэ́ска N/A

Джакарта, улица Судирман N/A

Ка́рлсруэ, Телекоммуникационная башня

Ко́упавогюр, Smárar N/A

Кёльнский собор

Кёльн, радиовышка

Кёльн, Райнаухафен

Кёльн, жилой район в Нойренфельде "Labor"

Кётен

Кётен 2

Краков N/A

Куала-Лумпур N/A

Лас-Ве́гас

Ле́йпциг

Ли́ма N/A

Ло́ндон

Львувек-Слёнски N/A

Москва́ N/A

Москва́ 2

с отношением type=building

N/A

Нью-Йо́рк

О́льденбург, Индиа́на

Пари́ж, Э́йфелева ба́шня N/A

Па́ссау

Фи́никс, Аризо́на

Потсдам

Рейсвейк

Ро́сток, Зюдштадт

Сан-Хосе́, Калифо́рния

Сан-Па́улу N/A

Швери́н

Сингапу́р N/A

Штадум

Си́ракьюс, Штат Нью-Йо́рк

То́кио, квартал НисиСиндзюку N/A

То́кио, Одайба N/A

Торо́нто N/A

Тро́нхейм N/A

Ватика́н N/A

Варша́ва N/A

Пекин

Запретный город

N/A

Университет Ольденбург

Шэньчжэнь

Центральный деловой район Шэньчжэня

N/A

Шанхай

Центральный деловой район Луцзяцзуй
В работе

N/A

Чунцин

Центральный деловой район Чаотяньмэнь
В работе

N/A

Ипенбург, Гаага

Район Waterwijk
В работе

Мака́ти N/A

Манила

Малате и Эрмита

N/A

Манила

Санта-Крус и Бинондо

N/A

Примеры моделей

Поддержка в программном обеспечении

Основная статья: 3D разработка

Множество карт и инструментов имеют поддержку схемы тегирования домов simple 3D. Среди них были: OSM-3D.org рендерер в 2009, OSM2World рендерер, Kendzi3D плагин для JOSM в 2011 и Nutiteq Android 3D Mapping SDK (теперь Carto Mobile SDK) и WikiMiniAtlas в 2012. OSMBuildings запустил 2.5D отображение в 2012, перейдя на отображение в 3D в 2015. В 2013 F4 Map стал первым рендерером, полностью поддерживающим схему тегирования домов simple 3D.

Инструменты редактирования

Название ПО Платформа Поддержка схемы Лицензия Заметки
Kendzi3d Windows, macOS, Linux да BSD Плагин JOSM
SketchOSM Windows частично Проприетарная Плагин  SketchUp в бета-версии

Картографические приложения

Название приложения Платформа Поддержка схемы Лицензия Заметки
Streets GL Web да MIT
OSM2World Windows, Linux, Macintosh частично LGPL В настоящее время реализуются оставшиеся функции для версии 0.2.0: slippymap (только Германия)
OSMBuildings Web частично BSD
F4 Map Web да Проприетарная Пример вебкарты с рендерингом и поддержкой сцен
OSM go Web частично GPL Только пирамидальная и купольная (плоская по умолчанию)
Mapbox Static API Web частично BSD Требуется бесплатная учетная запись Mapbox Studio.
OpenScienceMap Web частично LGPL Интерпретирует только теги height/min_height на стороне клиента. Слой S3DB использует сетки vtm, созданные на сервере (используя plpgsql с PostGIS и SFCGAL). Карта в браузере
CartoType Maps App Windows, Linux, Macintosh частично Проприетарная, но с неограниченным использованием Бесплатное демонстрационное приложение для проприетарной библиотеки CartoType. Версия CartoType GL поддерживает большинство форм крыш. Включает редактор таблиц стилей.
OSM-3D.org Web частично Не работает в браузере, если у вас не установлена более старая версия Java (≤1.6). Новая версия WebGL в разработке.
OSG-Maps Android частично Проприетарная
osmapa.pl Mapnik stylesheet Web частично Большинство типов крыш реализовано в формате 2.5D
WikiMiniAtlas Web частично GPL Только пирамидальные крыши
VR Map Web частично MPL Только высота и цвет
Cesium OSM Buildings Web Обновляется ежемесячно

Картографические фреймворки

Основная статья: Frameworks
Название ПО Платформа Язык Поддержка схемы Лицензия Заметки
Carto Mobile SDK Android, iOS, Windows Phone Java, Objective-C++, Swift, C# частично BSD Поддерживается большинство форм крыши; смотри документацию Carto
CartoType для Android Android Java частично Проприетарная Поддерживается большинство форм крыш. Стилями можно управлять с помощью таблиц стилей XML CartoType. Использует ускорение графики OpenGL ES. Можно изменять угол обзора, высоту, поле зрения и так далее.
CartoType для iOS iOS Objective C, Swift
CartoType для C++ Windows, Linux, OS X (Macintosh) C++
CartoType для .NET Windows C#, VB.NET и другие языки .NET
CartoType for Qt Qt для Windows, Mac (OS X) и Linux C++
Mapbox GL JS Web JavaScript частично BSD Параметры настройки отображения 3D-зданий включены в Спецификации стиля Mapbox. (Смотри сообщение от Mapbox с объявлением о поддержке GL JS.)
Mapbox Android SDK Android Java
Mapbox iOS SDK iOS Objective-C, Swift, Interface Builder
Mapbox macOS SDK macOS Objective-C, Swift, Interface Builder, AppleScript
Mapbox Qt SDK Qt C++, QML
Mapbox Unity SDK Cross-platform C# Apache
node-mapbox-gl-native Node.js JavaScript BSD
osm2x3d Web частично ? Смотрите также и
OSMBuildings Web JavaScript частично BSD Доступны версии 2.5D и 3D
Tangram Web JavaScript частично MIT Mapzen отображает 3D-здания в Tangram и других продуктах.
Tangram ES Android, iOS, Linux, macOS C++
VTM Android, iOS, Web Java частично LGPL Часть проекта mapsforge.

Инструменты разработки

Название ПО Платформа Поддержка схемы Лицензия Описание
blender-osm Windows, macOS, Linux частично GPL Загрузка и импорт OpenStreetMap и ландшафта одним щелчком мыши. Можно импортировать более 100 000 построек. Поддерживается большое количество форм крыши: плоская, двускатная, шатровая (только для четырехугольника), односкатная, полушатовая, круглая, пирамидальная, двускатная, купольная, луковичная и saltbox.
Mapbox Studio Web частично Проприетарная Включает редактор стиля Mapbox GL, который поддерживает высоту здания (или частей здания).
Maputnik Web частично MIT Редактор стилей Mapbox GL поддерживающий высоту здания (или частей здания).
Tangram Play Web частично MIT Редактор сцены Tangram, который поддерживает "выдавливаемые" здания с высотой на основе данных OSM.

Терминология

Изображения могут помочь Вам понять некоторые архитектурные термины:

Английский термин Русский термин
ridge конёк
hip наклонное ребро
valley разжелобок (ендова)
gable торцевая часть крыши
rake фронтонная доска
eave свес
soffit софит (обращённая к низу поверхность выносного карниза)
dormer чердачное окно

Предложения

  • F3DB — заброшенное предложение Full 3D buildings по улучшенному 3D-тегированию.

Смотрите также

Ссылки

  1. Это не относится к F4 Map, смотрите: Non-building:part parts of buildings are not rendered #3, Streets GL GitHub, сообщение от StrandedKitty, 3 мая 2023 года
  2. blog.mapbox.com
  3. https://lists.openstreetmap.org/pipermail/tagging/2020-February/thread.html#51110
This article is issued from Openstreetmap. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.