Regularizar huella de edificios adyacentes (3D Analyst)

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:

    1. Use la herramienta Zona de influencia con una distancia de zona de influencia que se corresponda con la tolerancia de regularización deseada.
    2. 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.
    3. 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.
    4. 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

arcpy.3d.RegularizeAdjacentBuildingFootprint(in_features, group, out_feature_class, method, tolerance, precision, angular_limit)
ParámetroExplicaciónTipo 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.

  • RIGHT_ANGLESIdentifica los mejores segmentos de línea que encajan con los vértices de entidad de entrada a lo largo de ángulos de 90° y 180°.
  • RIGHT_ANGLES_AND_DIAGONALSIdentifica los mejores segmentos de línea que encajan con los vértices de entidad de entrada a lo largo de ángulos interiores de 90°, 135° y 180°.
  • ANY_ANGLESIdentifica la línea de mayor coincidencia que recae a lo largo de cualquier ángulo, a la vez que reduce el recuento total de vértices de 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

Ejemplo 1 de RegularizeAdjacentBuildingFootprint (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.RegularizeAdjacentBuildingFootprint('rough_footprints.shp', 'Block_ID',
                                              'regularized_footprints.shp', 
                                              'RIGHT_ANGLES_AND_DIAGONALS', 
                                              '2 Meters', 0.10)
Ejemplo 2 de RegularizeAdjacentBuildingFootprint (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())

Información de licenciamiento

  • Basic: Requiere 3D Analyst
  • Standard: Requiere 3D Analyst
  • Advanced: Requiere 3D Analyst

Temas relacionados