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 normalisierte 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 Toleranzentfernung gepuffert wird.
Wenn Ihre Gebäudegrundrisse kreisförmige Strukturen enthalten, sollten diese Features zuerst verarbeitet werden. Ein Kompaktheitsverhältnis kann zum Identifizieren kreisförmiger Gebäude herangezogen werden. Führen Sie zum Berechnen dieses Wertes die folgenden Schritte aus:
- Fügen Sie ein Feld vom Typ "Double" hinzu.
- Berechnen Sie die folgende Formel anhand der Feldberechnung:
(4 * 3.14159265358979 * !shape.area!) / !shape.length! ^ 2
- Ein perfekter Kreis hat den Wert 1, da die mit diesem Werkzeug verarbeiteten Polygone jedoch in der Regel Unregelmäßigkeiten aufweisen, weisen Werte nahe bei 1 wahrscheinlich eher eine kreisförmige Form auf. Werten Sie Ihre Ergebnisse aus, um den Mindestwert eines kreisförmigen Gebäudes zu ermitteln, und wählen Sie Werte aus, die größer oder gleich diesem Wert sind, bevor Sie dieses Werkzeug mit der Methode CIRCLE ausführen.
Wenn die angegebenen Parameter keine normalisierte 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 normalisiert wurde:
- 0: Ursprüngliches Feature
- 1: Normalisiertes Feature
Syntax
RegularizeBuildingFootprint_3d (in_features, out_feature_class, method, tolerance, densification, precision, diagonal_penalty, min_radius, max_radius)
Parameter | 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 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. Dieser Parameter ist nur für die Methode CIRCLE verfügbar. | Double |
max_radius | Der größte Radius, den ein normalisierter Kreis aufweisen kann. Dieser Parameter ist nur für die 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
- ArcGIS Desktop Basic: Erfordert 3D Analyst
- ArcGIS Desktop Standard: Erfordert 3D Analyst
- ArcGIS Desktop Advanced: Erfordert 3D Analyst