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.
Anhand des Toleranzwertes wird die Region um die Grenze des Polygons definiert, in der das vereinfachte Polygon liegen muss. Diese Region lässt sich am besten visualisieren, indem die Grenze des Polygons in ein Linien-Feature konvertiert und die Linie anschließend um die gewünschte Toleranz gepuffert wird.
Wenn Ihre Gebäudegrundrisse kreisförmige Strukturen enthalten, sollten diese Features zuerst verarbeitet werden. 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. Bewerten Sie Ihre 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 CIRCLE ausführen.
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
Syntax
arcpy.ddd.RegularizeBuildingFootprint(in_features, out_feature_class, method, tolerance, densification, precision, diagonal_penalty, min_radius, max_radius)
Parameter | Erklärung | Datentyp |
in_features | Die Polygone zur Darstellung des Gebäudegrundrisses, der normalisiert werden soll. | Feature Layer |
out_feature_class | Die Feature-Class, die von diesem Werkzeug 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, die vom räumlichen Gitter verwendet wird, das im Normalisierungsprozess bereitgestellt wird. Zulässig sind Werte im Bereich von 0.05 bis 0.25. | Double |
diagonal_penalty | Steuert die Entfernungsverzerrung für die Erstellung von Verbindungen von rechten Winkeln. Entfernungen, die kleiner sind als die diagonale Gewichtung, dienen zum Erstellen von rechten Winkeln. Dieser Parameter wird nur mit der Methode RIGHT_ANGLES_AND_DIAGONALS verwendet. | Double |
min_radius | Der kleinste Radius, den ein normalisierter Kreis aufweisen kann. 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 Radius, den ein normalisierter Kreis aufweisen kann. Diese Option ist nur bei der Methode "Kreis" verfügbar. | Double |
Codebeispiel
RegularizeBuildingFootprint – Beispiel 1 (Python-Fenster)
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)
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())
Umgebungen
Lizenzinformationen
- Basic: Erfordert 3D Analyst
- Standard: Erfordert 3D Analyst
- Advanced: Erfordert 3D Analyst