Gebäudegrundriss vereinfachen (3D Analyst)

Zusammenfassung

Vereinfacht den Footprint von Gebäude-Polygonen, indem unerwünschte Artefakte in deren Geometrie entfernt werden.

Abbildung

Abbildung des Werkzeugs "Gebäudegrundriss vereinfachen"

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.

  • Wenn Ihre Gebäude-Footprints kreisförmige Strukturen enthalten, verarbeiten Sie diese Features zuerst. Kreisförmige Gebäude können anhand eines Kompaktheitsverhältnisses identifiziert werden. Um diesen Wert zu berechnen, führen Sie die folgenden Schritte aus:

    1. Fügen Sie ein Feld vom Typ "Double" hinzu.
    2. Berechnen Sie die folgende Formel mithilfe der Feldberechnung:
      (4 * 3.14159265358979 * !shape.area!) / !shape.length! ** 2
    3. Ein perfekter Kreis hat den Wert 1. Da die Polygone, die mit diesem Werkzeug verarbeitet werden, jedoch einige Unregelmäßigkeiten aufweisen, bedeuten Werte nahe 1 meist eine Kreisform. Identifizieren Sie in den Ergebnissen den Minimalwert eines kreisförmigen Gebäudes. Wählen Sie anschließend Werte aus, die größer als dieser Wert sind oder diesem entsprechen, bevor Sie dieses Werkzeug mit der Option Kreis für den Parameter Methode ausführen.
  • Legen Sie den Parameter Methode auf Alle Winkel fest, wenn die Gebäude-Footprints Geometrien mit Kanten darstellen, die eine Kombination aus Winkeln mit beispielsweise 45- und 90-Grad-Biegungen bilden. Wählen Sie zunächst eine Teilmenge von Features aus, die unregelmäßige Kanten enthalten, und ermitteln Sie, welcher Wert für die diagonale Gewichtung zum gewünschten Ergebnis führt. Wenn im Ergebnis diagonale Kanten nicht angemessen erfasst sind, ändern Sie den Toleranzwert, um die Vereinfachungszone einzuschränken und die diagonale Gewichtung schrittweise zu verringern. Wenn das Ergebnis unerwünschte Kanten mit spitzen Innenwinkeln enthält, führen Sie das Werkzeug wiederholt aus, und erhöhen Sie dabei die diagonale Gewichtung, bis das gewünschte Ergebnis erreicht ist. Verwenden Sie diesen Wert dann zur Verarbeitung des gesamten Datasets.

  • Wenn die Option Alle Winkel auf einem Computer mit einer NVIDIA-Grafikkarte verwendet wird, die CUDA unterstützt und über mehr als 2 GB Arbeitsspeicher verfügt, wird zum Ausführen des Werkzeugs die GPU genutzt. Dieses Verhalten können Sie über die Umgebungseinstellung Prozessortyp ändern. Wenn mehrere GPUs vorhanden sind, kann mit der Umgebungseinstellung GPU-ID die spezifische GPU ausgewählt werden.

  • 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
  • Bei Verwendung der Methode Kreise für Geometrien mit stark variierender Größe erhalten Sie mit der Option Flächenverhältnis für den Parameter Toleranztyp möglicherweise bessere Ergebnisse als mit der Option Entfernung, da die Erstellung der Ausgabe-Features durch die Größe der ursprünglichen Geometrie eingeschränkt wird. Eine feste Größe dagegen eignet sich möglicherweise für ein begrenztes Subset der ursprünglichen Features.

Parameter

BeschriftungErläuterungDatentyp
Eingabe-Features

Die Polygone zur Darstellung des Gebäudegrundrisses, der vereinfacht werden soll.

Feature Layer
Ausgabe-Feature-Class

Die Feature-Class, die erstellt wird.

Feature Class
Methode

Gibt die Vereinfachungsmethode an, die bei der Verarbeitung der Eingabe-Features verwendet wird.

  • Rechte WinkelEs werden Formen, die aus 90-Grad-Winkeln zwischen benachbarten Kanten bestehen, erstellt.
  • Rechte Winkel und DiagonalenEs werden Formen, die aus 45- und 90-Grad-Winkeln zwischen benachbarten Kanten bestehen, erstellt.
  • Alle WinkelEs werden Formen, die einen beliebigen Winkel zwischen benachbarten Kanten bilden, erstellt.
  • KreisUm die Eingabe-Features wird der am besten passende Kreis erstellt.
String
Toleranz

Bei den meisten Methoden stellt dieser Wert die maximale Entfernung dar, die der vereinfachte Grundriss von der Grenze seines ursprünglichen Features abweichen kann. Der angegebene Wert basiert auf den linearen Einheiten des Koordinatensystems des Eingabe-Features. Bei Verwendung der Methode Kreis kann diese Option auch als Verhältnis zwischen der Differenz zwischen dem ursprünglichen Feature und seinem vereinfachten Ergebnis und der Fläche des vereinfachten Ergebnisses auf Basis der im Parameter Toleranztyp vorgenommen Auswahl interpretiert werden.

Double
Verdichtung

Das Beispielintervall, anhand dessen ausgewertet wird, ob das vereinfachte Feature gerade oder gekrümmt ist. Die Verdichtung muss gleich dem oder kleiner als der Toleranzwert sein.

Dieser Parameter wird nur mit Methoden verwendet, die die Identifizierung rechter Winkel unterstützen.

Double
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
Diagonale Gewichtung

Wenn die Methode Rechte Winkel und Diagonalen verwendet wird, bestimmt dieser Wert die Wahrscheinlichkeit, mit der rechte Winkel oder diagonale Kanten zwischen zwei benachbarten Segmenten erstellt werden. Wenn die Methode Alle Winkel verwendet wird, bestimmt dieser Wert die Wahrscheinlichkeit, mit der diagonale Kanten erstellt werden, die nicht mit den durch den Algorithmus des Werkzeugs festgelegten bevorzugten Kanten übereinstimmen. Wenn der Gewichtungswert auf 0 festgelegt wird, werden die bevorzugten Kanten nicht verwendet, was zur Folge hat, dass ein vereinfachtes unregelmäßiges Polygon erstellt wird. Generell gilt: Je höher der Wert, desto geringer ist die Wahrscheinlichkeit, dass eine diagonale Kante erstellt wird.

Double
Minimaler Radius

Der kleinste für einen vereinfachten Kreis zulässige Radius. Der Wert 0 impliziert, dass keine minimale Größenbeschränkung vorhanden ist. Diese Option ist nur bei der Methode Kreis verfügbar.

Double
Maximaler Radius

Der größte für einen vereinfachten Kreis zulässige Radius. Diese Option ist nur bei der Methode Kreis verfügbar.

Double
Ausrichtungs-Feature
(optional)

Das Linien-Feature, mit dem die Ausrichtung der vereinfachten Polygone eingestellt wird. Jedes Polygon wird nur an einem Linien-Feature ausgerichtet.

Feature Layer
Ausrichtungstoleranz
(optional)

Der maximale Entfernungsschwellenwert, mit dem das nächstgelegene Ausrichtungs-Feature bestimmt wird. Ein Wert von beispielsweise 20 bedeutet, dass die nächstgelegene Linie, die innerhalb einer Entfernung von 20 Metern liegt, für die Ausrichtung des vereinfachten Polygons verwendet wird.

Linear Unit
Toleranztyp
(optional)

Gibt an, wie die Toleranz angewendet wird, wenn der Parameter Methode auf Kreis festgelegt wurde.

  • EntfernungDie Toleranz stellt die maximale Entfernung von der Grenze des verarbeiteten Features dar. Dies ist die Standardeinstellung.
  • FlächenverhältnisDie Toleranz stellt den maximalen Grenzwert für das Verhältnis zwischen der Fläche des ursprünglichen Features, die vom vereinfachten Kreis abweicht, und der Fläche des vereinfachten Kreises dar.
String

arcpy.ddd.RegularizeBuildingFootprint(in_features, out_feature_class, method, tolerance, densification, precision, diagonal_penalty, min_radius, max_radius, {alignment_feature}, {alignment_tolerance}, {tolerance_type})
NameErläuterungDatentyp
in_features

Die Polygone zur Darstellung des Gebäudegrundrisses, der vereinfacht werden soll.

Feature Layer
out_feature_class

Die Feature-Class, die erstellt wird.

Feature Class
method

Gibt die Vereinfachungsmethode an, die bei der Verarbeitung der Eingabe-Features verwendet wird.

  • RIGHT_ANGLESEs werden Formen, die aus 90-Grad-Winkeln zwischen benachbarten Kanten bestehen, erstellt.
  • RIGHT_ANGLES_AND_DIAGONALSEs werden Formen, die aus 45- und 90-Grad-Winkeln zwischen benachbarten Kanten bestehen, erstellt.
  • ANY_ANGLEEs werden Formen, die einen beliebigen Winkel zwischen benachbarten Kanten bilden, erstellt.
  • CIRCLEUm die Eingabe-Features wird der am besten passende Kreis erstellt.
String
tolerance

Bei den meisten Methoden stellt dieser Wert die maximale Entfernung dar, die der vereinfachte Grundriss von der Grenze seines ursprünglichen Features abweichen kann. Der angegebene Wert basiert auf den linearen Einheiten des Koordinatensystems des Eingabe-Features. Bei Verwendung der Methode CIRCLE kann diese Option auch als Verhältnis zwischen der Differenz zwischen dem ursprünglichen Feature und seinem vereinfachten Ergebnis und der Fläche des vereinfachten Ergebnisses auf Basis der im Parameter tolerance_type vorgenommen Auswahl interpretiert werden.

Double
densification

Das Beispielintervall, anhand dessen ausgewertet wird, ob das vereinfachte Feature gerade oder gekrümmt ist. Die Verdichtung muss gleich dem oder kleiner als der Toleranzwert sein.

Dieser Parameter wird nur mit Methoden verwendet, die die Identifizierung rechter Winkel unterstützen.

Double
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
diagonal_penalty

Wenn die Methode RIGHT_ANGLES_AND_DIAGONALS verwendet wird, bestimmt dieser Wert die Wahrscheinlichkeit, mit der rechte Winkel oder diagonale Kanten zwischen zwei benachbarten Segmenten erstellt werden. Wenn die Methode ANY_ANGLES verwendet wird, bestimmt dieser Wert die Wahrscheinlichkeit, mit der diagonale Kanten erstellt werden, die nicht mit den durch den Algorithmus des Werkzeugs festgelegten bevorzugten Kanten übereinstimmen. Generell gilt: Je höher der Wert, desto geringer ist die Wahrscheinlichkeit, dass eine diagonale Kante erstellt wird.

Double
min_radius

Der kleinste für einen vereinfachten Kreis zulässige Radius. Der Wert 0 impliziert, dass keine minimale Größenbeschränkung vorhanden ist. Diese Option ist nur für die Methode CIRCLE verfügbar.

Double
max_radius

Der größte für einen vereinfachten Kreis zulässige Radius. Diese Option ist nur für die Methode CIRCLE verfügbar.

Double
alignment_feature
(optional)

Das Linien-Feature, mit dem die Ausrichtung der vereinfachten Polygone eingestellt wird. Jedes Polygon wird nur an einem Linien-Feature ausgerichtet.

Feature Layer
alignment_tolerance
(optional)

Der maximale Entfernungsschwellenwert, mit dem das nächstgelegene Ausrichtungs-Feature bestimmt wird. Ein Wert von beispielsweise 20 bedeutet, dass die nächstgelegene Linie, die innerhalb einer Entfernung von 20 Metern liegt, für die Ausrichtung des vereinfachten Polygons verwendet wird.

Linear Unit
tolerance_type
(optional)

Gibt an, wie die Toleranz angewendet wird, wenn der Parameter method auf CIRCLE festgelegt wurde.

  • DISTANCEDie Toleranz stellt die maximale Entfernung von der Grenze des verarbeiteten Features dar. Dies ist die Standardeinstellung.
  • AREA_RATIODie Toleranz stellt den maximalen Grenzwert für das Verhältnis zwischen der Fläche des ursprünglichen Features, die vom vereinfachten Kreis abweicht, und der Fläche des vereinfachten Kreises dar.
String

Codebeispiel

RegularizeBuildingFootprint – Beispiel 1 (Python-Fenster)

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

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)
RegularizeBuildingFootprint – 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