Beschriftung | Erläuterung | Datentyp |
Eingabe-Features
| Die Polygone zur Darstellung des Gebäudegrundrisses, der normalisiert werden soll. | Feature Layer |
Ausgabe-Feature-Class | Die Feature-Class, die erstellt wird. | Feature Class |
Methode
| Die Normalisierungsmethode, die bei der Verarbeitung der Eingabe-Features verwendet werden soll.
| String |
Toleranz
| Die maximale Entfernung, die der normalisierte Gebäudegrundriss von der Grenze seines ursprünglichen Features abweichen kann. Der angegebene Wert basiert auf den linearen Einheiten des Koordinatensystems des Eingabe-Features. | Double |
Verdichtung
| Das Beispielintervall, anhand dessen ausgewertet wird, ob das normalisierte 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 |
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 |
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 bei der Methode Kreis verfügbar. | Double |
Max. Radius
| Der größte für einen vereinfachten Kreis zulässige Radius. Diese Option ist nur bei der Methode Kreis verfügbar. | Double |
Zusammenfassung
Normalisiert den Footprint von Gebäude-Polygonen, indem unerwünschte Artefakte in deren Geometrie entfernt werden.
Abbildung
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:
- Fügen Sie ein Feld vom Typ "Double" hinzu.
- Berechnen Sie die folgende Formel mithilfe der Feldberechnung:
(4 * 3.14159265358979 * !shape.area!) / !shape.length! ** 2
- Ein perfekter Kreis hat den Wert 1. Da die Polygone, die in der Regel mit diesem Werkzeug verarbeitet werden, jedoch einige Unregelmäßigkeiten aufweisen, geben Werte, die näher bei 1 liegen, eher eine Kreisform an. Prüfen Sie die Ergebnisse, um den Minimalwert eines kreisförmigen Gebäudes zu identifizieren, und wählen Sie Werte aus, die größer als dieser Wert sind oder diesem entsprechen, bevor Sie dieses Werkzeug mit der Methode Kreis ausführen.
Wenn die Gebäude-Footprints Geometrien mit Kanten darstellen, die eine Kombination aus Winkeln mit Biegungen u. a. um 45 Grad und 90 Grad bilden, sollten Sie die Methode Alle Winkel verwenden. 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, sollten Sie den Toleranzwert ändern, 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 dabei die diagonale Gewichtung, bis das gewünschte Ergebnis erreicht ist. Verwenden Sie diesen Wert dann zur Verarbeitung des gesamten Datasets.
Wenn die Methode 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 gewünschte GPU ausgewählt werden.
Wenn die angegebenen Parameter keine vereinfachte Lösung für eine bestimmte Eingabe erstellen können, 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
arcpy.ddd.RegularizeBuildingFootprint(in_features, out_feature_class, method, tolerance, densification, precision, diagonal_penalty, min_radius, max_radius)
Name | Erläuterung | Datentyp |
in_features | Die Polygone zur Darstellung des Gebäudegrundrisses, der normalisiert werden soll. | Feature Layer |
out_feature_class | Die Feature-Class, die erstellt wird. | Feature Class |
method | Die Normalisierungsmethode, die bei der Verarbeitung der Eingabe-Features verwendet werden soll.
| String |
tolerance | Die maximale Entfernung, die der normalisierte Gebäudegrundriss von der Grenze seines ursprünglichen Features abweichen kann. Der angegebene Wert basiert auf den linearen Einheiten des Koordinatensystems des Eingabe-Features. | Double |
densification | Das Beispielintervall, anhand dessen ausgewertet wird, ob das normalisierte 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 |
Codebeispiel
Anhand des folgenden Beispiels 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)
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())
Umgebungen
Sonderfälle
Lizenzinformationen
- Basic: Erfordert 3D Analyst
- Standard: Erfordert 3D Analyst
- Advanced: Erfordert 3D Analyst