RU:Простые 3D здания
Эта страница описывает теги для основных 3D-свойств зданий. Таким образом, данная схема описания является ограниченной и не позволяет описать все характеристики. Вы можете сообщить о случаях внесения сложных изменений на странице обсуждения или изучить страницу F3DB (полное 3D‑здание) для получения дополнительных предложений по 3D‑картографированию.
Следующая методика тегирования является результатом 2nd 3D Workshop Garching, где большинство разработчиков 3D согласились с поддержкой унифицированного набора тегов в своих программах. По сути мы описываем объёмную форму здания, используя два типа полигонов:
- контур здания (building=*) — для описания области самого здания со сложной формой
- часть здания (building:part=*) — для описания частей здания, особенно тех, у которых отличается высота или другие характеристики.
Как отмечать на карте
Контур здания
Контур здания отражает область земной поверхности, на которой расположены все части здания. Под контуром здания в большинстве случаев следует подразумевать проекцию (footprint) здания. Контур здания рисуется как полигон (то есть замкнутая линия или мультиполигон), отмеченная тегом building=*.
Характеристики, относящиеся ко всему зданию (адрес, название, общая высота, обслуживающая компания и так далее), должны быть указаны на контуре этого здания. Здание должно быть только с одним тегом building=*, несколько зданий не должны пересекаться.
Контур здания также предоставляет обратную совместимость для 2D-рендеров, таких как Mapnik, и пользователей данных, которым не требуется 3D‑моделирование. Если здание содержит хотя бы одну область, отмеченную тегом building:part=*, то контур здания не берётся в расчёт при 3D‑рендеринге[1].
Хотя на практике этого никто не делает, лучше следить за тем, как делают большинство, и визуализировать в 3D также область, где нет building:part, в отличие от некоторых средств визуализации, которые делают неправильно, в результате чего целые города не отображаются правильно из-за процессов импорта, которые совершенно действительны и верны, переделка целых городов потребует много работы, поэтому лучше поддерживать оба способа работы.
Каждое здание должно иметь только один контур building=*, разные здания не должны пересекаться.
Части здания
Части здания с отличающимися свойствами (например высотой, цветом и тому подобное) обычно задаются в модели при помощи полигона, лежащего внутри контура здания, с тегом building:part=*. Значение у тега building:part=* обычно yes, но может быть любым значением из тега building=*.
Весь контур здания заполняется полигонами building:part=*, с тегами соответствующей им высоты и другими атрибутами. Эти полигоны могут перекрывать друг друга или могут быть разрознены, в зависимости от того, какое это здание. Тем не менее, в то время, как 2D полигоны могут (а часто и должны) перекрываться, избегайте перекрытия объёмов 3D частей, особенно если у этих объёмов имеются общие грани (например, building=yes, building:part=government и building:part=school, если в здании есть часть, используемая мэрией, и комната, используемая в качестве класса).
О тегах, которые обычно применяют к building:part=* для описаниях их характеристик, смотрите в следующем разделе статьи.
Смотрите следующий раздел о тегах зданий, которые обычно применяются к полигонам, отмеченным building:part=*.
Совет: может быть сложно выбрать такие перекрывающиеся формы. В 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, контур здания больше не учитывается при объёмном рендеринге, если он также не отмечен как часть здания. Например, состоящий из трёх частей (зеленый, синий, бежевый):
|
|
Следующие теги можно применять как к контурам здания, так и к его частям.
Теги для контуров и частей зданий
Следующие теги могут быть использованы как для контуров, так и для частей зданий.
Теги для зданий/частей зданий подразделяются на 3 категории:
- теги только для крыши здания (теги с префиксом roof:*=*)
- теги только для здания под крышей (фасадов) (теги с префиксом building:*=*
- теги для обоих (теги без префикса)
Теги для фасадов зданий и для крыш
Ключ | Комментарий |
---|---|
height=* | Расстояние от самой нижней точки касания здания с землёй до вершины крыши здания, исключая антенны, шпили и другое размещённое на крыше оборудование. Смотрите раздел ниже, чтобы лучше понять этот тег и использование терминов roof:height, building:levels и roof:levels. |
min_height=* | Расстояние от нижней точки части здания до земли. Обратите внимание, что даже при использовании тега min_height тег height всё также отмечает расстояние от земли до верхней точки здания. Так, "мост" между зданиями высотой 3 метра, у которого нижний край находится в 10 метрах над землёй, отмечается тегами min_height=10, height=13. |
Теги только для фасадов зданий под крышей
Ключ | Описание |
---|---|
building:levels=* | Количество этажей здания над уровнем земли (без учёта этажей в крыше). Позволяет вам текстурировать здание простым способом, поскольку некоторые 3D‑рендеры добавляют ряды окон для каждого этажа. Если вы отмечаете новые здания, старайтесь указать значение height. Старайтесь использовать building:levels=* только в дополнение к тегу высоты! Смотрите раздел ниже, чтобы лучше понять этот тег и использование значений height=*, roof:height=* и roof:levels=*. |
building:min_level=* | Количество этажей, на которое данная часть здания поднята над землёй, аналогично min_height. |
building:material=* | Материал отделки фасада здания. |
building:colour=* | Цвет фасада здания. Смотрите возможные значения на странице colour=*. |
Примечание: для высоты фасадов нет тега (не используйте building:height). Это значение автоматически рассчитывается как общая высота здания height=* минус roof:height=*.
Теги только для крыши здания
Форма крыши
Вы можете охарактеризовать форму крыши здания, используя каталог известных типов крыш.
Изображение | ||||
---|---|---|---|---|
roof:shape | flat | gabled | gabled_height_moved | skillion |
Изображение | ||||
---|---|---|---|---|
roof:shape | hipped | half-hipped | side_hipped | side_half-hipped |
Изображение | |||
---|---|---|---|
roof:shape | hipped-and-gabled | mansard | gambrel |
Изображение | ||||
---|---|---|---|---|
roof:shape | pyramidal | crosspitched | sawtooth | butterfly |
Изображение | ||||
---|---|---|---|---|
roof:shape | cone | dome | onion | round |
Другие распространённые значения
Значение | Описание |
---|---|
many | Означает, что у здание есть сразу несколько различных форм крыши. Использовать его не рекомендуется, поскольку оно бесполезно для рендеринга (крыши с этим значением отображаются как плоские). Вместо этого используйте building:part=* с собственными значениями roof:shape=*. Подробно описано в roof:shape=many. |
Другие теги крыши
Ключ | Описание |
---|---|
roof:height=* | Высота крыши, от верхней части фасадов до верха крыши. Смотрите раздел ниже, чтобы лучше понять этот тег и использование height=*, building:levels=* и roof:levels=*. |
roof:levels=* | Количество отдельных этажей только на крыше. Смотрите раздел ниже, чтобы лучше понять этот тег и использование height=*, building:levels=* и roof:levels=*. |
roof:angle=* | Альтернатива roof:height=*. Высоту крыши можно указать неявно, указав наклон сторон (в градусах). |
roof:direction=* | Направление от задней стороны крыши к передней (то есть направление, в котором обращена основная поверхность крыши). |
roof:orientation=along/across | Для крыш с гребнем предполагается, что гребень параллелен самой длинной стороне здания (roof:orientation=along), но он может быть явно отмечен этим тегом. |
roof:colour=* | (Доминирующий) цвет крыши. Полезно в сочетании с roof:material=*. |
roof:material=* | Самый внешний материал крыши. Полезно в сочетании с roof:colour=*. |
Использование height, roof:height, building:levels, roof:levels
В настоящее время существует несовместимость значений тегов *:levels=* в 2D и 3D представлениях.
В 2D они обозначают количество этажей части: 1 этаж, 2 этажа, …, 5 этажей, и так далее.
В 3D, когда теги высоты не используются, теги *:levels=* при 3D‑рендеринге преобразуются в смоделированные высоты. Каждый этаж преобразуется в рендеринг высотой 3 метра.
Например, building:levels=3, roof:levels=1, без тега height=*, без тега roof:height=* при 3D‑рендеринге будет преобразовано в здание высотой 12 метров с 9 метрами под крышей и 3 метрами для крыши.
Поэтому пользователи могут использовать десятичные числа для этажей, чтобы указать подходящую высоту. Например, в taginfo вы можете найти building:levels=1.5, roof:levels=0.5 или roof:levels=0.2! Но что означает "0,2 этажа" в 2D-описании здания?
Вместо того, чтобы использовать десятичные значения, добавьте высоту здания. Таким образом, вы получите совместимость между 2D и 3D информацией.
Пример:
- вместо building:levels=1.5, roof:levels=0.7, без тега height=*, без тега roof:height=*…
- …используйте building:levels=1, roof:levels=0, height=6.6, roof:height=2.1.
Пояснения:
- 1,5 уровня здания и 0,7 уровня крыши, вероятно, означают 1 полезный этаж для фасадов здания и отсутствие полезных этажей для крыши
- 1,5 + 0,7 = всего 2,2 этажа = высота всего здания 6,6 метра (используя по 3 метра на каждый этаж)
- 0,7 этажа крыши = высота крыши 2,1 метра
Примечания:
- Фактическая высота зданий, вероятно, неизвестна для 99% зданий в OSM. Значение 3 метра для этажа является значением по умолчанию, вероятно, очень близким к реальности для большинства этих зданий, и будет отображать хорошую 3D-визуализацию, соответствующую зданиям без меток высоты. Но, конечно, если вы знаете реальную высоту, используйте их!
- В некоторых случаях явно необходимы и то, и другое. Например, для спортивного зала значение уровней здания обычно равно единице (один этаж и один потолок), но высота превышает 3 метра, установленные по умолчанию, поэтому вам нужно добавить фактическую высоту (например, building:levels=1, height=6). Пожалуйста, не используйте ложное значение в 2 этажа для имитации здания высотой 6 метров, если в здании всего 1 потолок!
Этот раздел является вики-шаблоном, редактируйте здесь.
Терминология
Изображения могут помочь Вам понять некоторые архитектурные термины:
Английский термин | Русский термин |
---|---|
ridge | конёк |
hip | наклонное ребро |
valley | разжелобок (ендова) |
gable | торцевая часть крыши |
rake | фронтонная доска |
eave | свес |
soffit | софит (обращённая к низу поверхность выносного карниза) |
dormer | чердачное окно |
Районы для демонстрации
Чтобы просмотреть многочисленные 3D-здания в большом масштабе, смотри примеры здесь: 3D Demo Areas
Чтобы просмотреть отдельные 3D-здания, смотри примеры здесь: Примеры 3D зданий
Чтобы облегчить применение описанных на этой странице тегов, можно ознакомиться с примерами их использования.
Для этого мы начали добавлять детали прямо на карту в следующих районах:
Расположение | OpenStreetMap | OSM2World | Streets GL | 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 |
Смотрите также эти models|примеры моделей
Поддержка в программном обеспечении
- Основная статья: 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 в бета-версии |
Картографические приложения
Название приложения | Платформа | Поддержка схемы | Лицензия | Заметки |
---|---|---|---|---|
CartoType Maps App | Windows, Linux, Macintosh | частично | Проприетарная, но с неограниченным использованием | Бесплатное демонстрационное приложение для проприетарной библиотеки CartoType. Версия CartoType GL поддерживает большинство форм крыш. Включает редактор таблиц стилей. |
Cesium OSM Buildings | Web | частично | Обновляется ежемесячно | |
F4 Map | Web | да | Проприетарная | Пример веб‑карты с рендерингом и поддержкой сцен |
Mapbox Static API | Web | частично | BSD | Требуется бесплатная учетная запись Mapbox Studio. |
OpenScienceMap | Web | частично | LGPL | Интерпретирует только теги height/min_height на стороне клиента. Слой S3DB использует сетки vtm, созданные на сервере (используя plpgsql с PostGIS и SFCGAL). Карта в браузере. |
Organic Maps | Android | частично | Проприетарная | Высота зданий отображается на основе тега высоты (если он установлен) или этажей. Крыши плоские. |
OSM2World | Windows, Linux, Macintosh | частично | LGPL | В настоящее время реализуются оставшиеся функции для версии 0.2.0: slippymap (только Германия) |
OSM-3D.org | Web | частично | Не работает в браузере, если у вас не установлена более старая версия Java (≤1.6). Новая версия WebGL в разработке. | |
osmapa.pl Mapnik stylesheet | Web | частично | Большинство типов крыш реализовано в формате 2.5D | |
OSMBuildings | Web | частично | BSD | |
OSM Building Viewer | Web | частично | BSD | Визуализирует отдельное здание на основе оперативных данных OSM. |
OSM go | Web | частично | GPL | Только пирамидальная и купольная (плоская по умолчанию) |
Streets GL | Web | да | MIT | Обновляется вручную. Не обновлялось с сентября 2023 года. |
VR Map | Web | частично | MPL | Только высота и цвет |
WikiMiniAtlas | Web | частично | GPL | Только пирамидальные крыши |
Картографические фреймворки
- Основная статья: Frameworks
Название ПО | Платформа | Язык | Поддержка схемы | Лицензия | Заметки |
---|---|---|---|---|---|
Carto Mobile SDK | Android, iOS, Windows Phone | Java, Objective-C++, Swift, C# | частично | BSD | Поддерживается большинство форм крыши; смотри документацию Carto |
CartoType для Android | Android | Java | частично | Проприетарная | Поддерживается большинство форм крыш. Стилями можно управлять с помощью таблиц стилей XML CartoType. Использует ускорение графики OpenGL ES. Можно изменять угол обзора, высоту, поле зрения и так далее. |
CartoType для C++ | Windows, Linux, OS X (Macintosh) | C++ | |||
CartoType для iOS | iOS | Objective C, Swift | |||
CartoType для .NET | Windows | C#, VB.NET и другие языки .NET | |||
CartoType for Qt | Qt для Windows, Mac (OS X) и Linux | C++ | |||
Mapbox Android SDK | Android | Java | частично | BSD | Параметры настройки отображения 3D-зданий включены в Спецификации стиля Mapbox. (Смотрите сообщение от Mapbox с объявлением о поддержке GL JS.) |
Mapbox GL JS | Web | JavaScript | |||
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 | частично | ? | Смотрите также [1] и [2] | |
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. |
Предложения
- F3DB — заброшенное предложение Full 3D buildings по улучшенному 3D-тегированию.
Смотрите также
- 3D Models Library — ЗD фонари библиотека
- 3D tagging
- DE:3D building/tunnel — туннель или проезд в здании
- JOSM/Plugins/Kendzi3D/Custom models/Singular building models — загрузка 3D моделей из блендера в OSM
- indoor=* — Ключ используется со схемой Simple Indoor Tagging
- Pl:Bridge3D — мосты
- Pl:Key:building:cullis:height — уровень желоба
- RU:3D
- building:part=* — часть здания, имеющая теги, отличные от других частей
- building:parts=* (не рекомендуемый) — способ, которым здание было "разделено" на части
- RU:OSM-4D
- RU:OSM-4D/3D_building — другие части зданий 3D
- RU:OSM-4D/Generic_textures
- RU:OSM-4D/Roof_table — крыши
- RU:Phototexturing
- RU:ProposedRoofLines — крыши предложение
- RU:Relation:building
- RU:Relations/Proposed/Buildings — предложение моделировании сложных зданий.
- RU:Roof modelling
- RU:Simple Indoor Tagging — внутренний маппинг
- Stairs modelling — лестницы
- Примеры мультиполигонов
- Template:Pl:Map Features:3D — дополнительные теги для 3D моделирования зданий
- building:architecture=* — архитектурный стиль
- windows=* — есть ли окна в здании или части здания
Ссылки
- ↑ Это не относится к F4 Map, смотрите: Non-building:part parts of buildings are not rendered #3, Streets GL GitHub, сообщение от StrandedKitty, 3 мая 2023 года
- ↑ blog.mapbox.com