Étiquette | Explication | Type de données |
Entités en entrée | Polygones représentant les emprises de bâtiment à régulariser. | Feature Layer |
Classe d’entités en sortie | Classe d’entités qui va être produite. | Feature Class |
Méthode | Désigne la méthode de régularisation utilisée pour le traitement des entités en entrée.
| String |
Tolérance | Pour la plupart des méthodes, cette valeur représente la 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. Si vous utilisez la méthode Cercle, cette option peut également être interprétée comme étant un rapport de la différence entre l’entité d’origine et son résultat régularisé en fonction du choix qui a été fait dans le paramètre Type de tolérance. | 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 |
Précision | Précision de la grille spatiale utilisée au cours du processus de régularisation. Les valeurs correctes sont comprises entre 0.05 et 0.25. | Double |
Pénalité diagonale | Si vous utilisez la méthode Angles droits et diagonales, cette valeur indique la probabilité de construire des angles droits ou des segments en diagonale entre deux segments adjacents. Si vous utilisez la méthode Angles quelconques, cette valeur indique la probabilité de construire des segments en diagonale qui ne sont pas conformes aux segments préférés déterminés par l’algorithme de l’outil. Si la valeur de pénalité est définie sur 0, les tronçons préférés ne seront pas utilisés, ce qui crée un polygone irrégulier simplifié. Généralement, plus la valeur est élevée, plus il devient improbable qu’un tronçon diagonal soit créé. | Double |
Rayon minimum | Plus petit rayon autorisé pour 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 Cercle. | Double |
Rayon maximal | Plus grand rayon autorisé pour un cercle régularisé. Cette option est uniquement disponible avec la méthode Cercle. | Double |
Entité d’alignement (Facultatif) | Entité linéaire utilisée pour aligner l’orientation des polygones régularisés. Chaque polygone est aligné sur une seule entité linéaire. | Feature Layer |
Tolérance d’alignement (Facultatif) | Seuil de distance maximale utilisé pour rechercher l’entité d’alignement la plus proche. Par exemple, avec une valeur de 20 mètres, la ligne la plus proche qui se situe à moins de 20 mètres est utilisée pour aligner le polygone régularisé. | Linear Unit |
Type de tolérance (Facultatif) | Spécifie la manière d’appliquer la tolérance lorsque le paramètre Méthode est défini sur Cercle.
| String |
Synthèse
Normalise l'emprise des polygones de bâtiment en éliminant les artefacts indésirables dans leur géométrie.
Illustration
Utilisation
Cet outil utilise un algorithme de compression polyligne pour corriger les distorsions issues de la création des polygones d’emprise à l’aide de processus d’extraction d’entité qui peuvent générer des artefacts indésirables.
Si vos emprises de bâtiment contiennent des structures circulaires, traitez ces entités 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 a la valeur 1. Néanmoins, comme les polygones traités avec cet outil présentent quelques irrégularités, les valeurs proches de 1 sont susceptibles de correspondre à une forme circulaire. Vérifiez les résultats pour identifier la valeur minimale d’un bâtiment circulaire. Ensuite, sélectionnez les valeurs supérieures ou égales à cette valeur avant d’exécuter l’outil avec le paramètre Méthode défini sur Cercle.
Définissez le paramètre Méthode sur Angles quelconques si les emprises de bâtiment représentent des géométries dont les segments forment un ensemble d’angles qui incluent, sans s’y limiter, des courbes à 45° et 90°. Commencez par sélectionner un sous-ensemble d’entités contenant des tronçons irréguliers et recherchez la valeur de pénalité diagonale qui donne le résultat souhaité. Si le résultat ne capture pas les tronçons diagonaux de manière adéquate, modifiez la valeur de tolérance afin de contraindre la zone de régularisation et de diminuer de manière incrémentielle la pénalité diagonale. Si la sortie comprend des segments indésirables avec des angles intérieurs aigus, exécutez l’outil de façon itérative tout en augmentant la pénalité diagonale par incréments jusqu’à obtenir la sortie souhaitée. Utilisez ensuite cette valeur pour traiter l’intégralité du jeu de données.
Lorsque vous utilisez l’option Angles quelconques sur un ordinateur doté d’une carte graphique NVIDIA prenant en charge l’architecture CUDA et avec plus de 2 Go de mémoire, l’outil utilise le GPU pour effectuer cette opération. Vous pouvez modifier ce comportement avec l’environnement Type de processeur. S’il existe plusieurs processeurs graphiques, le processeur graphique spécifique peut être défini à l’aide de l’environnement ID du processeur graphique.
Lorsque l’outil ne peut 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 du champ STATUS indique si l’entité a été régularisée comme suit :
- 0 : entité régularisée
- 1 : entité d’origine
Si vous utilisez la méthode Circles (Cercles) avec des géométries présentant d’importantes variations de taille, l’utilisation de l’option Area Ratio (Rapport de surface) du paramètre Tolerance Type (Type de tolérance) peut donner de meilleurs résultats que l’option Distance, étant donné que la construction des entités en sortie est limitée par la taille de la géométrie d’origine, par opposition à une taille fixe qui peut fonctionner pour un sous-ensemble limité des entités d’origine.
Paramètres
arcpy.ddd.RegularizeBuildingFootprint(in_features, out_feature_class, method, tolerance, densification, precision, diagonal_penalty, min_radius, max_radius, {alignment_feature}, {alignment_tolerance}, {tolerance_type})
Nom | 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. | Feature Class |
method | Désigne la méthode de régularisation utilisée pour le traitement des entités en entrée.
| String |
tolerance | Pour la plupart des méthodes, cette valeur représente la 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. Si vous utilisez la méthode CIRCLE, cette option peut également être interprétée comme étant un rapport de la différence entre l’entité d’origine et son résultat régularisé par rapport à la surface du résultat régularisé en fonction du choix qui a été fait dans le paramètre tolerance_type. | 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 de la grille spatiale utilisée au cours du processus de régularisation. Les valeurs correctes sont comprises entre 0.05 et 0.25. | Double |
diagonal_penalty | Si vous utilisez la méthode RIGHT_ANGLES_AND_DIAGONALS, cette valeur indique la probabilité de construire des angles droits ou des segments en diagonale entre deux segments adjacents. Si vous utilisez la méthode ANY_ANGLES, cette valeur indique la probabilité de construire des segments en diagonale qui ne sont pas conformes aux segments préférés déterminés par l’algorithme de l’outil. Généralement, plus la valeur est élevée, plus il devient improbable qu’un tronçon diagonal soit créé. | Double |
min_radius | Plus petit rayon autorisé pour 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 autorisé pour un cercle régularisé. Cette option est uniquement disponible avec la méthode CIRCLE. | Double |
alignment_feature (Facultatif) | Entité linéaire utilisée pour aligner l’orientation des polygones régularisés. Chaque polygone est aligné sur une seule entité linéaire. | Feature Layer |
alignment_tolerance (Facultatif) | Seuil de distance maximale utilisé pour rechercher l’entité d’alignement la plus proche. Par exemple, avec une valeur de 20 mètres, la ligne la plus proche qui se situe à moins de 20 mètres est utilisée pour aligner le polygone régularisé. | Linear Unit |
tolerance_type (Facultatif) | Spécifie la manière d’appliquer la tolérance lorsque le paramètre method est défini sur CIRCLE.
| String |
Exemple de code
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)
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: Nécessite 3D Analyst
- Standard: Nécessite 3D Analyst
- Advanced: Nécessite 3D Analyst
Rubriques connexes
Vous avez un commentaire à formuler concernant cette rubrique ?