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:
- Verwenden Sie das Werkzeug Puffer mit einem Pufferabstand, der der gewünschten Vereinfachungstoleranz entspricht.
- Verarbeiten Sie die gepufferten Polygon-Features mit dem Werkzeug Vereinigen (Union), um ein einzelnes Feature für die überlappenden Polygone zu erstellen.
- 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.
- 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 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.3d.RegularizeAdjacentBuildingFootprint(in_features, group, out_feature_class, method, tolerance, precision, angular_limit)
Parameter | Erklärung | Datentyp |
in_features | Die zu verarbeitenden Eingabe-Features. | 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 von diesem Werkzeug erstellt wird. | Feature Class |
method | Die Methode, die zur Vereinfachung der Eingabe-Features verwendet wird.
| 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
Anhand des folgenden Beispiels 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)
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