Resumen
Normaliza la huella de los polígonos de edificios eliminando elementos no deseados en su geometría.
Ilustración
Uso
Esta herramienta utiliza un algoritmo de compresión de polilíneas para corregir las distorsiones en los polígonos de huella de edificio creados a través de los flujos de trabajo de extracción de entidades que pueden producir artefactos no deseados.
El valor de tolerancia define la región que rodea el límite del polígono en la que debe encajar el polígono regularizado. Esta región puede visualizarse mejor convirtiendo el límite del polígono en una entidad de líneas y, a continuación, creando zonas de influencia de la línea según la distancia de tolerancia deseada.
Si las huellas de edificios contienen estructuras circulares, primero se deberán procesar estas entidades. Se puede utilizar una ratio de compactación para identificar edificios circulares. Para calcular este valor, realice lo siguiente:
- Agregue un campo de tipo doble.
- Utilice la calculadora de campos para calcular la siguiente fórmula:
(4 * 3.14159265358979 * !shape.area!) / !shape.length! ^ 2
- Un círculo perfecto tendrá un valor de 1 pero, dado que los polígonos que se suelen procesar con esta herramienta tienen alguna irregularidad, los valores cercanos a 1 tienen más probabilidades de tener una forma circular. Evalúe los resultados para identificar el valor mínimo de un edificio circular y seleccione valores iguales o superiores a este valor antes de ejecutar esta herramienta con el método CIRCLE.
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 está regularizada o no:
- 0: Entidad regularizada
- 1: Entidad original
Sintaxis
RegularizeBuildingFootprint_3d (in_features, out_feature_class, method, tolerance, densification, precision, diagonal_penalty, min_radius, max_radius)
Parámetro | Explicación | Tipo de datos |
in_features | Polígonos que representan las huellas de edificio que deben regularizarse. | Feature Layer |
out_feature_class | La clase de entidad que generará esta herramienta. | Feature Class |
method | Método de regularización que debe utilizarse para procesar las entidades de entrada.
| String |
tolerance | Distancia máxima que la huella regularizada puede desviarse del límite de su entidad original. El valor especificado se basará en las unidades lineales del sistema de coordenadas de la entidad de entrada. | Double |
densification | Intervalo de muestreo que se utilizará para evaluar si la entidad regularizada estará recta o curvada. La densificación debe ser menor o igual que el valor de tolerancia. Este parámetro solo se utiliza con métodos que admitan la identificación de ángulos rectos. | Double |
precision | Precisión utilizada por la cuadrícula espacial empleada en el proceso de regularización. Los valores válidos varían de 0.05 a 0.25. | Double |
diagonal_penalty | Controla el sesgo de distancia para crear conexiones de ángulo recto. Las distancias inferiores a la penalización en diagonal se utilizarán para crear ángulos rectos. Este parámetro solo se utiliza con el método RIGHT_ANGLES_AND_DIAGONALS. | Double |
min_radius | Radio más pequeño que puede tener un círculo regularizado. Un valor de 0 implica que no hay ningún límite de tamaño mínimo. Esta opción solo está disponible con el método de CIRCLE. | Double |
max_radius | Radio más grande que puede tener un circular regularizado. Esta opción solo está disponible con el método de Círculo. | Double |
Muestra de código
Ejemplo 1 de RegularizeBuildingFootprint (ventana de Python)
En el siguiente ejemplo se muestra cómo usar esta herramienta en la ventana de Python.
arcpy.env.workspace = 'c:/data'
arcpy.ddd.RegularizeBuildingFootprint('rough_footprints.shp',
'regularized_footprints.shp',
method='Circle', tolerance=1.5, min_radius=10,
max_radius=20)
Ejemplo 2 de RegularizeBuildingFootprint (script independiente)
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())
Entornos
Información sobre licencias
- ArcGIS Desktop Basic: Requiere 3D Analyst
- ArcGIS Desktop Standard: Requiere 3D Analyst
- ArcGIS Desktop Advanced: Requiere 3D Analyst