To create 3D buildings with detailed roof forms and accurate heights, you'll first need to know what those forms and heights are. One of the best ways to determine the heights of a large number of surfaces is with lidar, a laser scanning technology that can cover significant areas. After downloading the project data, you'll convert raw lidar data of the Portland neighborhood into a 3D point cloud (LAS) dataset that shows where light from the scanner struck objects, including building rooftops. Then, you'll convert the point cloud into raster datasets that show the elevation of the area.
Download and open the project
Before you begin, you'll download data supplied by the city of Portland, as well as geoprocessing tools and rule packages that you'll use throughout the workflow. You'll also open an ArcGIS Pro task to take you through the workflow step-by-step.
- Download the Roof_Form_Extraction.zip compressed folder.
- Locate the downloaded file on your computer.
Depending on your web browser, you may be prompted to choose where to download the file. Most browsers download to your computer's Downloads folder by default.
- Right-click the file and extract it to a location where you can easily find it, such as your Documents folder.
- Open the folder.
The folder contains a lot of data, including an ArcGIS Pro project file (.aprx) called Roof Form Extraction. Before you check out the data, you'll open the project file.
- If you have ArcGIS Pro installed on your machine, double-click Roof Form Extraction (without underscores) to open the project file. If prompted, sign in using your licensed ArcGIS account.
If you don't have ArcGIS Pro or an ArcGIS account, you can sign up for an ArcGIS free trial.
The project opens.
The project contains a Scene view of the area of Portland relevant to your study. The scene includes 2D building footprints that give an idea of the types of land use in the area: smaller residential neighborhoods to the east, larger industrial or commercial districts closer to the river. Next, you'll look at the rest of the data you downloaded.
- In the Catalog pane, expand the Folders folder and the Roof_Form_Extraction folder.
The other folders you downloaded are connected to, and can be accessed within, the Roof Form Extraction project. The Index folder is an automatically-generated folder that contains metadata about the project, but the other folders contain data, files, and tools.
- Expand the Layer_Files and Lidar folders. Expand the City_Data geodatabase and the Roof_Form_Extraction toolbox.
Most of these files will be explained in more detail later. The layer files and rule packages allow you to quickly apply preconfigured symbology to a layer. The City_Data geodatabase contains the building footprints currently displayed in the scene and is the default output location for the data you create. The Roof_Form_Extraction toolbox contains two script tools, while the Lidar folder contains lidar data in the .las format. To guide you through the steps of this workflow, you'll use an ArcGIS Pro task.
- In the Catalog pane, expand the Tasks folder.
- Double-click the Create Level of Detail 2 Buildings task to open it.
The task opens in a new pane. It contains several task groups for specific parts of the workflow.
Create a LAS point cloud dataset
You'll assemble the four lidar data files into a single LAS dataset, which can be displayed within ArcGIS Pro as a group of 3D points called a point cloud. A lidar scanner fires laser light at a target and determines the target's location in space based on how far the light travels before reflecting off the object. A point cloud shows the individual points where the laser struck an object, allowing you to visualize and analyze the location of surfaces in 3D. The individual lidar files can also be displayed in ArcGIS Pro, but you would have to repeat the same steps for each of the four files to display them all. Creating a LAS dataset that contains the data from all four files will save time.
- In the Tasks pane, expand the Create Elevation Layers task group.
The task group contains multiple tasks, which are arranged sequentially but can be opened in any order.
- Double-click the Create a LAS dataset task.
The task opens the Create LAS Dataset geoprocessing tool in the Tasks pane. Tasks allow you to access tools and buttons as part of a continuous workflow, without having to search the Geoprocessing pane or the ribbon to find them. The task gives a simplified list of instructions for using the tool in case you want to follow the workflow without this lesson's instruction.
- For Input Files, click the Browse button.
The Input Files window opens, which allows you to browse files and folders both on your computer and on ArcGIS Online.
- Browse to your project folder and double-click the Lidar folder. Hold Ctrl and click all four files to select them (alternatively, hold Shift and click the first and last file). Then, click OK.
- For Output LAS Dataset, confirm that the output location is the Roof_Form_Extraction folder and change the output name to Portland_LAS.lasd.
You have the option to add surface constraints, or a layer with height attribute data that will limit the extent of the LAS dataset. In this scenario, the lidar data was captured on behalf of the Portland municipal government specifically for the study area, so no constraints are necessary.
Next, you'll set the coordinate system. The coordinate system must correspond with the one used in the input files. The easiest way to learn the coordinate system of the input files is to ask the original compiler of the data. You're working closely with the Portland municipal government in this scenario, so you know that the lidar data uses the NAD 1983 HARN StatePlane Oregon North FIPS 3601 (Intl Feet) coordinate system.
If coordinate system information for your lidar dataset is unavailable, you can determine it using 3D Sample Tools available from ArcGIS Online.
- For Coordinate System, click the Select coordinate system button.
The Coordinate System window opens, with a list of all available coordinate systems.
- In the search box, type NAD 1983 HARN StatePlane Oregon North and press Enter.
- Expand Projected coordinate system, State Plane, and NAD 1983 HARN (Intl Feet). Click the coordinate system.
- In the Coordinate System window, click OK. In the Tasks pane, click Finish to run the tool.
When the tool finishes, the LAS point cloud dataset is added to the scene. The Tasks pane returns to the list of tasks.
- Navigate the scene to explore the dataset. Click and drag the mouse wheel to tilt and rotate the scene.
The point cloud contains millions of points, symbolized so that points with higher elevations are red, and points with lower elevations are blue. You'll use this dataset to create multiple elevation rasters, but first you'll check to make sure the dataset is free of outliers.
Check for outliers
In lidar data, birds, planes, or other aerial objects may be registered by the scanner and added to the dataset as part of the point cloud, even though these objects are far above the surveyed terrain. Outliers like these may skew analysis results, so you'll check for them and remove them if they exist.
- In the Tasks pane, double-click the Locate and reclassify outliers task.
This task has two parts, called steps (you can check which step you are on and how many steps there are in total by looking at the progress bar at the bottom of the Tasks pane). The first step opens the Locate Outliers tool, which finds points in a LAS dataset that exceed a user-defined maximum or minimum height. The outlier points will be added to a new point feature class.
- For Input Surface, choose the Portland_LAS dataset. For Output Feature Class, confirm that the output location is the City_Data geodatabase and change the output name to Portland_Outliers.
Next, you'll set the Z (height) minimum and maximum. Points below the minimum or above the maximum will be considered outliers. You'll investigate the data to determine appropriate values to use.
- If necessary, open the Contents pane.
If the Contents pane isn't open, you can open it from the ribbon (on the View tab, in the Windows group, click Contents).
- In the 3D Layers group, expand the Portland_LAS.lasd layer.
The symbology for the layer shows the highest and lowest values in the dataset: 253.74 and -69.52. Because your coordinate system uses feet, these values are also in feet. Do these values represent outliers, or are they close enough to the rest of the data? You'll click a few high and low points on the scene to get an idea. From a rough visual estimate, the highest values seem to be the bright red buildings west of the river, while the lowest values seem to be the dark blue points in the river itself.
- Navigate to the tall buildings west of the river. Tilt and rotate the scene (click and drag the mouse wheel) to compare the building heights.
Many of these buildings represent condominium housing. The tallest seems to be the one in the middle, closest to the river.
- Click a bright red point at the top of the tallest building's rooftop.
A pop-up opens with information about the point you clicked, including its elevation. The point you clicked probably has an elevation of approximately 200 feet, nearly 50 feet lower than the maximum value in the dataset (it may vary slightly from the value in the above image).
- Close the pop-up. Click any of the dark points in the river.
The point's elevation will likely be close to 10 feet, while the minimum value in the data is -69 feet. While discrepancies exist for both the maximum and minimum points in the data, the difference is less than 100 feet in both directions. These points probably aren't significant outliers that will skew your data, but you'll run the Locate Outliers tool just in case. (To skew your data, the points would typically need to be hundreds or even thousands of feet above or below the rest of the data.)
- Close the pop-up and return to the Tasks pane.
- For the Absolute Z Minimum, type 0. For the Absolute Z Maximum, type 215.
These values give about a 10 foot buffer from the values you saw in the data.
- Click Run.
The tool runs, and a point feature class is added to the scene; however, the points are difficult to see with the LAS dataset turned on.
- Return to the Contents pane and uncheck the Portland_LAS.lasd layer to turn it off. Right-click the Portland_Outliers layer and choose Zoom To Layer.
The output layer symbology is random and may be different than in the example images.
The result layer shows points with Z values above the maximum and below the minimum. Some are stray points near the bridge, while a large cluster of points is on the east side of the river. The stray points are probably birds or other airborne objects. Most of the outliers are far from buildings, so they won't affect the roof forms of the structures.
- Navigate to the cluster of points to the east of the river.
Although difficult to tell, these values correspond to a large pit. Because the minimum outliers are part of the ground and most of the maximum outliers are far from any structures, removing the outliers from the LAS dataset would not affect the accuracy of the roof forms. You'll skip the rest of the Locate and reclassify outliers task.
- In the Contents pane, right-click the Portland_Outliers layer and click Remove. Check the Portland_LAS.lasd layer to turn it back on.
- Return to the Tasks pane.
When you ran the Locate Outliers tool, you automatically proceeded to the next step of the task: Reclassify outliers. This step uses the Set LAS Class Codes Using Features tool, which reclassifies the outlier points in the LAS dataset so that they can be easily removed. It requires only the LAS dataset, the outlier feature class, and the new classification for the outlier points. The step instruction recommends that the outliers be reclassified to Class 18, which is the standard classification within the LAS format reserved for errors or outliers (you'll learn more about LAS dataset classifications in the next section). You aren't going to remove any outliers, so you don't need to run this tool.
You can learn more about each tool by pointing to the Help icon (blue question mark) above the tool's parameters. A ScreenTip appears with the tool's name and a brief description. Clicking the icon opens the help topic for the tool.
- At the top of the Tasks pane, click the Back button.
A Tasks message opens. It asks if you want to interrupt the current task.
- Click Yes.
The Tasks pane returns to the list of tasks.
Create a Digital Terrain Model
Next, you'll create the first of three digital elevation models that will be used as input layers for the Extract Roof Form tool later in the workflow. The elevation models will show the elevation data of the LAS dataset in a raster format. The first one you'll create is a Digital Terrain Model (DTM), which shows only the elevation of the ground, without buildings or other features.
- In the Tasks pane, double-click the Create a Digital Terrain Model task.
Like the previous task, this task has two steps. In the first step, you'll filter the LAS dataset to show only points that represent the ground. Instead of running a geoprocessing tool, this step runs a command that opens the Layer Properties window where you can filter the LAS dataset.
- In the Contents pane, click the Portland_LAS.lasd layer to select it.
- In the Tasks pane, click Run.
The Layer Properties window for the selected layer opens to the LAS Filter tab. Among other things, this tab lists the Classification Codes of the LAS dataset. This dataset has only two codes: 1 Unassigned and 2 Ground. All of the points in the dataset are classified as either one or the other. It's possible, however, to set additional classification codes. For instance, if you ran the Set LAS Class Codes Using Features tool in the previous section, your outliers would be set to Class 18, a class used for points with anomalous elevations. Other codes are used to classify water, vegetation, roads, or similar types of features.
The class codes listed are based on the LAS format specifications provided by the American Society for Photogrammetry and Remote Sensing. For more information, see the list of classification codes.
- For Classification Codes, uncheck the 1 Unassigned box.
- Click OK.
Now the scene only shows lidar points that depict ground surface. The task moves to the next step. This step uses the LAS Dataset To Raster tool, which creates a raster using values from the lidar points referred to by the LAS dataset.
- For Input LAS Dataset, choose the Portland_LAS.lasd layer. For Output Raster, confirm that the output location is the City_Data geodatabase and change the output name to Portland_DTM.
The Value field parameter indicates which field in the lidar data will be used to create the output raster. You want to create an elevation surface, so you'll accept the default.
Next, you'll set the interpolation type, or the algorithm used to determine the values of each individual pixel or cell in the output raster dataset. The Binning interpolation type determines cell values based on LAS points within the cell's extent, whereas the Triangulation interpolation type determines cell values based on a Triangulated Irregular Network (TIN) surface created using the points. Binning is a more efficient method for large areas with dense data, while triangulation is better for areas with low or varying densities of points. Because this area is fairly small, with relatively dense point spacing, either method would be appropriate. You'll use triangulation for sharper detail in areas with large changes in elevation, such as building edges.
- For Interpolation Type, choose Triangulation. Leave Interpolation Method and Thinning Type unchanged.
Lastly, you'll set the sampling value, which affects the resolution of the raster. In this case, you'll set it to determine the cell size in the raster dataset. Smaller cells create more detailed and accurate datasets, but if the cell size is too small, processing time will increase. A cell size of 1 foot will be sufficient to extract accurate roof forms.
- Set Sampling Value to 1. Leave Z Factor unchanged.
- Click Finish.
The tool runs, and the DTM is added to the scene.
- In the Contents pane, turn off the Portland_LAS and Portland_Buildings layers.
The new raster layer shows only the ground elevation. Darker areas have lower elevations, while lighter areas have higher ones. The locations of buildings still show up faintly because the tool estimates the location of the ground based on surrounding points.
- Turn the LAS dataset and the building footprints back on.
Create a Digital Surface Model
You created a raster layer showing only ground elevation. Next, you'll create a Digital Surface Model (DSM), which shows the elevation of the ground and features on the ground. When compared to the DTM, it will be possible to determine building heights.
- In the Tasks pane, double-click the Create a Digital Surface Model task.
This task is similar to the one with which you created the DTM. First, you'll filter the LAS dataset, then you'll convert it to a raster dataset.
- In the Contents pane, click the LAS dataset to select it.
- In the Tasks pane, click Run to open the Layer Properties window.
Currently, only the class code for 2 Ground is checked. You'll modify the filter settings so non-ground codes are also checked.
- Check 1 Unassigned.
If your dataset has other codes, check all of them except 7 Low Noise and 18 High Noise. These codes include anomalously low or high values that are usually errors in the data.
Additionally, you'll filter points to show only the last returned values of the lidar scanner. Sometimes, a single pulse from a lidar scanner can have multiple returned values at different distances from the scanner. Usually, this phenomena occurs with vegetation because of its irregular shape. In these instances, the first returned value is typically a leaf on the upper canopy of a tree, while the last returned value is the ground or another hard surface (such as a building rooftop) beneath the tree. Filtering to show only last returned values will remove vegetation that covers building rooftops and more clearly define the roof form and height.
- For Return Values, uncheck all except Last.
- Click OK.
The LAS dataset now shows both the ground and features on top of the ground. Next, you'll run the LAS Dataset to Raster tool again.
- In the Tasks pane, for Input LAS Dataset, choose the Portland_LAS.lasd dataset. For Output Raster, confirm that the output location is the City_Data geodatabase and change the output name to Portland_DSM.
- Change Interpolation Type to Triangulation and Sampling Value to 1.
- Click Finish.
The tool runs, and the new layer is added to the scene, although it is covered by the other layers.
- In the Contents pane, turn off the Portland_LAS, Portland_Buildings, and Portland_DTM layers.
The DSM shows the elevations of buildings and other features. Darker areas have lower elevations, and lighter areas have higher elevations.
Create a normalized Digital Surface Model
The final elevation layer you'll make is a normalized Digital Surface Model (nDSM). Unlike the previous two elevation layers, which were made from the LAS dataset, the nDSM is made by subtracting the values in the DTM from the values in the DSM. Because the DTM shows the ground elevation and the DSM shows the elevation of the features on top of the ground (the absolute elevation), an nDSM shows the height of features above ground (the normalized elevation). The Extract Roof Form tool will use this layer to accurately process areas where roofs are expected to be.
- In the Tasks pane, double-click the Create a normalized Digital Surface Model task.
The task opens the Minus tool, which allows you to subtract the cell values of one raster layer from another.
- For Input raster or constant value 1, choose the Portland_DSM layer.
- For Input raster or constant value 2, choose the Portland_DTM layer.
- For Output raster, confirm that the output location is the City_Data geodatabase and change the output name to Portland_nDSM.
- Click Finish.
The nDSM shows the relative height of the structures. Most of the ground area has a value of 0 or close to 0 (the black cells). You've now created the three elevation layers you'll use to run the Extract Roof Forms tool.
- On the Project tab or Quick Access Toolbar, click Save to save the project. If you receive a message that the project was created in a previous version of the software, click Yes.
In this lesson, you downloaded and opened the project data. You converted raw lidar data into a LAS dataset and used the LAS dataset to create three elevation layers showing different facets of the topography. In the next lesson, you'll extract the realistic roof forms and check the resulting dataset for errors.