Create elevation layers

To create 3D buildings with detailed roof forms and accurate heights, you must first 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 large areas. You will use an ArcGIS Pro project downloaded from the solutions page that contains the 3D Basemaps solutions tools and workflows specific to local government municipal development. After downloading the project and data, you will 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 will convert the point cloud into raster datasets that show the elevation of the area. You can visit the ArcGIS Solutions page for more information. The links change frequently, so just search for ArcGIS Solutions in any web browser.

Download the data and deploy the solution

Before you begin, you must download data supplied by the City of Portland and deploy the ArcGIS Solutions 3D Basemaps. You will also open an ArcGIS Pro task to take you through the workflow step by step.

  1. Download the Roof_Form_Extraction zip file.
  2. Extract the compressed folder to an accessible location on your computer.

    Next you will deploy the ArcGIS Solutions 3D Basemaps.

  3. Open ArcGIS Solutions. If necessary, sign in to your ArcGIS account.

    If you don't have an organizational account, you can sign up for an ArcGIS free trial.

  4. In the list of solutions, click 3D Basemaps.

    3D Basemaps ArcGIS Solutions

  5. In the 3D Basemaps window that appears, click Deploy now.

    The 3D Basemaps solution is now deployed.


    See ArcGIS Solutions for more information.

  6. At the top of the page, click your profile and click Profile & Settings.

    Profile & Settings

  7. On the ribbon, click Content.

    Content on the ribbon

  8. On the list of folders, click the 3D Basemaps folder.

    3D Basemaps folder

  9. For the 3D Basemaps item Desktop Application Template, click the More Options button and choose Download.

    Download 3D Basemaps solution.

  10. Extract the file to a folder that is easily accessible, such as your Documents or Desktop folder.

    Make sure that the file path to your 3DBasemaps folder does not contain any files with spaces. It will cause an error later in the workflow.

  11. Open the 3DBasemaps folder and double-click the 3Dbasemaps project file to open the project in ArcGIS Pro.

    3Dbasemaps project file

    A blank project appears. Using this project that was downloaded for you from the solutions page, you can use precreated tasks and tools that are included in the project and are common to local government workflows.

  12. If necessary, sign in to your ArcGIS organizational account.

    If you do not have ArcGIS Pro or an ArcGIS account, you can sign up for an ArcGIS free trial.

Create a LAS point cloud dataset

You will assemble the four lidar data files into a single LAS dataset, which can be displayed in 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.

  1. In the Catalog pane, right-click Folders and choose Add Folder Connection. In the Add Folder Connection window, browse to the Roof_Form_Extraction folder you unzipped earlier and click OK.

    The Roof_Form_Extraction folder contains several lidar files. Connecting your folder now will make finding this data easier to find later.


    For tools to work properly in later steps, the project package's default folder and geodatabase must be used. For example, when creating the buildings, the task looks for a layer rule package stored in the default folder. The default geodatabase for the project is called 3DBasemaps.gdb, and tools will automatically default to that as the output location for all new data.

  2. In the Catalog pane, expand the Tasks folder. Double-click How to use 3D Basemaps to open the task.

    How to use 3D Basemaps task

    When you double-click the task, the Tasks pane appears with a selection of specific workflows for building 3D basemaps.

    List of available tasks for 3D Basemaps

  3. In the Tasks pane, expand the Publish ground elevation surface task group.

    Publish ground elevation surface task group

    The task group contains multiple tasks, which are arranged sequentially but can be opened in any order. Each task group contains tasks specific to the heading. In this case, the two available tasks are for working with ground elevation surfaces.

  4. Double-click the Extract elevation surfaces from 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 preset, continuous workflow, without having to search for and run the tools independently. Tasks also contain descriptive information on the workflow and steps that you are performing.

  5. For Input Files, click the Browse button.

    Browse button

    The Input Files window appears, which allows you to browse files and folders both on your computer and on ArcGIS Online.

  6. In the Input Files window, click Folders. Expand the Roof_Form_Extraction folder and double-click the Lidar folder. Press Ctrl while clicking all four files to select them. Click OK.

    Select lidar (.las) files.


    You can also click the first file and press Shift while clicking the last file to select all four files.

  7. For Output LAS Dataset, change the output name to Portland_LAS.lasd. Leave it in the default folder that was created when you opened the project package.

    Create LAS Dataset tool's output parameters.

    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 will set the coordinate system for the output, if the tool does not automatically set it. 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 are working closely with the Portland municipal government in this scenario, so you know that the lidar data uses the NAD 1983 (2011) 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.

  8. If necessary, in the Tasks pane, scroll down to see the remaining tool parameters. Verify that Coordinate System is NAD_1983_(2011)_StatePlane_Oregon_North_FIPS_3601_Intnl_Feet. This is the coordinate system of the LAS files.
  9. For Create PRJ For LAS Files, choose Files with Missing Spatial References and click Run to create the LAS dataset.

    Coordinate System and other parameters

    When the tool finishes, the LAS point cloud dataset is added to the scene. The Tasks pane remains open. You will continue the workflow, so leave the Tasks pane open.

  10. Navigate the scene to explore the dataset. Drag the mouse wheel to tilt and rotate the scene.

    LAS point cloud dataset in the scene view

    The point cloud contains millions of points, symbolized so that points with higher elevations are red, and points with lower elevations are blue. You will use this dataset to create multiple elevation rasters, but first you will check to make sure the dataset is free of outliers.

Extract elevation surfaces from LAS datasets

Next, you will create 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 digital terrain model (DTM) shows only the elevation of the ground, without buildings or other features; the digital surface model (DSM) shows the elevation of the ground and features on the ground; and the normalized DSM (nDSM) shows the height of features above ground (the normalized elevation). The task you started previously is already open and has the Extract Elevation From LAS Dataset tool open in it.

  1. In the Tasks pane, for Input LAS Dataset, click the arrow and choose Portland_LAS.lasd.

    The cell size of the raster is automatically detected.

  2. For Output raster, type Portland.

    As the tool calculates the three elevation layers, it appends the name of the raster. You will end up with three layers named Portland_dtm_surface, Portland_dsm_surface, and Portland_ndsm_surface for the digital elevation model, digital surface model, and normalized digital surface model, respectively.

  3. Check the Classify Noise box. Click Run.

    It may take several minutes for the task to complete.

    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 will check for them and remove them if they exist. To classify noise, such as birds and planes, you must set the expected minimum and maximum of buildings. Points below the minimum or above the maximum will be considered outliers. You will investigate the data to determine appropriate values to use.

  4. At the bottom of the Tasks pane, click the Contents tab to open the Contents pane.

    Contents tab

    The Portland surface layers appear in the Contents pane and are stored in the 3DBasemaps geodatabase.

    Portland surfaces in Contents pane

  5. Under Drawing Order, in the 3D Layers group, expand Portland_LAS.lasd.

    Portland_LAS.lasd in Contents pane

    The symbology for the layer shows the highest and lowest values in the dataset: 236.91 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 will 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.

  6. Navigate to the tall buildings west of the river. Tilt and rotate the scene (drag the mouse wheel) to compare the building heights.

    Tall condominium buildings

    Many of these buildings represent condominium housing. The tallest seems to be the one in the middle, closest to the river.

  7. Click a bright-red point at the top of the tallest building's rooftop.

    Pop-up window for point

    A pop-up appears with information about the point you clicked, including its elevation. The point you clicked probably has an elevation of around 200 feet, nearly 50 feet lower than the maximum value in the dataset (it may vary slightly from the value in the above image).

  8. Close the pop-up. Click any of the dark points in the river.

    The point's elevation will likely be around 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 are probably not significant outliers that will skew your data—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.

  9. Open the Tasks pane and expand Height Detection. For Minimum Height, type 0. For Maximum Height, type 215.

    Minimum and maximum elevations

    These values give about a 10 to 20-foot buffer from the values you saw in the data.

  10. Click Run.

    It may take several minutes for the task to complete.

  11. In the Contents pane, turn off the Portland_LAS layer.

    Only the 2D layers are visible.

    nDSM layer in the map

    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 have now created the three elevation layers you will use when you run the Extract Roof Forms tool. The DSM shows the elevations of buildings and other features. Darker areas have lower elevations, and lighter areas have higher elevations. The DTM shows only the ground elevation. The locations of buildings still show up faintly because the tool estimates the location of the ground based on surrounding points.

    Unlike the DTM and DSM 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) to accurately process areas where roofs are expected to be.

  12. Turn off all layers except Portland_dtm_surface and the basemap.

    Portland_dtm_surface layer visible

Ground elevation surface

In scenes, the data sits on top of an elevation surface that shows the terrain. In most cases, a global elevation surface is good enough for visualization purposes, but when you want to create a scene where retaining accuracy of distance, direction, scale, and area is critical, you need a custom elevation surface. In the next task item, you will publish your own elevation surface based on the elevation rasters.

  1. Click the Tasks tab and, if necessary, click Next Step.

    When you finished running the previous task, the pane progressed to the next task, Modify Ground Elevation Surface, which is optional. To check if you need to run this process, you will inspect the attribute table and elevation settings of the Portland_Buildings layer.

  2. In the Catalog pane, expand Folders, expand the Roof_Form_Extraction folders, and expand City_Data.gdb. Drag Portland_Buildings onto the map.

    Portland_Buildings feature class

    Notice that some of the building footprints are partially covered by the ground surface, especially near the river.

  3. In the Contents pane, right-click Portland_Buildings and choose Attribute Table.

    The attribute table for the buildings contains the data associated with the feature class. Each building has a unique ID, as well as a name determined by the address. It has height and roof form data, which you will use later, but it does not have a ground elevation field. If the layer had a field with ground elevation, you would modify the surface model to match, but because this is not the case, you can skip this step.

  4. Close the table.
  5. In the Tasks pane, click Skip.

    The Modify scene elevation surface step appears, with instructions on how to perform the operation.

    Modify scene elevation surface step

    In the final step in this task, Modify scene elevation surface, you will modify the elevation surface to match the one you just calculated. The default elevation surface used in scenes is WorldElevation3D/Terrain3D. For this project, the DTM you calculated is more accurate in the small, localized downtown area of Portland than the global surface. It is also projected in the same StatePlane grid as the building footprint data, rather than the default Web Mercator that the world elevation surface uses. You will modify the elevation surface manually, as described in the task information.

  6. In the Contents pane, if necessary, expand the Elevation Surfaces section. Right-click Ground and choose Add Elevation Source Layer.

    Ground layer group

    The Add Elevation Source Layer window appears.

  7. In the Add Elevation Source Layer window, double-click the Databases folder and browse to 3DBasemaps.gdb. Click Portland_dtm and click OK.

    If you do not see the raster datasets you created, click the Refresh button next to the address bar.

  8. In the Contents pane, confirm that Portland_dtm was added to the Ground layer group under Elevation Surfaces. Uncheck WorldElevation3D/Terrain3D.

    Set the new elevation surface.

    The basemap is clipped roughly to the extent of the DTM.

    Portland_dtm ground surface

  9. In the Tasks pane, click Finish.

    In the final task in this group, you will publish the elevation surface you created. This is useful if you want to publish the building data to ArcGIS Online later; because web maps use Web Mercator, to display any projected 3D data, you first need to publish a custom elevation surface.

  10. In the Tasks pane, and in the Publish ground elevation surface group, double-click Publish ground elevation surface layer.

    Publish ground elevation surface layer step

    Because your elevation units are in feet, you will complete the first step, converting the DTM to meters.

  11. In the Rasters box, double-click Portland_dtm_surface.

    Portland-dtm in the Rasters section

    The DTM layer is added to the expression box as "Portland_dtm_surface".

    Portland_dtm layer added to expression

  12. In the Expression box, delete the placeholder text "Your DTM". The expression should read "Portland_dtm_surface" * 0.3048.

    Convert the elevation surface to meters.

  13. Leave Output raster set to DTM_meters and click Run.
  14. In the Reproject DTM step, for Input Raster, choose DTM_meters. For Output Raster Dataset, type DTM_project.

    Reproject DTM task pane parameters

    Output Coordinate System is set to WGS_1984_Web_Mercator_Auxillary_Sphere. This is the default projection for ArcGIS Online and will make publishing your roof forms much easier.


    To reproject your data from the State Plane coordinate system to Web Mercator, you will use a geographic transformation.

  15. For Geographic Transformation, choose WGS_1984_(ITRF08)_To_NAD_1983_2011.
  16. Leave the rest of the default settings and click Run.

    The DTM_project layer appears in the Contents pane. To create the buildings in the Web Mercator projection, you will switch the elevation surface to DTM_project.

    The Task pane updates to Add elevation surface to the ground and the task information describes how to add an elevation surface to the ground.

  17. In the Contents pane, under Elevation Surfaces, right-click Groundand choose Add Elevation Source Layer.

    The Add Elevation Source Layer window appears.

  18. In the Add Elevation Source Layer window, first click the Refresh button at the top, and then choose DTM_project and click OK.

    Choose DTM_project raster

  19. In the Contents pane, expand Ground and confirm that DTM_project was added to the list of elevation surfaces. Uncheck Portland_dtm.

    DTM_project raster added to Ground section

  20. In the Tasks pane, click Skip.

    The task explains the steps for publishing the elevation surface layer.

    Steps to publish the elevation surface layer

    Finally, you will publish the elevation surface to your portal.

  21. Click Finish.
  22. In the Contents pane, right-click DTM_project, and choose Share As Web Layer.

    Share the elevation surface as a web layer.

    The Share As Web Layer pane appears.

  23. On the General tab, enter the following parameters:

    • For Name, type Portland_DTM_WebMercator and add your initials.
    • For Summary, type Projected elevation surface for Portland.
    • For Tags, type ground surface.

  24. Click the Configuration tab, and if necessary, expand Tiling Scheme and Options, and enter the following parameters:

    • For Tiling Scheme, confirm Same as basemap is selected.
    • For Levels of Detail, confirm Maximum Level is set to 20.
    • Under Options, for Temp cache location, choose or verify that the Roof_Form_Extraction folder is selected.
    • For LERC compression, choose or verify that it is set to 0.05.

  25. Click Analyze. Make sure there are no errors and click Publish.

    The elevation surface is published to your portal and can now be used in web scenes.

  26. When the web layer is finished publishing, close the Share As Web Layer pane and save the project.

You have downloaded and opened the project containing the 3DBasemaps solutions tools and the project data. You also converted raw lidar data into a LAS dataset and used the LAS dataset to create three elevation layers showing different facets of the topography. Next, you will extract the realistic roof forms and check the resulting dataset for errors.

Create 3D buildings

In the previous lesson, you converted lidar data into three elevation layers: one showing elevation of the ground (DTM), one showing elevation of features and buildings on top of the ground (DSM), and one showing height of features above ground (nDSM). In this lesson, you will use these elevation layers and the building footprints to calculate attribute data for roof forms and heights. You will then use those attributes to symbolize the building footprints as 3D features. Finally, you will check the features for potential errors.

Extract building roof forms

To extract roof forms, you will use the Extract Roof Form tool, which is one of the two script tools included in the Roof_Form_Extraction toolbox that you downloaded with the project data. The Extract Roof Form tool will not automatically create 3D buildings, but it will add attribute data to 2D building footprints that describe roof form and other roof attributes. These attributes will then be used to procedurally create these features in 3D.

  1. If necessary, open your 3DBasemaps project in ArcGIS Pro.

    Many buildings are not uniformly rectangular but have various levels, different roofs, and other architectural features. To minimize the amount of editing you will have to do by hand to add these features after the building blocks have been extruded, you will perform some processing on the data. There are two options for doing this, using either building footprints or elevation. Your building footprints are simple rectangles without segmentation, so you will use the DSM to estimate where building footprints should be split to allow for more detail. You will use a script tool that is included in the 3D Basemaps solution.

  2. In the Catalog pane, expand Toolboxes and then expand CreateBuildings.tbx.

    The 3DBasemaps project comes with tasks, as you have seen, and many tools that you can use to create and manage buildings, floors, power lines, and other features in your 3D basemaps.

    CreateBuildings toolbox expanded

  3. In the CreateBuildings toolbox, double-click Segment Roof Parts.

    The Segment Roof Parts pane appears.

  4. In the Segment Roof Parts pane, for Building Footprints, choose Portland_Buildings. For Elevation Surface (DSM), choose Portland_dsm_surface.

    Segment Roof Parts tool parameters

    The Spatial Detail and Spectral Detail fields populate. The values range from 1 to 20, with higher numbers corresponding to more detailed outputs. In a city, where buildings and skyscrapers may have many roof facets with large differences in height, lower values can be used because the elevation changes are very easy to detect. In a suburb or row housing example, values would need to be higher to detect more subtle differences in elevation. Because you're dealing with both skyscrapers (along the river) and row housing (to the east), you'll use the default values, which fall relatively in the middle of the range.

  5. For Output Segmented Buildings, type Portland. Click Run.

    The tool will take several minutes to run.

    Now that the building footprints have been segmented, you will use the Create Buildings task to make a 3D feature class of buildings.

  6. In the Tasks pane, expand Publish buildings to view the available tasks for working with buildings.

    Available tasks in Publish buildings group

    There are two optional tasks in the Publish buildings group that allow you to extract building footprints and preprocess building footprints. The first task, Extract building footprints, is only necessary if you do not have building footprints and will extract the building footprints from a lidar dataset. The next task, Preprocess building footprints, allows you to segment buildings based on another feature class prior to roof form creation. You do not have another feature class to segment with and you just segmented using an elevation surface, so you will proceed to the Create buildings task.

  7. In the Tasks pane, double-click Create buildings.
  8. In the Create buildings pane, enter the following parameters:
    • For Buildings, choose Portland_segmented.
    • For Elevation Surface (DSM), choose Portland_dsm_surface.
    • For Ground Elevation Surface (DTM), choose Portland_dtm_surface.
    • For Normalized Elevation Surface (nDSM), choose Portland_ndsm_surface.

    Parameters for input data

  9. For Output Building Polygons, type Portland. Do not run the tool yet.

    The RoofForm parameters define what is considered a roof surface. By default, a roof should be 250 square feet (flat) or 75 square feet (sloped), and 8 feet above ground. These minimum parameters prevent smaller objects, such as cars or street posts, from being counted as roof surfaces. Lidar data that includes larger or smaller buildings will need a different range of parameters. This area is zoned as residential and commercial, so the default values are neither too lenient to count nonbuilding objects nor too strict to exclude smaller homes. When creating detailed buildings, you should also consider simplifying the features by removing redundant or excess vertices in the building footprints. Simplified models look smoother and reduce rendering time, which is ideal for sharing your output with the Portland municipal government.


    If your data is in meters or another unit of measurement, you must adjust these parameters. The unit of measurement in these parameters will be the same as that in your elevation layers.

    Finally, you can choose to simplify the buildings. Simplifying the buildings will remove redundant or excess vertices in the building footprints. The result will make the 3D building models look smoother and reduce the time it takes to render them. You eventually want to share your 3D buildings with the Portland municipal government, so a better-looking output is desirable.

  10. Expand the Roof Form section and make sure the Simplify Buildings box is checked.

    You will also verify that the Simplify Tolerance value is set to 0.1, the maximum distance variation between the vertices of the simplified polygon and the original polygon. A lower value will maintain accuracy, while a larger value will simplify more. You want to keep your building footprints accurate, because they are going to be used for analysis by the Portland municipal government, so you will use a small value of 0.1.

  11. For Simplify Tolerance, type 0.1 or verify it is already set to 0.1.

    Simplify Buildings and Simplify Tolerance parameters


    The value uses the same unit of measurement as your elevation layers.

  12. Click Run.

    The tool may take several minutes to run. When it finishes, the output layer is added to the scene. Next, you will symbolize the roof forms layer appropriately using a 3D rule package.

  13. In the Tasks pane, click Next to advance to the Apply building symbology step.

    You will follow the instructions in the task to apply the correct symbology to the roof forms layer.

  14. In the Contents pane, right-click Portland_roofform and choose Symbology.
  15. In the Symbology pane, verify that Primary symbology is set to Single Symbol. For Symbol, click the current fill symbol.

    Current fill symbol

  16. Click the Properties tab and click Layers.

    Properties tab and Layers button

  17. For the Solid fill layer, click the drop-down arrow and choose Procedural fill.

    Procedural fill option

  18. Click the Rule button.
  19. Browse to the home folder (3DBasemaps), expand rule_packages, choose LOD2BuildingShells_Feet.rpk and click OK.


    Depending on the units of your data, you can choose rule packages built for feet or meters.

    Once you select the rule package, the properties for the rule appear in the Symbology pane.

    Properties for the rule package

  20. Click Apply.

    The rule package modifies the symbology to show the buildings in 3D. You will turn off other layers so that you can see the 3D buildings.

  21. In the Contents pane, turn off all layers except the Portland_roofform layer, the Topographic basemap, and the DTM_project layer in the Elevation surfaces section.

    Portland_roofform layer in the map

    The Portland_roofforms layer contains 3D models of the Portland building footprints layer, plus contains supplemental information about the buildings in its attribute table.

  22. Right-click the Portland_roofform layer and choose Attribute Table.

    The attribute table appears. Alongside standard feature class attributes such as OBJECTID, Shape, Shape_Length, and Shape_Area, there are several fields related to roof height, form, and direction.

    Fields in the attribute table

    These fields were created by the Extract Roof Form tool based on the elevation layers and building footprints used as the tool's input. The fields and their meanings are explained in the following list:

    • BLDGHEIGHT (Building Height)—The maximum height of the building.
    • EAVEHEIGHT (Eave Height)—The minimum height of the building. Buildings with no eave height have flat roofs.
    • ROOFFORM (Roof Form)—The shape of the roof. The roof form can be Flat, Gable, or Hip. The following image shows what each roof form looks like:

      Roof form examples

    • BASEELEV (Base Elevation)—The base height of the building, usually equal to the ground elevation where the building is located.
    • ROOFDIR (Roof Direction)—The compass direction (in degrees) that the roof faces. Only Gable roof forms have values for this field.
    • RoofDirAdjust (Roof Direction Adjusted)—This field allows adjustment of the roof direction. The default value is 0. A value of 1 will rotate the roof counterclockwise 90 degrees, while a value of 2 will rotate it 180 degrees. This field is used for manually editing roof forms that were incorrectly extracted. For now, you don't need to worry about it.

  23. Close the attribute table.
  24. In the Tasks pane, click Next Step and click Finish.
  25. Save the project.

Now that you have the buildings created, you will check how closely they match the lidar data.

Check accuracy of the buildings

You have created a 3D building footprints layer with roof form information in the attributes. Next, you will check how accurate they are.

  1. In the Tasks pane, under Publish buildings, double-click Review buildings.

    Review buildings task

  2. In the Review buildings pane, for Buildings, choose the Portland_roofform layer, and for Elevation Surface (DSM), choose Portland_dsm_surface. Click Run.

    The Confidence Measurement tool calculates root mean square error (RMSE), which is the difference between the values in the roof forms layer and the values in the DSM. A higher RMSE indicates higher error for the generated building footprints. The statistic is added to the attribute table.

  3. In the Contents pane, open the attribute table for Portland_roofform.
  4. In the attribute table, scroll until you find the RMSE column. Right-click the RMSE field name and choose Sort Descending.

    Sort descending RMSE values.

    Generally, you will aim for an RMSE value of about 3 feet (1 meter), though this level of accuracy depends on the use case. While these values are useful, the Portland_roofform layer has over 1,000 features, so looking at the errors for all of them would take a long time. To quickly visualize which buildings have high error, you will symbolize the layer by RMSE.

  5. Close the attribute table.
  6. In the Tasks pane, click Next Step.

    A linked 2D map appears.

    Linked 2D map

  7. In the Contents pane of the 2D map, select the Portland_roofform layer, and in the Tasks pane, click Run.

    The Symbology pane for the Portland_roofform layer appears.

  8. In the Symbology pane, click Options and choose Import Symbology.

    Import symbology option

    The Apply Symbology From Layer pane appears.

  9. In the Apply Symbology From Layer pane, enter the following:
    • For Input Layer, Portland_roofform should be selected, as it was selected when you ran the task step.
    • For Symbology Layer, click Browse, browse the 3DBasemaps folder and expand the layer_files folder. Double-click LOD2RMSEclassification.lyrx.

    Add the .lyrx file.


    Alternately, you could apply your own graduated color scheme to symbolize by the RMSE field, but for the sake of time, you will use the layer file.

  10. In the Apply Symbology From Layer tool, click Run.

    The .lyrx style is applied to the Portland_roofform layer. The symbology shows buildings with a low RMSE in green and buildings with a high RMSE in orange and red.

  11. In the Contents pane of the 2D map, click Portland_dsm to select the layer.
  12. On the ribbon, click the Raster Layer tab. In the Effects group, for Transparency, type 50 and press Enter.

    Layer Transparency slider set to 50.0%

  13. In the Tasks pane, click Next Step.
  14. Drag the Map view tab and dock it to the side of the 3D Basemap view tab.

    Drag and dock Map view tab.

  15. Click the Map tab to make the 2D map active.
  16. On the ribbon, on the Map tab, click Basemap and choose Imagery.

    Visual comparison reveals that most of the buildings with high RMSE seem to have multiple parts with different heights. For the square building shown in the previous image, a portion appears to be a parking structure, while the building itself is only about half the size of the entire footprint. The RMSE may have been caused by the building footprint not reflecting the actual extent of the building. Additionally, the footprint appears to be misaligned with the imagery. You will fix these errors later.

  17. Zoom to the buildings with high RMSE west of the river. Compare the building features to the DSM and imagery layers.

    Buildings with high RMSE

  18. In the Tasks pane, click Next Step.

    In the fourth step of the Review buildings task, Visually inspect buildings, you are directed to look at the building forms with the lidar points on to see where the errors are higher-RMSE buildings.

  19. Click the 3DBasemap scene to activate it. In the Contents pane, turn on the Portland_LAS layer.

    Portland_LAS layer in Scene view

    There are two main reasons the footprints could be wrong: either the roof form was incorrectly entered or the lidar was misinterpreted. Looking at the building footprints, there appear to be more vertices and segmented parts than shown in the lidar data—the tool most likely picked up details from roof features like HVAC units. You will inspect the attributes to see if any features need to be manually changed before editing the features.

  20. On the ribbon, on the Map tab, click Select. Activate the 2D Map view and click one of the red or yellow building footprints to select it.

    Red building footprint selected


    The building you selected is likely different than the building shown in the image.

  21. On the ribbon, click Attributes.

    Attributes button

    The Attributes pane appears. By viewing the attributes, you can see the type of roof.

    Roof attributes

    Many of the roof types are flat, which is correct. In the next task, you will fix the vertices that are incorrect.

  22. On the ribbon, in the Selection group, click Clear to clear the selection.


  23. In the Tasks pane, click Finish and save the project.

You have extracted roof forms for the Portland buildings and symbolized the roof form features in 3D. Although you created the 3D features, you noticed a few errors in some of them. Before you deliver your data to the Portland municipal government, you will fix some of the errors. In the next section, you will edit the roof form features to better reflect the data before exporting the roof forms layer to a 3D multipatch feature class that you can share with the Portland municipal government.

Edit buildings and export features

Previously, you created 3D buildings with LOD2 roof forms and identified errors. Now you will fix a feature that had a higher root mean square error (RMSE). Then, you will export the buildings to a 3D multipatch feature class to make the data easier to share. For the sake of time, you will only edit a single building, even though multiple buildings were flagged as having higher RMSE.

Modify building footprint vertices

One of the problems with the building you looked at was that the building footprint was misaligned with the imagery and elevation data. Before you make any other changes, you will modify the vertices for better alignment.

  1. If necessary, open your 3DBasemaps project in ArcGIS Pro and if necessary, open the Tasks pane.
  2. In the Tasks pane, under the Publish buildings task group, double-click Modify buildings.

    The Modify buildings task appears and activates the Select tool for the 2D map only, not the 3D scene. You will select the building footprint you want to edit.

  3. On the map, if necessary, center the map on the building west of the bridge that is yellow.

    If you need to pan or zoom the map, use the following shortcut keys: press C to pan, X to zoom out, and Z to zoom in.

    Building footprint on the map

    The building is made up of several structures. From a visual inspection, the lower portion of the building appears to be fairly accurate, though there is a raised roof feature that was digitized incorrectly.

    The imagery also appears to be quite oblique, or captured at an angle rather than from directly above. This can cause your changes to vary from the 3D building forms, so before you start editing, you will change the basemap to a better image.

  4. In the Catalog pane, click the Portal tab and choose ArcGIS Online.

    ArcGIS Online in Catalog pane

  5. In the search bar, type World Imagery (Wayback 2017-05-31) and press Enter. Right-click the World Imagery (Wayback 2017-05-31) item and choose Add To Current Map.

    Add World Imagery Wayback.

    The World Imagery (Wayback 2017-05-31) layer is added to the Map view.

    World Imagery Wayback shown in map

    The resolution is higher, so it shows the building more clearly and from more of a top-down view, rather than oblique. Editing will be much easier using this image.

  6. Use the Select tool and click the orange feature in the center of the building to select it.

    Orange feature selected


    If you select the wrong feature by mistake, click Change the selection in the Tasks pane.

  7. In the Tasks pane, at the top of the Modify Buildings pane, click Modify Building Footprint vertices.

    Modify Building Footprint vertices tool

    The Edit Vertices editing tool opens in the Tasks pane, and the vertices of the building appear on the map. However, the transparent DSM makes it somewhat difficult to see exactly where the vertices should go.

  8. In the Contents pane, turn off the Portland_dsm layer.

    With the Portland_dsm layer off, it is much easier to see the vertices and the imagery layer.

    Portland_dsm turned off

  9. In the Map view, drag each of the vertices to trace the rooftop feature on the tower structure based on the Imagery basemap.

    When you drag the vertices, they may snap to existing features. You can temporarily disable this snapping behavior by pressing Spacebar while editing.

    Vertices aligned with the Imagery basemap


    While editing this feature only involves adjusting four vertices, some features in other scenarios may be more complicated. If there were many unnecessary vertices, you could select and delete vertices to simplify your building. You do not need the original orange feature, so you will delete it by deleting its vertices.

  10. In the Tasks pane, click Change the selection, and on the Map view, select the previous shape of the roof form (the orange rectangle) to access its vertices.

    This may also select the vertices of the larger building and that is fine.

  11. Right-click a vertex from the original orange roof only and choose Delete Vertex. Do the same for the remaining three vertices.

    Delete Vertex

  12. When you are satisfied with the new location of the vertices, in the Tasks pane, click Next Step. In the Save Edits window that appears, click Yes to save the edits. On the Map tab and in the Selection group, click Clear to clear any selected features.

    Saving your edits permanently alters the dataset that you edited, so you always want to confirm that your edits are accurate before saving. The original roof feature with a higher RMSE is deleted and the one you edited is now yellow, indicating a low RMSE.

    Yellow edited roof feature
  13. At the bottom of the Tasks pane, click Skip until you return to the main task list.

    Next, you will convert your features to share them with the Portland municipal government. Then, you will publish your dataset.

Publish edited buildings

The Portland_Roof_Forms dataset is a 2D feature class symbolized to look 3D. If you shared this feature class with the Portland municipal government, it would have to be symbolized again to appear in 3D. Additionally, it could only maintain its 3D form with the exact symbology specifications of the layer file that you used. Therefore, you will convert the dataset to a 3D multipatch feature class that maintains the 3D shape of features. Then, you will publish the buildings to ArcGIS Online so they can be added and visualized in web scenes.

  1. In the Tasks pane, if necessary, expand the Publish buildings layer task group, and double-click the Publish buildings layer task.

    Publish buildings layer task

    The Publish buildings layer task appears. Because you already published your scene in Web Mercator earlier, you can skip the first step. Now, you will convert the building polygons into multipatch features.

  2. In the Publish buildings layer pane, click Skip.
  3. Make sure the 3D Basemap tab is active. In the Contents pane, select the 3D Basemap scene.

    3D Basemap scene selected

  4. In the Publish buildings layer pane, enter the following:
    • For Building Layer, choose Portland_roofform.
    • For Unique ObjectID, choose BuildingFID.
    • For Output Building Multipatch, type Portland_Building_Roof_Forms.

    Convert buildings to multipatch features.

    The unique object ID is a field that identifies individual buildings as unique features. When you created the Portland_roofform layer, the unique OBJECTID field from the Portland_Buildings layer was re-created as BuildingFID.

  5. Click Run.

    The Portland_Building_Roof_Forms layer is added to the Contents pane.

  6. In the Tasks pane, click Skip to skip the Mask Features in Layer tool.

    For the Publish Building Layer step, the instructions are listed.

  7. In the Contents pane, right-click Portland_Building_Roof_Forms, point to Sharing and choose Share As Web Layer.

    The Share As Web Layer pane appears.

  8. In the Share As Web Layer pane, for Name, add your initials after Portland_Building_Roof_Forms.

    Each layer in your organization must have a unique name, and appending your initials helps ensure that your layer publishes even if another member of your organization has published a similar layer.

  9. For Summary, type or copy and paste Building roof forms extracted from LiDAR, and for Tags, type 3D, municipal development, and Green initiative and press Enter.
  10. For Share with, choose Everyone.
  11. Click Analyze and confirm there are no errors.
  12. Click Publish.

    While the layer is prepared, a message states that caching is in progress and the layer may not be viewable. Wait a few minutes until the message states that the layer was published successfully.

    When the publishing process is complete, a notification appears at the bottom of the pane.

  13. At the bottom of the Share As Web Layer pane, click Manage the web layer to view the shared item online.
  14. In the Task pane, click Finish.
  15. Save the project.

The 3D buildings are now published as a multipatch feature class that you can share with the Portland municipal government. You created these buildings using the 3DBasemaps solution project package by deriving elevation layers from lidar data and using those elevation layers to extract LOD2 roof forms from building footprints. You symbolized the footprints in 3D and edited features with high error. In addition to zoning, development, and city planning, these more realistic roof forms can be used in 3D solar and shade analysis.

You can use the tasks, tools, and layer files in this project with your own data. As long as you have building footprints and lidar data of a location, you can create LOD2 roof forms. The ArcGIS Pro task for 3D Basemaps is available on the ArcGIS Solutions page and is designed to quickly replicate the workflow described by these lessons. You can use the project package that you downloaded with the lesson data on your own data or download the project package from the ArcGIS Solutions page.

For more lessons, see the Learn ArcGIS Lesson Gallery.