Benachbarte Gebäudegrundrisse vereinfachen (3D Analyst)

Zusammenfassung

Vereinfacht Gebäudegrundrisse mit gemeinsamen Grenzen.

Verwendung

  • Dieses Werkzeug nutzt einen Polylinienkomprimierungsalgorithmus, um Verzerrungen in Gebäudegrundriss-Polygonen zu korrigieren, die durch Feature-Extraktions-Workflows erstellt wurden, die möglicherweise unerwünschte Artefakte erzeugen.

  • Bei der Vereinfachung von Gebäudegrundrissen, die aus Raster-Daten abgeleitet werden, sollte die Vereinfachungstoleranz größer sein als die Auflösung des Quell-Rasters.

  • Features mit benachbarten Grenzen müssen einen gemeinsamen Attributwert haben, um eine vereinfachte Grenze zu erstellen, die nicht mit einem anderen Feature überlappt. Ist kein gemeinsames Attribut verfügbar, erwägen Sie die folgenden Schritte:

    1. Verwenden Sie das Werkzeug Puffer mit einem Pufferabstand, der der gewünschten Vereinfachungstoleranz entspricht.
    2. Verarbeiten Sie die gepufferten Polygon-Features mit dem Werkzeug Vereinigen (Union), um ein einzelnes Feature für die überlappenden Polygone zu erstellen.
    3. Verwenden Sie das Werkzeug Räumliche Verbindung, um die eindeutige ID aus den vereinigten Polygonen den ursprünglichen Eingabe-Features hinzuzufügen, die vereinfacht wurde.
    4. Führen Sie das Werkzeug Benachbarte Gebäudegrundrisse vereinfachen mit dem Feld aus, das die eindeutige ID enthält, die im Gruppierfeld (Parameter group in Python) angegeben ist.
  • Sie können die Methode Alle Winkel für Eingabe-Features verwenden, die aus spitzen oder überstumpfen Innenwinkeln bestehen, oder wenn die Winkelkrümmung zwischen zwei Segmenten nicht auf einem 45°-Intervall zwischen 90° und 180° liegt.

  • Wenn das Werkzeug keine vereinfachte Lösung für eine bestimmte Eingabe erstellen kann, wird das ursprüngliche Feature in die Ausgabe kopiert. Der im Feld STATUS angegebene Wert gibt an, ob das Feature vereinfacht wurde:

    • 0: Vereinfachtes Feature
    • 1: Ursprüngliches Feature

Parameter

BeschriftungErläuterungDatentyp
Eingabe-Features

Die Eingabe-Features, die verarbeitet werden.

Feature Layer
Gruppierfeld

Das Feld, das verwendet wird, um zu bestimmen, welche Features lagegleiche, nicht überlappende Grenzen haben.

Field
Ausgabe-Feature-Class

Die Feature-Class, die erstellt wird.

Feature Class
Methode

Die Methode, die zur Vereinfachung der Eingabe-Features verwendet wird.

  • Rechte WinkelIdentifiziert die am besten passenden Liniensegmente für die Eingabe-Feature-Stützpunkte entlang der Winkel mit 90° und 180°.
  • Rechte Winkel und DiagonalenIdentifiziert die am besten passenden Liniensegmente für die Eingabe-Feature-Stützpunkte entlang der Innenwinkel mit 90°, 135° und 180°.
  • Alle WinkelIdentifiziert die am besten passende Linie, die an einem beliebigen Winkel liegt und zugleich die allgemeine Stützpunktzahl der Eingabe-Features reduziert.
String
Toleranz

Die maximale Entfernung, die der regularisierte Footprint von der Grenze seines ursprünglichen Features abweichen kann.

Linear Unit
Genauigkeit

Die Genauigkeit des räumlichen Gitters, das im Vereinfachungsprozess verwendet wird. Zulässig sind Werte im Bereich von 0.05 bis 0.25.

Double
Winkelabweichungslimit

Die maximale Abweichung der Innenwinkel der am besten passenden Linie, die bei Verwendung der Methode Rechte Winkel und Diagonalen (RIGHT_ANGLES_AND_DIAGONALS) toleriert wird. Dieser Wert sollte im Allgemeinen unter 5° liegen, um die besten Ergebnisse zu erzielen. Dieser Parameter ist für andere Vereinfachungsmethoden deaktiviert.

Double

arcpy.ddd.RegularizeAdjacentBuildingFootprint(in_features, group, out_feature_class, method, tolerance, precision, angular_limit)
NameErläuterungDatentyp
in_features

Die Eingabe-Features, die verarbeitet werden.

Feature Layer
group

Das Feld, das verwendet wird, um zu bestimmen, welche Features lagegleiche, nicht überlappende Grenzen haben.

Field
out_feature_class

Die Feature-Class, die erstellt wird.

Feature Class
method

Die Methode, die zur Vereinfachung der Eingabe-Features verwendet wird.

  • RIGHT_ANGLESIdentifiziert die am besten passenden Liniensegmente für die Eingabe-Feature-Stützpunkte entlang der Winkel mit 90° und 180°.
  • RIGHT_ANGLES_AND_DIAGONALSIdentifiziert die am besten passenden Liniensegmente für die Eingabe-Feature-Stützpunkte entlang der Innenwinkel mit 90°, 135° und 180°.
  • ANY_ANGLESIdentifiziert die am besten passende Linie, die an einem beliebigen Winkel liegt und zugleich die allgemeine Stützpunktzahl der Eingabe-Features reduziert.
String
tolerance

Die maximale Entfernung, die der regularisierte Footprint von der Grenze seines ursprünglichen Features abweichen kann.

Linear Unit
precision

Die Genauigkeit des räumlichen Gitters, das im Vereinfachungsprozess verwendet wird. Zulässig sind Werte im Bereich von 0.05 bis 0.25.

Double
angular_limit

Die maximale Abweichung der Innenwinkel der am besten passenden Linie, die bei Verwendung der Methode Rechte Winkel und Diagonalen (RIGHT_ANGLES_AND_DIAGONALS) toleriert wird. Dieser Wert sollte im Allgemeinen unter 5° liegen, um die besten Ergebnisse zu erzielen. Dieser Parameter ist für andere Vereinfachungsmethoden deaktiviert.

Double

Codebeispiel

RegularizeAdjacentBuildingFootprint – Beispiel 1 (Python-Fenster)

Im folgenden Beispiel wird die Verwendung dieses Werkzeugs im Python-Fenster veranschaulicht.

arcpy.env.workspace = 'c:/data'
arcpy.ddd.RegularizeAdjacentBuildingFootprint('rough_footprints.shp', 'Block_ID',
                                              'regularized_footprints.shp', 
                                              'RIGHT_ANGLES_AND_DIAGONALS', 
                                              '2 Meters', 0.10)
RegularizeAdjacentBuildingFootprint – Beispiel 2 (eigenständiges Skript)

Im folgenden Beispiel wird die Verwendung dieses Werkzeugs in einem eigenständigen Python-Skript veranschaulicht.

'''****************************************************************************
       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())

Lizenzinformationen

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

Verwandte Themen