Régulariser l'emprise de bâtiment (3D Analyst)

Synthèse

Normalise l'emprise des polygones de bâtiment en éliminant les artefacts indésirables dans leur géométrie.

Illustration

Illustration de l’outil Régulariser l’emprise de bâtiment

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 :

    1. Ajoutez un champ de type double.
    2. Utilisez le calculateur de champs pour la formule suivante :
      (4 * 3.14159265358979 * !shape.area!) / !shape.length! ** 2
    3. 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

ÉtiquetteExplicationType 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.

  • Angles droitsDes formes composées d’angles à 90° entre des segments adjacents sont construites.
  • Angles droits et diagonalesDes formes composées d’angles à 45° et 90° entre des segments adjacents sont construites.
  • Tous les anglesDes formes qui dessinent des angles quelconques entre des segments adjacents sont construites.
  • CercleLe cercle qui épouse le mieux les entités en entrée est construit.
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.

  • DistanceLa tolérance représente la distance maximale à partir de la limite de l’entité en cours de traitement. Il s’agit de l’option par défaut.
  • Rapport de surfaceLa tolérance représente la limite maximale du rapport entre la surface de l’entité d’origine qui diffère du cercle régularisé et la surface du cercle régularisé.
String

arcpy.ddd.RegularizeBuildingFootprint(in_features, out_feature_class, method, tolerance, densification, precision, diagonal_penalty, min_radius, max_radius, {alignment_feature}, {alignment_tolerance}, {tolerance_type})
NomExplicationType 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.

  • RIGHT_ANGLESDes formes composées d’angles à 90° entre des segments adjacents sont construites.
  • RIGHT_ANGLES_AND_DIAGONALSDes formes composées d’angles à 45° et 90° entre des segments adjacents sont construites.
  • ANY_ANGLEDes formes qui dessinent des angles quelconques entre des segments adjacents sont construites.
  • CIRCLELe cercle qui épouse le mieux les entités en entrée est construit.
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.

  • DISTANCELa tolérance représente la distance maximale à partir de la limite de l’entité en cours de traitement. Il s’agit de l’option par défaut.
  • AREA_RATIOLa tolérance représente la limite maximale du rapport entre la surface de l’entité d’origine qui diffère du cercle régularisé et la surface du cercle régularisé.
String

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())

Informations de licence

  • Basic: Nécessite 3D Analyst
  • Standard: Nécessite 3D Analyst
  • Advanced: Nécessite 3D Analyst

Rubriques connexes