Résumé
Normalise l'emprise des polygones représentant un bâtiment en éliminant les artefacts indésirables dans leur géométrie.
Illustration
Utilisation
Cet outil fait appel à un algorithme de compression de polylignes pour corriger les distorsions des polygones d'emprise de bâtiment créés via des workflows d'extraction d'entités susceptibles de générer des artefacts indésirables.
La valeur de tolérance définit la région entourant la limite du polygone à laquelle le polygone régularisé doit s’adapter. Pour visualiser au mieux cette région, convertissez la limite du polygone en entité linéaire, puis bufférisez la ligne selon la distance de tolérance souhaitée.
Si les emprises de bâtiments comportent des structures circulaires, ces entités doivent être traitées en premier. Un ratio de compacité permet d'identifier les bâtiments circulaires. Pour calculer cette valeur, procédez comme suit :
- Ajoutez un champ de type double.
- Utilisez le calculateur de champs pour la formule suivante :
(4 * 3.14159265358979 * !shape.area!) / !shape.length! ** 2
- Un cercle parfait aura la valeur 1, mais comme les polygones généralement traités avec cet outil présentent des irrégularités, les valeurs plus proches de 1 sont davantage susceptibles d'avoir une forme circulaire. Evaluez vos résultats pour identifier la valeur minimum d'un bâtiment circulaire et sélectionnez les valeurs supérieures ou égales à cette valeur avant d'exécuter l'outil avec la méthode CERCLE.
Lorsque les paramètres spécifiés ne peuvent pas générer de solution régularisée pour une entrée donnée, l'entité d'origine est copiée dans la sortie. La valeur spécifiée dans la champ STATUS indique si l’entité a été régularisée ou non :
- 0 : entité régularisée
- 1 : entité d’origine
Syntaxe
arcpy.ddd.RegularizeBuildingFootprint(in_features, out_feature_class, method, tolerance, densification, precision, diagonal_penalty, min_radius, max_radius)
Paramètre | Explication | Type de données |
in_features | Polygones représentant les emprises de bâtiment à régulariser. | Feature Layer |
out_feature_class | Classe d'entités qui va être produite par cet outil. | Feature Class |
method | Méthode de régularisation à utiliser pour le traitement des entités en entrée.
| String |
tolerance | Distance maximale selon laquelle l'emprise régularisée peut s'écarter de la limite de son entité d'origine. La valeur spécifiée repose sur les unités linéaires du système de coordonnées de l'entité en entrée. | Double |
densification | Intervalle d'échantillonnage qui permet de déterminer si l'entité régularisée est droite ou courbée. La densification doit être égale ou inférieure à la valeur de tolérance. Ce paramètre est uniquement utilisé avec des méthodes prenant en charge l'identification des angles droits. | Double |
precision | Précision utilisée par l'index spatial employé au cours du processus de régularisation. Les valeurs correctes sont comprises entre 0.05 et 0.25. | Double |
diagonal_penalty | Contrôle la déformation de distance afin de créer des connexions à angle droit. Des distances inférieures à la pénalité diagonale seront utilisées pour créer des angles droits. Ce paramètre est uniquement utilisé avec la méthode RIGHT_ANGLES_AND_DIAGONALS. | Double |
min_radius | Plus petit rayon dont peut disposer un cercle régularisé. La valeur 0 indique qu'aucune limite de taille minimum n'est imposée. Cette option est uniquement disponible avec la méthode CIRCLE. | Double |
max_radius | Plus grand rayon dont peut disposer un cercle circulaire. Cette option est uniquement disponible avec la méthode Cercle. | Double |
Exemple de code
Exemple 1 d'utilisation de l'outil RegularizeBuildingFootprint (fenêtre Python)
L'exemple suivant illustre l'utilisation de cet outil dans la fenêtre Python.
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)
Exemple 2 d'utilisation de l'outil RegularizeBuildingFootprint (script autonome)
L'exemple suivant illustre l'utilisation de cet outil dans un script Python autonome.
'''****************************************************************************
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())
Environnements
Informations de licence
- Basic: Requiert 3D Analyst
- Standard: Requiert 3D Analyst
- Advanced: Requiert 3D Analyst