Label | Explanation | Data 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.
| 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 |
Summary
Creates building models using rooftop points in a LAS dataset.
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:
- 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.
- Filter the LAS dataset layer for ground points using the layer properties or the Make LAS Dataset Layer tool.
- 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
arcpy.ddd.LasBuildingMultipatch(in_las_dataset, in_features, ground, out_feature_class, {point_selection}, {simplification}, {sampling_resolution}, {min_height_field}, {max_height_field})
Name | Explanation | Data 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.
| 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
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')
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())