LAS Building Multipatch (3D Analyst)

Summary

Creates building models using rooftop points in a LAS dataset.

Illustration

LAS Building Multipatch tool illustration

Usage

  • This tool creates buildings as multipatch features using rooftop points from a LAS dataset, ground height data, and building footprint polygons. Each 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 clipping polygon whose height is derived from the Ground Height parameter value. This TIN is then converted to a multipatch that is closed at the base height. Since the resulting multipatch is based on a TIN surface, the multipatch will not include details along the vertical profile of the building.

  • The input LAS points should capture the building roof. Exclude points representing building elements other than the roof when possible, as they typically cause the output to have undesirable characteristics. The Classify LAS Building tool can be used to assign a class code value of 6 to building rooftop points. The tool will assign a class code value of 6 for points representing building rooftops, but the tool has options for classifying points that are below and above the roof. If classifying these points, use a class code other than 6 to define them so that they can be excluded when used to create building features. Review the result of the building classification and make any necessary corrections through interactive editing or by running the Classify LAS Building tool again with different parameter settings. If the LAS dataset does not contain any nonbuilding points over the building footprints, all points can potentially be used to define the rooftop surface.

  • The Sampling Resolution parameter value is used to thin the points in the LAS dataset before constructing the TIN. This parameter optimizes the tool's performance when the input is a point cloud with a high density of points, or when points along the vertical profile of the building are being processed. The parameter value represents the length and width of the area being thinned, so a distance of 2 feet will result in binning the point cloud into a 2 foot grid. The highest point in each bin will be used to construct the rooftop TIN. In this way, the impact of points from the side of the building can be mitigated.

  • Building footprint polygons containing arc segments are not supported by this tool. Use the Densify tool to replace arc segments with line segments..

  • The Ground Height parameter value can be an elevation surface or a field in the footprint polygon's attribute table. When using a surface, the base height of the building will be the smallest z-value along the footprint's boundary. The surface should have the same vertical coordinate system as the LAS dataset. A ground surface can be derived from the LAS dataset to ensure that the buildings match the heights in the originating point cloud. To create an elevation surface from the LAS dataset, do the following:

    1. Ensure ground classified points are present in the LAS dataset. If they are not, use the Classify LAS Ground tool to assign a class code value of 2 for the ground points.
    2. Filter the LAS dataset layer for ground points using the layer properties or the Make LAS Dataset Layer tool.
    3. Use the LAS Dataset To Raster or LAS Dataset To TIN tool to create a raster or TIN surface that can be used as input to this tool.
  • When the ground height is derived from a field in the footprint polygon's attribute table, the 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 in a different linear unit, use the Calculate Field tool to calculate new height values in the linear units of the LAS dataset. The minimum ground height can be attributed to the building footprint polygon from a ground elevation surface using the Add Surface Information tool.

  • If building features are generated for adjacent structures with roofs that are at drastically different heights, the resulting feature for each building may be defined by the points from the nearby building. One approach to minimize this problem is to attribute each feature with the height range of the building's roof, and use these fields as the Minimum Height Field and Maximum Height Field parameter values.

  • LAS points are processed more efficiently when the LAS dataset contains statistics. 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 before constructing the rooftop surface.

Linear Unit
Minimum Height Field
(Optional)

The numeric field containing the minimum height of the points that will be used to define the rooftop. Any numeric field can be specified. Points that are lower than the value in this field will be ignored.

Field
Maximum Height Field
(Optional)

The numeric field containing the maximum height of the points that will be used to define the rooftop. Any numeric field can be specified. Points that are higher than the value in this field will be ignored.

Field

arcpy.ddd.LasBuildingMultipatch(in_las_dataset, in_features, ground, out_feature_class, {point_selection}, {simplification}, {sampling_resolution}, {min_height_field}, {max_height_field})
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 before constructing the rooftop surface.

Linear Unit
min_height_field
(Optional)

The numeric field containing the minimum height of the points that will be used to define the rooftop. Any numeric field can be specified. Points that are lower than the value in this field will be ignored.

Field
max_height_field
(Optional)

The numeric field containing the maximum height of the points that will be used to define the rooftop. Any numeric field can be specified. Points that are higher than the value in this field will be ignored.

Field

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

Related topics