Resumen
Regulariza las huellas de edificio que presentan límites comunes.
Uso
Esta herramienta utiliza un algoritmo de compresión de polilíneas para corregir las distorsiones en los polígonos de huellas de edificios creados a través de los flujos de trabajo de extracción de entidades que pueden producir artefactos no deseados.
Al regularizar las huellas de edificio que se derivan de datos ráster, la tolerancia de regularización debe ser mayor que la resolución de los ráster de origen.
Las entidades con límites adyacentes deben tener un valor de atributo común para crear un límite regularizado que no se superponga con ninguna otra entidad. Si no se dispone de ningún atributo común, plantéese los siguientes pasos:
- Use la herramienta Zona de influencia con una distancia de zona de influencia que se corresponda con la tolerancia de regularización deseada.
- Procese las entidades poligonales con zona de influencia con ayuda de la herramienta Combinación para crear una sola entidad para los polígonos superpuestos.
- Use la herramienta Unión espacial para agregar el Id. único de los polígonos combinados a las entidades de entrada originales que se desea regularizar.
- Ejecute la herramienta Regularizar huellas de edificios adyacentes con el campo que contenga el Id. único especificado en el campo Agrupación (parámetro group en Python).
Plantéese usar el método Cualquier ángulo para las entidades de entrada compuestas de ángulos agudos o reflejos interiores, o si la flexión angular entre dos segmentos no está dentro de un intervalo de 45° entre 90° y 180°.
Cuando los parámetros especificados no pueden ofrecer una solución regularizada para una entrada dada, la entidad original se copia en la salida. El valor especificado en el campo STATUS indicará si la entidad se regularizó de la siguiente manera:
- 0: Entidad regularizada
- 1: Entidad original
Sintaxis
RegularizeAdjacentBuildingFootprint(in_features, group, out_feature_class, method, tolerance, precision, angular_limit)
Parámetro | Explicación | Tipo de datos |
in_features | Las entidades de entrada que se van a procesar. | Feature Layer |
group | El campo que se usará para determinar qué entidades comparten límites coincidentes y no superpuestos. | Field |
out_feature_class | La clase de entidad que generará esta herramienta. | Feature Class |
method | El método que se utilizará para regularizar las entidades de entrada.
| String |
tolerance | Distancia máxima que la huella regularizada puede desviarse del límite de su entidad original. | Linear Unit |
precision | La precisión de la cuadrícula espacial utilizada en el proceso de regularización. Los valores válidos varían de 0.05 a 0.25. | Double |
angular_limit | La desviación máxima de los ángulos interiores de la línea de mejor ajuste que se tolerará al utilizar el método Ángulos rectos y diagonales (RIGHT_ANGLES_AND_DIAGONALS). Por lo general, este valor se debe mantener por debajo de los 5° para obtener los mejores resultados. Este parámetro está deshabilitado para los otros métodos de regularización. | Double |
Muestra de código
En el siguiente ejemplo se muestra cómo usar esta herramienta en la ventana de Python.
arcpy.env.workspace = 'c:/data'
arcpy.ddd.RegularizeAdjacentBuildingFootprint('rough_footprints.shp', 'Block_ID',
'regularized_footprints.shp',
'RIGHT_ANGLES_AND_DIAGONALS',
'2 Meters', 0.10)
En el siguiente ejemplo se muestra cómo usar esta herramienta en un script independiente de Python.
'''****************************************************************************
Name: Classify Lidar & Extract Building Footprints
Description: Extract footprint from lidar points classified as buildings,
regularize its geometry, and calculate the building height.
****************************************************************************'''
import arcpy
lasd = arcpy.GetParameterAsText(0)
dem = arcpy.GetParameterAsText(1)
footprint = arcpy.GetParameterAsText(2)
try:
desc = arcpy.Describe(lasd)
if desc.spatialReference.linearUnitName in ['Foot_US', 'Foot']:
unit = 'Feet'
else:
unit = 'Meters'
ptSpacing = desc.pointSpacing * 2.25
sampling = '{0} {1}'.format(ptSpacing, unit)
# Classify overlap points
arcpy.ddd.ClassifyLASOverlap(lasd, sampling)
# Classify ground points
arcpy.ddd.ClassifyLasGround(lasd)
# Filter for ground points
arcpy.management.MakeLasDatasetLayer(lasd, 'ground', class_code=[2])
# Generate DEM
arcpy.conversion.LasDatasetToRaster('ground', dem, 'ELEVATION',
'BINNING NEAREST NATURAL_NEIGHBOR',
sampling_type='CELLSIZE',
sampling_value=desc.pointSpacing)
# Classify noise points
arcpy.ddd.ClassifyLasNoise(lasd, method='ISOLATION', edit_las='CLASSIFY',
withheld='WITHHELD', ground=dem,
low_z='-2 feet', high_z='300 feet',
max_neighbors=ptSpacing, step_width=ptSpacing,
step_height='10 feet')
# Classify buildings
arcpy.ddd.ClassifyLasBuilding(lasd, '7.5 feet', '80 Square Feet')
#Classify vegetation
arcpy.ddd.ClassifyLasByHeight(lasd, 'GROUND', [8, 20, 55],
compute_stats='COMPUTE_STATS')
# Filter LAS dataset for building points
lasd_layer = 'building points'
arcpy.management.MakeLasDatasetLayer(lasd, lasd_layer, class_code=[6])
# Export raster from lidar using only building points
temp_raster = 'in_memory/bldg_raster'
arcpy.management.LasPointStatsAsRaster(lasd_layer, temp_raster,
'PREDOMINANT_CLASS', 'CELLSIZE', 2.5)
# Convert building raster to polygon
temp_footprint = 'in_memory/footprint'
arcpy.conversion.RasterToPolygon(temp_raster, temp_footprint)
# Regularize building footprints
arcpy.ddd.RegularizeBuildingFootprint(temp_footprint, footprint,
method='RIGHT_ANGLES')
except arcpy.ExecuteError:
print(arcpy.GetMessages())
Información de licenciamiento
- Basic: Requiere 3D Analyst
- Standard: Requiere 3D Analyst
- Advanced: Requiere 3D Analyst