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. If the point cloud being processed has a high density of points, consider using the Sampling Resolution parameter to thin the points that will be used for constructing the rooftop.

  • Polygons containing arc segments are not supported by this tool. If such features exist in the input data, you can make 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, use 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. You can create a TIN or raster surface of the ground 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. Use the LAS Dataset Statistics tool to compute statistics.

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)

Specifies 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
(Optional)

A z-tolerance value that will be used to simplify the rooftop geometry. This value defines the maximum deviation of the output rooftop model from the TIN surface created using the LAS points.

Linear Unit
Sampling Resolution
(Optional)

The binning size used to thin the point cloud prior to constructing the rooftop surface.

Linear Unit

arcpy.ddd.LasBuildingMultipatch(in_las_dataset, in_features, ground, out_feature_class, {point_selection}, {simplification}, {sampling_resolution})
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)

Specifies 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
(Optional)

A z-tolerance value that will be used to simplify the rooftop geometry. This value defines the maximum deviation of the output rooftop model from the TIN surface created using the LAS points.

Linear Unit
sampling_resolution
(Optional)

The binning size used to thin the point cloud prior to constructing the rooftop surface.

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