Label | Explanation | Data Type |
Input LAS Dataset
| The LAS dataset whose points 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
This tool presumes the LAS points being processed provide a desirable coverage of the building rooftop. For best results, avoid including the points representing portions of buildings other than the roof, as they generally add noise to the resulting building model.
The building model is generated by constructing a TIN from the selected LAS points found inside the building footprint. The footprint is incorporated into this TIN as a clip polygon whose height is defined by the lowest LAS point within its extent. The ground height provides the building's base, and can be derived from either a field in the footprint polygon's attribute table or an elevation surface.
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. The surface should use the same vertical coordinate system 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 then using either the LAS Dataset To Raster or LAS Dataset To TIN tool to generate the surface.
Ground points should be classified before executing this tool. Consider using the Classify LAS Ground tool to classify ground points if they have not already been classified.
Consider using the Classify LAS Building tool to identify points representing building rooftops, particularly if vegetation overhanging the rooftop is common. Review the result of the automated classification and consider making any necessary corrections through interactive classification editing before executing this tool with the building-classified points.
LAS points are processed more efficiently when the LAS dataset has statistics present. Consider using the LAS Dataset Statistics tool to compute statistics, if needed.
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 whose points 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