RU:ProposedRoofLines

From OpenStreetMap Wiki
Jump to navigation Jump to search


Линии крыши можно проследить, чтобы улучшить визуализацию зданий. Это можно использовать в 3D-приложениях и изометрических картах. Обратите внимание, что этот пример является всего лишь пример и не существует в базе данных OSM. Но контур здания был экспортирован из OSM[1].

Мотивация

Реконструкция форм крыши из метаинформации и атрибутов может стать чрезвычайно сложной задачей. Тип крыши и ориентация могут быть легко помечены, но для этого требуется алгоритм для угадывания положения и выравнивания хребтов, краев и углов крыши. Он может работать для очень простых прямоугольных форм здания. Но не для сложных форм, импортированных из кадастровых данных. В качестве альтернативы линии крыши можно проследить непосредственно из изображений

Подход

Линии крыши прослеживаются как пути и узлы и соединяются с зданием посредством отношений. Существует два типа линий крыши:

1. Отмеченные как roof:ridge=yes. строго горизонтальны, а высота фиксируется дополнительным атрибутом

2. Края, соединяющие хребты с карнизами, помеченными как roof:edge=yes. Хотя их можно было бы догадаться, их лучше включить, чтобы создать замкнутые кольца для облегчения обработки.

Советы можно определить как узлы, помеченные как roof:apex=yes. Они соединены с остальными, используя также крышу: край.

Зоны между карнизами, кромками и гребнями должны быть расположены в продольной плоскости, чтобы их можно было легко наносить на полигоны. Некоторые здания имеют маленькие эркеры и выступы вдоль края. В этом случае пересечение поверхности крыши со стеной должно быть приближенным таким образом, чтобы поверхность крыши оставалась ровной. Im мой пример выступ в середине здания будет смоделирован, добавив плоский верх. Кроме того, поверхность крыши может продолжаться вниз, отрезая часть стены.

Possible rendering in 3D

Измерительные высоты

Для оценки высот здания доступно в основном два тега, height=* and building:levels=*.

Они измеряют расстояние от земли до вершины/хребта крыши. Чего не хватает, так это высота основания крыши. Он может быть либо явным образом задан building:eaves:height=* or building:eaves:levels=*, или его можно рассчитать, если доступны другие атрибуты, например. roof:height=* и roof:angle=*.

Задает высоту основания крыши от гребня и наклона поверхности крыши (roof:angle=*) возможно, однако для этого требуется очень точная трассировка гребней и подвержена ошибкам.

Возможны следующие комбинации:

building:levels=6, building:eaves:levels=4. Assuming that one level is 3m high, we get height of ridges = 18m, height of roof base = 12m.

building:levels=6, building:eaves:height=12. Mixture of metric value and levels. Also possible.

building:levels=6, roof:angle=30. Height of roof base depends on distance between ridge and eaves edges.

building:levels=6, roof:height=6. eaves:height = 6*3m - 6m = 12m.

height=18, building:eaves:levels=4. Mixture of metric value and levels. Also possible.

height=18, building:eaves:height=12. Exact measurements.

height=18, roof:angle=30. Height of eaves depends on distance between ridge and eaves edge.

height=18, roof:height=6. eaves:height = 18m - 6m = 12m.

building:eaves:levels=4, roof:height=6. height = 4*3m + 6m.

building:eaves:levels=4, roof:angle=30. height depends on distance between ridge and eaves edge.

building:eaves:height=12, roof:height=6. height = 12m + 6m.

building:eaves:height=12, roof:angle=30. height depends on distance between ridge and eaves edge.

Обратите внимание, что результат может быть неопределенным, если присутствует слишком много и конфликтующих атрибутов.

Использование одного выше маркировки схеме и добавить несколько строк может работать для большинства небольших жилых зданий. Для более сложных зданий с множеством гребней необходимо прикрепить точную высоту к линиям непосредственно: roof:ridge=yes и building:ridge:height=*.Если этот атрибут присутствует, он заменяет атрибуты, прикрепленные к зданию. В примере на этой странице вы можете увидеть одну часть справа, которая немного ниже, чем основная крыша. Его хребет помечен значением высоты.

Построение отношения

Конструкции крыши должны быть соединены с зданиями, использующими отношения. В противном случае было бы трудно обнаружить, какие лини помечены как линии крыши, принадлежащие зданию. Следующая таблица основана на Relations/Proposed/Buildings предложение и Multipolygon, который часто используется для сложных зданий.

Tags

Key Value Описание
type building Отношение, объединяющее все узлы, пути и другие связи, принадлежащие одному зданию.

Members

Way, Node, Area or Relation Role Recurrence? Описание
полигон отношение outline zero or more The building footprint that is used for 2D renderings. If building parts are present, the outline member shall not be used for building the 3D model.
точка label zero or one This should be used to set the name of the building and to tag the whole building as a POI if desired. The idea behind this is, that this mark should tell the renderer where the name and maybe the symbol of the building should be displayed. That could be necessary if the building includes many details.

This single node could be used also to mark a building if the walls can not be drawn.

точка полигон entrance zero or more Entrances into the building. Big entrances could be areas, but mostly a single node is enough. They might have to be individually tagged as to what kind of entrance they are. There are existing some proposals for entrances (examples:Proposed features/entrance, Tag:railway=subway entrance), so tag it as you like.

Also entrances can be used to tag different adresses of a building. See section "Postal Address Information" above.

точка полигон отношение contains zero or more This should be used for POIs inside a building. If you have detailed information of such POI (separate entrance, different address or something like that), you should better build a separate building relation for each POI and than put this relations as members in right here.
точка отношение address zero or more This should be used for nodes and relations, who were only tagged with address informations. See section "Postal Address Information" above.
полигон отношение part one or more Building parts. These parts differ from each other in terms of height, roof-shape, colour, material, ... The part members may be closed ways tagged as building:part=yes or multipolygon relations.
линия ridge zero or more Ways which make up the roof ridges of a building or building part.
линия edge zero or more Ways which make up the roof edges of a building or building part.

Использование и ограничения

Эта форма трассировки крыши может быть выполнена с помощью текущих редакторов OSM. Некоторые узлы могут перекрываться с существующими способами, такими как вершинный узел фронтона. Это может помочь очень небольшое перемещение. В общем, вертикальные структуры и нависающие структуры не могут быть захвачены этим подходом. Например, нависающие части крыши на карнизах невозможны, но это очень маленькая деталь. Кроме того, моделирование современных небоскребов, подобных этому [2], может быть затруднено, и 2D-представления в редакторах могут стать загроможденными. Но этот [3] может быть возможен.

Учебное пособие по моделированию крыш в JOSM

Эти разделы предназначены для предоставления некоторых рекомендаций о том, как сложные конструкции крыши могут быть смоделированы с использованием популярного редактора JOSM. Хотя JOSM разработан как 2D-редактор, его можно использовать для добавления деталей крыши к контуру, но для этого требуется хорошее представление о пространственном воображении. JOSM предоставляет некоторые инструменты, такие как рисование контуров для формирования прямоугольных форм и выпрямления линий, которые весьма полезны для нашей задачи. Он также позволяет переключаться между различными источниками изображения и обнаружить, имеются ли высококачественные локальные изображения, что позволяет легко выбрать источник возможной отрисовки линий крыши. В следующем примере я использую то же здание, что и выше, и сосредоточимся на нижней левой части. Структура этого здания довольно сложная. В нем есть части крыша состоящая из частей, мансардных окон, выступов, некоторые части на ней, разной высоты крыши, круглые лестницы и т. д. Наиболее проблематично то, что высота основания крыши или карниза несовместима и что крыша простирается до нижних уровней на крыльях. Возможное решение для устранения этого состоит в том, чтобы разбить здание на несколько частей, чтобы можно было соответствующим образом назначить разметку здания: карниз: высота. Однако в этом примере я использую вертикальные конструкции крыши для моделирования деталей фасада, которые достигают выше заданной высоты карниза, так что 2D-рендеринг остается незатронутым.

Шаг 1: трассировка горизонтальных линий

ProposedRoofLines-JOSM-step0.png

Во-первых, проследить линии горизонта вдоль карнизов и хребтов. Внешняя линия карниза помечена как здание и уже должна содержать информацию о максимальной высоте крыши, типе крыши, архитектуре, фасаде и цвете крыши и т.д. Самый верхний roof:ridge=yes линия должна содержать значение высоты, измеряемое от нижней части здания (уровень земли). Вставьте дополнительный roof:ridge=yes линия на острый излом между нижней и верхней части крыши. Укажите точные значения высоты для всех линий хребта (единица измерения по умолчанию-метры). Используйте в соответствии JOSM инструмент, чтобы сделать эти линии прямоугольной, так что все углы либо 90 или 180 градусов.

Шаг 2: исправить искажения перспективы

ProposedRoofLines-JOSM-step1.png

Все линии, прорисованные с аэрофотоснимков, расположены неправильно, из-за искажений перспективы. В больших зданиях вы можете даже видеть, что вертикальные кромки имеют разные углы. Это потому, что воздушные снимки никогда не являются точно косой, даже если она была исправлена. Для простоты мы предполагаем, что по крайней мере пропорции структур на одном уровне высоты уже правильны. В нашем примере мы предполагаем, что крыша является осью симметричной вдоль внешних линий. Выберите все линии с одинаковым значением высоты и переместите их так, чтобы все расстояния, betweem их и на внешнее контуре, были екулизед (a ' = d ', b ' = c ', e ' = h ', f ' = g ').

ProposedRoofLines-JOSM-step2.png

Шаг 3: добавьте вертикальные части

ProposedRoofLines-JOSM-step3.png

The small side wing on the right side of the image has an additional full floor and the facade is higher. Thus the roof also starts at a higher level. The gap between the regular eaves and the bottom of the roof must be filled with a vertical roof part. Draw an additional line with 3 edges near the outer ring. This line represents the upper part of the vertical face. Assign the tag roof:ridge=yes to this line and add the correct height value. Then connect this line with nodes of the outer ring. Add tag roof:edge=yes to these connecting lines. Finally move each node so that the line lies exactly over the building eaves. Zoom in to get better precision.

Шаг 4: добавьте соединительные линии крыши

ProposedRoofLines-JOSM-step4.png

Теперь, когда у нас есть все горизонтальные линии, мы должны соединить их, чтобы сформировать многоугольники, которые могут быть отображены программным обеспечением 3D. Добавьте соединительные края между линиями гребня и наружными кольцами, соединяя узлы. Пометьте эти строки какroof:edge=yes. При необходимости выровняйте линии, используя соответствующие инструменты JOSM. Обратите внимание, что образующиеся таким образом многоугольники должны быть копланарными. Для 3D-рендеринга полигоны должны быть триангулированы, и если их вершины не лежат точно на плоскости, то это будет видно из-за слегка разных углов между треугольниками. Чтобы избежать таких эффектов, попробуйте избежать многоугольников с более чем четырьмя узлами. Также попробуйте сделать линии гребня параллельными друг другу.

Шаг 5: добавьте портал

ProposedRoofLines-JOSM-step5.png

На левой стороне здания есть портал с верхней платой. Сначала нарисуйте кольцо, в котором отображаются верхние края, и пометьте его как roof:ridge=yes и добавьте правильное значение высоты. Вам пока не нужно заботиться о точной фигуре. При рисовании важна только топология. Добавьте нижний край как roof:ridge=yes и используйте высоту карниза здания как значение высоты. Заполните вертикальные боковые части, добавив roof:edge=yes линий. Наконец, переместите режимы так, чтобы вершина стала прямоугольником, а левая сторона выровнена с внешним контуром здания.

Шаг 6: переместите крышу в конечную позицию

ProposedRoofLines-JOSM-step7.png

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

Ловушки

ProposedRoofLines-crack2.png

Правильное размещение мансарды может быть проблематичным, поскольку положение, в котором слуховое окно касается поверхности крыши, не может быть замечен в горизонтальной проекции трехмерной модели. Целесообразно знать высоту слухового аппарата и маркировать его явно, вместо того, чтобы полагаться на некоторые функции, чтобы извлечь его из формы крыши. Хотя кривая или линия в верхней части между мансардой и крышей могут быть прослежены от изображений, трудно зафиксировать точное положение на трехмерной плоскости, которая определяет фасад крыши, на котором мы хотим разместить слуховой аппарат. Либо слуховой проход проникает в крышу, либо возникает зазор. Хотя первый случай является непроблемным для 3D-рендеринга, следует избегать пробелов. Однако они могут быть обнаружены только в конечном 3D-рендеринге, потому что пока нет инструмента для размещения точек на наклонной поверхности. Чтобы исправить промежутки, немного переместите узлы в верхней части.

Поддержка инструмента

Следующие инструменты поддерживают это руководство по методам: