LAS Building Multipatch (3D Analyst)

Summary

Creates building models derived from rooftop points captured in lidar data.

Illustration

LAS Building Multipatch tool illustration

Usage

  • It is presumed that the LAS points provide a desirable coverage of the building rooftop. For best results, exclude points that represent portions of buildings other than the roof, as they generally add noise to the resulting building model. If building classified points are not present in the LAS dataset, use the Classify LAS Building tool to classify them. The tool will assign a class code value of 6 for points representing building rooftops. Review the result of the classification and make any necessary corrections by running the tool again with different parameter choices or through interactive classification editing. Generate the model once you are satisfied with the classification's coverage of buildings.

  • Classify ground points before executing this tool. Use the Classify LAS Ground tool to assign ground points with a class code value of 2 if they have not been classified previously.

  • The building model is generated by constructing a TIN from the LAS points that overlap the building footprint polygon. The footprint is incorporated into this TIN as a clip polygon whose height is defined by the source specified in the Ground Height parameter. The Ground Height parameter value can be specified as either a field in the footprint polygon's attribute table or an elevation surface.

  • Polygons containing arc segments are not supported by this tool. If such features exist in the input data, consider making a copy of those features and replace the arc geometries with line segments using the Densify tool.

  • When the ground height is derived from a field in the footprint polygon's attribute table, its height units are assumed to be the same as the z-unit of the input LAS dataset. If the height in the attribute table is expressed in a different linear unit, consider using the Calculate Field tool to apply the appropriate conversion factor before using this tool. The ground height can be attributed to the building footprint polygons in the following ways:

    • Filter the LAS dataset for ground points using the layer properties or the Make LAS Dataset Layer tool.
    • Run the Add Surface Information tool with the input features set to the building footprint polygon, the input surface set to the ground-filtered LAS dataset, and the output property set to the Z_MIN value to ensure that the building goes to the lowest z-value.
  • When the ground height is defined by a surface, the smallest z-value along the polygon's boundary will define the building's base height. Use the same vertical coordinate system for the surface as the LAS dataset. A TIN or raster surface of the ground can be created from the ground-classified LAS points by filtering the LAS dataset for the ground-classified points, and using either the LAS Dataset To Raster or LAS Dataset To TIN tool to generate the surface.

  • LAS points are processed more efficiently when the LAS dataset has statistics present. Statistics can be computed using the LAS Dataset Statistics tool.

Parameters

LabelExplanationData Type
Input LAS Dataset

The LAS dataset containing the points that will define the building rooftop.

LAS Dataset Layer
Input Features

The polygon features that define the building footprint.

Feature Layer
Ground Height

The source of ground height values can be either a numeric field in the building footprint attribute table or a raster or TIN surface. A field-based ground source will be processed faster than a surface-based ground source.

Field; Raster Layer; TIN Layer
Output Multipatch Feature Class

The multipatch feature class that will store the output building models.

Feature Class
LAS Rooftop Point Selection
(Optional)

The LAS points that will be used to define the building rooftop.

  • Building Classified PointsLAS points assigned a class code value of 6 will be used. This is the default.
  • Layer Filtered PointsLAS points that are filtered by the input layer will be used.
  • All PointsAll LAS points that overlay the building footprint will be used.
String
Simplification Tolerance

The z-tolerance value that will be used to reduce the number of LAS points factored into modeling the building rooftop. This value defines the maximum threshold of deviation between the output rooftop model and the rooftop surface created from the full resolution of LAS points.

Linear Unit

arcpy.ddd.LasBuildingMultipatch(in_las_dataset, in_features, ground, out_feature_class, {point_selection}, simplification)
NameExplanationData Type
in_las_dataset

The LAS dataset containing the points that will define the building rooftop.

LAS Dataset Layer
in_features

The polygon features that define the building footprint.

Feature Layer
ground

The source of ground height values can be either a numeric field in the building footprint attribute table or a raster or TIN surface. A field-based ground source will be processed faster than a surface-based ground source.

Field; Raster Layer; TIN Layer
out_feature_class

The multipatch feature class that will store the output building models.

Feature Class
point_selection
(Optional)

The LAS points that will be used to define the building rooftop.

  • BUILDING_CLASSIFIED_POINTSLAS points assigned a class code value of 6 will be used. This is the default.
  • LAYER_FILTERED_POINTSLAS points that are filtered by the input layer will be used.
  • ALL_POINTSAll LAS points that overlay the building footprint will be used.
String
simplification

The z-tolerance value that will be used to reduce the number of LAS points factored into modeling the building rooftop. This value defines the maximum threshold of deviation between the output rooftop model and the rooftop surface created from the full resolution of LAS points.

Linear Unit

Code sample

LasBuildingMultipatch example 1 (Python window)

The following sample demonstrates the use of this tool in the Python window.

arcpy.env.workspace = 'C:/data'

arcpy.LasBuildingMultipatch_3d('Highland.lasd', 'footprint.shp', 'dem.tif', 
                               'highland_3d_bldgs.shp', simplification='4 Feet')
LasBuildingMultipatch example 2 (stand-alone script)

The following sample demonstrates the use of this tool in a stand-alone Python script.

'''****************************************************************************
       Name: Extract Building Footprints & Generate 3D Models
Description: Extract footprint from lidar points classified as buildings, 
             regularize its geometry, and calculate the building height.

****************************************************************************'''
import arcpy

lasd = arcpy.GetParameterAsText(0)
footprint = arcpy.GetParameterAsText(1)
model = arcpy.GetParameterAsText(2)

try:
    lasd_layer = 'building points'
    arcpy.management.MakeLasDatasetLayer(lasd, lasd_layer, class_code=6)
    temp_raster = 'in_memory/bldg_raster'
    arcpy.management.LasPointStatsAsRaster(lasd_layer, temp_raster,
                                           'PREDOMINANT_CLASS', 'CELLSIZE', 2.5)
    temp_footprint = 'in_memory/footprint'
    arcpy.conversion.RasterToPolygon(temp_raster, temp_footprint)
    arcpy.ddd.RegularizeBuildingFootprint(temp_footprint, footprint, 
                                          method='RIGHT_ANGLES')
    arcpy.ddd.LasPointStatsByArea(lasd_layer, footprint, ['MIN_Z', 'MAX_Z'])
    arcpy.management.AddField(footprint, 'Height', 'Double')
    arcpy.management.CalculateField(footprint, 'Height', 
                                    "round('!Z_Max! - !Z_Min!', 2)", 
                                    'PYTHON_9.3')
    simplification = arcpy.Describe(lasd).pointSpacing * 4
    arcpy.ddd.LasBuildingMultipatch(lasd_layer, footprint, 'Z_MIN', model, 
                                    'BUILDING_CLASSIFIED_POINTS', simplification)


except arcpy.ExecuteError:
    print(arcpy.GetMessages())

Licensing information

  • Basic: Requires 3D Analyst
  • Standard: Requires 3D Analyst
  • Advanced: Requires 3D Analyst

Related topics