User:Aschilli/ProposedRoofLines

From OpenStreetMap Wiki
Jump to: navigation, search

Contents

Roof Lines

Roof lines could be traced in order to improve rendering of buildings. This could be used in 3D applications and isometric maps. Please note that this example is just a mockup and does not exist in the OSM database in this form. But the building footprint has been exported from OSM [1].

Motivation

Reconstructing roof shapes from meta information and attributes can become extremely difficult. Roof type and orientation could be easily tagged but require an algorithm for guessing the position and alignment of roof ridges, edges and angles. It could work for very simple rectangular building shapes. But not for complex footprints imported from cadastre data. As an alternative, roof lines could be traced directly from imagery

Approach

Roof lines are traced as ways and nodes and connected to the building via relations. There are two types of roof lines:

1. Ridges tagged as building:roof:ridge=yes. Ridges are strictly horizontal and the height is fixed by an additional attribute

2. Edges connecting the ridges with the cullis tagged as building:roof:edge=yes. Although they could be guessed it is better to include them in order to create closed rings for easier processing.

Tips could be defined as nodes tagged as building:roof:apex=yes. They are connected to the rest using roof:edge as well.

The areas between cullis, edges and ridges are expected to be coplanar so that they can be easily polygonized. Some buildings have little jutties and ledges along the edge. In this case the intersection of the roof surface with the wall must be approximated so that the roof surface remains flat. Im my example the ledge in the middle of the building would be modeled by adding a flat top. Alternatively, the roof surface could continue downwards cutting away a part of the wall.

Possible rendering in 3D


Measuring heights

There are mainly two tags available for estimating building heights, height=* and building:levels=*.

They measure the distance from ground to the roof top/ridge. What is missing is the height of the cullis. It can be either explicitly set by building:cullis:height=* or building:cullis:levels=*, or it can be calculated if other attributes are available, e.g. building:roof:height=* and building:roof:angle=*.

Deriving the cullis height from the ridge and the inclination of the roof surface (building:roof:angle=*) is possible, however this requires a very exact tracing of ridges and is error prone.

The Following combinations are possible:

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

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

building:levels=6, building:roof:angle=30. Height of cullis depends on distance between ridge and cullis edge.

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

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

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

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

height=18, building:roof:height=6. cullis:height = 18m - 6m = 12m.

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

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

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

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

Note that the result may be undefined if too many and conflicting attributes are present.

Using one the above tagging scheme and adding a few lines could work for the majority of small residential buildings. For more complex buildings with many ridges it is necessary to attach the exact height to the ways directly: building:roof:ridge=yes and building:ridge:height=*. If this attribute is present, it supersedes the attributes attached to the building. In the example on this page you can see one part on the right which is a bit lower than the main roof. Its ridge is tagged with a height value.

Use and Limitations

This form of roof tracing could be accomplished with current OSM editors. Some nodes may overlap with existing ways like the tip node of a gable. A very small displacement could help. In general, vertical structures and overhanging structures cannot be captured with this approach. For example, overhanging roof parts at the eaves are not possible, but this is a very small detail. Also, modeling post modern skyscapers like this one [2] could be difficult and 2D views in editors could become cluttered. But this one [3] could be possible.

Links

Personal tools
Namespaces
Variants
Actions
site
Toolbox