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 huellas de edificios creados a través de los flujos de trabajo de extracción de entidades que pueden producir artefactos no deseados.
Si las huellas de edificios contienen estructuras circulares, procese primero dichas 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 probabilidad 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 de Círculo.
Plantéese utilizar el método Cualquier ángulo si las huellas de edificios representan geometrías con ejes que forman una combinación de ángulos entre las que se incluyen curvaturas de 45° y 90°. Comience por seleccionar un subconjunto de entidades que contengan ejes irregulares y evalúe qué valor de penalización en diagonal genera el resultado deseado. Si el resultado no captura correctamente ejes diagonales, plantéese modificar el valor de tolerancia para restringir la zona de regularización y disminuir gradualmente la penalización en diagonal. Si la salida contiene ejes no deseados con ángulos interiores agudos, ejecute de forma iterativa la herramienta mientras aumenta gradualmente la penalización en diagonal hasta obtener la salida deseada; a continuación, utilice este valor para procesar todo el dataset.
Cuando se utiliza el método Cualquier ángulo en un equipo con una tarjeta gráfica NVIDIA compatible con CUDA y más de 2 GB de memoria, la herramienta utilizará la GPU para llevar a cabo su operación. Puede modificar este comportamiento en la configuración del entorno Tipo de procesador. Si existen varias GPU, la GPU deseada se puede especificar mediante la configuración del entorno Id. de GPU.
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
arcpy.3d.RegularizeBuildingFootprint(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 | 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 |
diagonal_penalty | Cuando se utiliza el método RIGHT_ANGLES_AND_DIAGONALS, este valor dicta la probabilidad de construir ángulos rectos o ejes diagonales entre dos segmentos adyacentes. Cuando se utiliza el método ANY_ANGLES, este valor dicta la probabilidad de construir ejes diagonales que no se ajustan a los ejes preferentes determinados por el algoritmo de la herramienta. Por lo general, cuanto mayor es el valor, menor es la probabilidad de que se construya un eje diagonal. | Double |
min_radius | El radio más pequeño permitido para 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 | El radio más grande permitido para un círculo regularizado. Esta opción solo está disponible con el método de CIRCLE. | 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.RegularizeBuildingFootprint('rough_footprints.shp',
'regularized_footprints.shp',
method='Circle', tolerance=1.5, min_radius=10,
max_radius=20)
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 de licenciamiento
- Basic: Requiere 3D Analyst
- Standard: Requiere 3D Analyst
- Advanced: Requiere 3D Analyst