Available with 3D Analyst license.
Overview
Building footprints are a common dataset, readily available to many users. Extruding these footprints is an easy way to create 3D buildings using either ArcGlobe or ArcScene. In many cases, height information may already be associated with these polygons. It may be represented as the number of floors per building, an absolute elevation that the footprint should be extruded to, or a relative height from the ground. Alternatively, it may be that you need to collect height information to construct your 3D buildings. If you have access to first-return lidar, you can establish either the elevation of each building's roof or the height of each building from the ground.
This guidebook demonstrates how to obtain roof elevation values and building heights for your building footprints from first-return lidar.
Creating a raster elevation surface from your lidar information
First, convert your lidar information into a raster elevation surface. The Creating raster DEMs and DSMs from large lidar point collections guidebook walks you through the process of creating a raster elevation surface. When creating your elevation surface, make sure to select a cell size that is usable for determining building elevation heights. The cells must be sized small enough that the height values along the edges of your footprint clearly define what is, and what is not, part of the building. Usually a cell size of 1 meter is small enough to effectively capture this.
Establishing the elevation of your building footprints from random points
Now that you have an elevation layer, you will need to determine the elevation of your building by sampling at random locations. The first step is to generate a set of random sample points for each building footprint. You can use the Create Random Points geoprocessing tool to generate a set of random sample points, constrained by your building footprints and referenced to their unique object identifiers. The number of points you create per building footprint is up to you. The more sample points you have, the more accurate your average height will be, but the longer your processing time is. When setting your minimum allowed distance between sample points, keep in mind that it should never be less than the size of the cells in the raster you are sampling. If it is smaller, you can end up resampling some cells.
The result is a new feature class containing groups of points, one group for each building. Note that each building may not have the total number of sample points you specified in the geoprocessing tool. The tool stops creating points when it cannot place a new point without violating your minimum allowed distance.
Elevation information, from your lidar-derived first-return raster elevation surface, can be added to each point as an attribute using the Add Surface Information geoprocessing tool.
You can now summarize the elevation information, to generate a single value for each building, using the Summary Statistics geoprocessing tool. The statistical method you use to summarize the elevation values depends on the type of result you require. For example:
- The MEAN statistical method will give you the average roof height of your buildings and provide the best result for visualization.
- The MAXIMUM statistical method sets roof heights to the highest sampled value and is the best result for use in line-of-sight analysis.
- The MINIMUM statistical method sets roof heights to the lowest sampled value and is the best result for use in skyline analysis.
Displaying your footprints as buildings is as simple as using extrusion as 3D symbology in ArcGlobe or ArcScene. Open the Layer Properties dialog box and first enable the Extrude features in the layer option. Use Expression Builder to select the attribute to extrude by. Next, when setting extrusion values, make sure the extrusion method is set to using it as a value that features are extruded to. A successful extrusion process requires that you add and specify an elevation surface for the footprints layers (Layer Properties > Elevation tab). If not, the footprints will be extruded from an elevation of 0, or sea level, to each building's roof elevation.
Determining the height of your building footprints
Now that you have elevation values representing the roof of your building footprints, you will want to calculate each building's height. To do so, you will need the elevation of each building on the ground. There are several different ways to determine the ground elevation of your building footprints. If you have access to a post processed, bare earth version of your lidar or a high-resolution bare earth digital elevation model, you can easily collect the elevation information for each building footprint. Use the same method discussed in the previous section to develop sample points for each building and gather elevation information from your bare earth raster surface elevation layer. Summarize those samples into a single value per building and join them back to your source data. Add a field to the original data and subtract your building's roof elevation from the bare earth elevation. The result will be a height value for each building.
Alternatively, you may want to pull surface elevation values from the same first-return lidar data you used to generate your initial building roof heights. Using a consistent data source removes the chance of introducing error from discrepancies between datasets. This requires generating a second set of sample points—as a ring around your building—and sampling to see what the ground elevation is at those points.
There are a few things you should consider before generating a ring of sample points around your building footprints. First, your sample points should be far enough from the building so that the values collected are not influenced by the building's height. This offset distance should be no less than the cell size of your lidar-derived raster elevation surface. In addition, care should be taken to prevent sample points for one building from overlapping an adjacent building. To create these sample points, do the following:
- Buffer your building footprints by a distance equal to the raster cell size of your surface elevation layer.
- Buffer your building footprints by twice the distance of the raster cell size of your surface elevation layer. Do not use the dissolve option on the Buffer geoprocessing tool, because you need one unique polygon for each footprint.
- Use the Erase geoprocessing tool to erase the buffer results in step 1 from the buffer results in step 2. The output should look like a set of rings around each building.
- Use the same method described in the previous section to develop a set of random points.
The finished product is a set of sample points, generated for each ring around a building. Note that, with this method, rings might overlap each other but never a building. Due to the first buffer, all rings are far enough away from buildings that sample points derived from those rings are not influenced by building roof elevations.
You can use the method described in the previous section to summarize ground elevation values for each building using these sample points. However, in this case, you should only use the MINIMUM statistical method. This is because your first-return lidar may have additional collected features such as vegetation, street furniture, and cars. Using the minimum collected values provides the best chance of correctly identifying the surface elevation for your building. Once you have summarized your ground elevation values, you can then subtract them from the previously collected roof elevation value to determine each building's height.
This field guide has shown you how to sample raster elevation information, derived from first-return lidar, to establish a building's roof elevation and relative height to ground.