Etiqueta | Explicación | Tipo de datos |
Entidades de entrada | Polígonos que representan las huellas de edificio que deben regularizarse. | Feature Layer |
Clase de entidad de salida | La clase de entidad que generará. | Feature Class |
Método | Especifica el método de regularización que se utilizará para procesar las entidades de entrada.
| String |
Tolerancia | En la mayoría de los métodos, este valor representa la 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. Cuando se utiliza el método Círculo, esta opción también se puede interpretar como una relación de la diferencia entre la entidad original y su resultado regularizado respecto al área del resultado regularizado basado en la selección realizada en el parámetro Tipo de tolerancia. | Double |
Densificación | 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 |
Precisión | La precisión de la cuadrícula espacial que se utiliza en el proceso de regularización. Los valores válidos varían de 0,05 a 0,25. | Double |
Penalización en diagonal | Si se utiliza el método Ángulos rectos y diagonales, este valor identifica la probabilidad de construir ángulos rectos o ejes diagonales entre dos segmentos adyacentes. Si se utiliza el método Cualquier ángulo, este valor identifica la probabilidad de construir ejes diagonales que no se ajustan a los ejes preferentes determinados por el algoritmo de la herramienta. Si el valor de penalización está establecido en 0, no se utilizarán los ejes preferentes, lo que se traduce en la producción de un polígono irregular simplificado. Por lo general, cuanto mayor es el valor, menor es la probabilidad de que se construya un eje diagonal. | Double |
Radio mínimo | 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 Círculo. | Double |
Radio máximo | El radio más grande permitido para un círculo regularizado. Esta opción solo está disponible con el método de Círculo. | Double |
Entidad de alineación (Opcional) | La entidad de línea que se utilizará para alinear la orientación de los polígonos regularizados. Cada polígono se alineará únicamente a una entidad de línea. | Feature Layer |
Tolerancia de alineación (Opcional) | El umbral de distancia máxima que se utilizará para buscar la entidad de alineación más cercana. Por ejemplo, un valor de 20 metros significa que se usará la línea más cercana que esté a una distancia máxima de 20 metros para alinear el polígono regularizado. | Linear Unit |
Tipo de tolerancia (Opcional) | Especifica cómo se aplicará la tolerancia cuando el parámetro Método se defina como Círculo.
| String |
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. Sin embargo, dado que los polígonos procesados con esta herramienta presentarán ciertas irregularidades, es probable que los valores cercanos a 1 presenten una forma circular. Compruebe los resultados para identificar el valor mínimo de un edificio circular. A continuación, seleccione valores mayores o iguales que este valor antes de ejecutar esta herramienta con el valor del parámetro Método definido como Círculo.
Cambie el parámetro Método a 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, modifique 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 la opción 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 con el entorno Tipo de procesador. Si existen varias GPU, la GPU específica se puede definir mediante el entorno Id. de GPU.
Si la herramienta no puede 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
Cuando se utiliza el método Círculos con geometrías que tienen una gran variación de tamaño, utilizar la opción Relación de área para el parámetro Tipo de tolerancia puede producir mejores resultados que la opción Distancia, ya que la construcción de las entidades de salida se restringiría en función del tamaño de la geometría original en lugar de un tamaño fijo que pueda funcionar para un subconjunto limitado de las entidades originales.
Parámetros
arcpy.ddd.RegularizeBuildingFootprint(in_features, out_feature_class, method, tolerance, densification, precision, diagonal_penalty, min_radius, max_radius, {alignment_feature}, {alignment_tolerance}, {tolerance_type})
Nombre | 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á. | Feature Class |
method | Especifica el método de regularización que se utilizará para procesar las entidades de entrada.
| String |
tolerance | En la mayoría de los métodos, este valor representa la 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. Cuando se utiliza el método CIRCLE, esta opción también se puede interpretar como una relación de la diferencia entre la entidad original y su resultado regularizado respecto al área del resultado regularizado basado en la selección realizada en el parámetro tolerance_type. | 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 que se utiliza en el proceso de regularización. Los valores válidos varían de 0,05 a 0,25. | Double |
diagonal_penalty | Si se utiliza el método RIGHT_ANGLES_AND_DIAGONALS, este valor identifica la probabilidad de construir ángulos rectos o ejes diagonales entre dos segmentos adyacentes. Si se utiliza el método ANY_ANGLES, este valor identifica 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 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 CIRCLE. | Double |
alignment_feature (Opcional) | La entidad de línea que se utilizará para alinear la orientación de los polígonos regularizados. Cada polígono se alineará únicamente a una entidad de línea. | Feature Layer |
alignment_tolerance (Opcional) | El umbral de distancia máxima que se utilizará para buscar la entidad de alineación más cercana. Por ejemplo, un valor de 20 metros significa que se usará la línea más cercana que esté a una distancia máxima de 20 metros para alinear el polígono regularizado. | Linear Unit |
tolerance_type (Opcional) | Especifica cómo se aplicará la tolerancia cuando el parámetro method se establezca en CIRCLE.
| String |
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