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) | The LAS points that will be used to define the building rooftop.
| 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 |
Summary
Creates building models derived from rooftop points captured in lidar data.
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
arcpy.ddd.LasBuildingMultipatch(in_las_dataset, in_features, ground, out_feature_class, {point_selection}, simplification)
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) | The LAS points that will be used to define the building rooftop.
| 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
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())
Environments
Licensing information
- Basic: Requires 3D Analyst
- Standard: Requires 3D Analyst
- Advanced: Requires 3D Analyst