Réparer les géométries (Gestion des données)

Résumé

Inspecte chaque entité dans une classe d'entités à la recherche de problèmes de géométrie. Si un problème est découvert, une solution est appliquée et une description d’une ligne identifie l’entité ainsi que le problème de géométrie résolu.

Cet outil utilise la même logique que l’outil Vérifier les géométries pour résoudre les problèmes de géométrie.

Pour en savoir plus sur la vérification et la réparation des géométries

Utilisation

    Attention :

    Cet outil modifie les données en entrée. Pour plus d’informations et connaître les stratégies permettant d’empêcher les modifications de données indésirables, reportez-vous à la rubrique Outils qui modifient ou mettent à jour les données en entrée.

  • Les formats valides en entrée sont les shapefiles et les classes d’entités stockés dans un fichier ou une géodatabase d’entreprise. Les types spatiaux suivants sont pris en charge pour les classes d’entités stockées dans une géodatabase d’entreprise :

    • Géométrie et géographie Microsoft SQL Server
    • Géométrie et géographie PostgreSQL PostGIS
    • Géométrie SDO Oracle

  • Le bouton à bascule Enable Undo (Activer l’annulation) n’est pas valide pour les entrées issues d’une géodatabase d’entreprise.

  • Vous trouverez ci-dessous la liste des problèmes géométriques et le correctif correspondant que l'outil appliquera :

    • Null geometry : l'enregistrement sera supprimé de la classe d'entités. Pour conserver les enregistrements avec une géométrie nulle, désactivez Delete Features with Null Geometry (Supprimer les entités de géométrie nulle) (utilisez l’option KEEP_NULL dans le paramètre delete_null dans Python).
    • Short segment : le segment court de la géométrie sera supprimé.
    • Incorrect ring ordering : la géométrie sera mise à jour conformément à l’ordre correct des boucles.
    • Incorrect segment orientation : la géométrie sera mise à jour conformément à la bonne orientation des segments.
    • Self intersections : les surfaces superposées dans un polygone seront fusionnées.
    • Unclosed rings : les boucles non fermées seront fermées en connectant les extrémités des boucles.
    • Empty parts : les parties dont la valeur est Null ou qui sont vides seront supprimées.
    • Duplicate vertex : un des sommets sera supprimé.
    • Mismatched attributes : la coordonnée z ou m sera mise à jour pour être appariée.
    • Discontinuous parts : plusieurs parties seront créées à partir de la partie discontinue existante.
    • Empty Z values : la valeur z sera définie sur 0.
    • Bad envelope : l'enveloppe de l'entité sera rectifiée.

    Vous trouverez ci-dessous la liste des problèmes géométriques liés aux données stockées dans une géodatabase d’entreprise et le correctif correspondant que l’outil applique :

    • NEEDS_REORDERING : la forme est réorganisée et les points doubles sont supprimés.
    • SE_INVALID_ENTITY_TYPE : non réparable (l’entité doit être supprimée).
    • SE_SHAPE_INTEGRITY_ERROR : pas toujours réparable.
    • SE_INVALID_SHAPE_OBJECT : pas toujours réparable.
    • SE_COORD_OUT_OF_BOUNDS : non réparable.
    • SE_POLY_SHELLS_OVERLAP : les enveloppes superposées sont fusionnées.
    • SE_TOO_FEW_POINTS : non réparable.
    • SE_INVALID_PART_SEPARATOR : pas toujours réparable.
    • SE_INVALID_POLYGON_CLOSURE : les enveloppes non fermées sont ignorées (le polygone final risque d’être vide).
    • SE_INVALID_OUTER_SHELL : une tentative de réparer les enveloppes extérieures de l’entité est réalisée ; les enveloppes peuvent être ignorées durant le traitement.
    • SE_ZERO_AREA_POLYGON : converti en forme vide.
    • SE_POLYGON_HAS_VERTICAL_LINE : la ligne verticale est supprimée (la forme peut être convertie en 2D).
    • SE_OUTER_SHELLS_OVERLAP : les parties superposées sont fusionnées.
    • SE_SELF_INTERSECTING : les points d’intersection sont ajoutés au besoin.

    Remarque :

    Il est possible que certains problèmes associés aux données stockées dans une base de données d'entreprise ne puissent pas être résolus avec les outils ArcGIS.

  • Après avoir appliqué un correctif, l’outil réévalue la géométrie qui en résulte, et si un autre problème est découvert, une solution appropriée est appliquée au problème. Par exemple, la correction d'une géométrie avec le problème Incorrect ring ordering peut donner lieu à une géométrie avec le problème Null geometry.

  • Il n'existe aucun correctif dans Réparer les géométries pour bad dataset extent. Pour résoudre ce problème, exécutez l'outil Recalculer l'étendue de la classe d'entités sur le jeu de données.

  • La méthode de validation de Esri permet de s’assurer que la géométrie est topologiquement correcte à l’aide de la méthode Simplifier de Esri. La validation d’Esri est seulement disponible pour les données stockées dans une géodatabase d’entreprise.

  • La méthode de validation de l’Open Geospatial Consortium (OGC) permet de s’assurer que la géométrie est conforme à la spécification de l’OGC telle qu’elle est définie dans OpenGIS Implementation Standard for Geographic information – simple feature access – Part 1: common architecture.

  • Lorsque la géométrie d'une entité est réparée à l'aide de l'option OGC, les mises à jour ou modifications ultérieures peuvent entraîner la non-conformité de la géométrie avec la spécification de l'OGC. Lorsqu’une entité est modifiée, exécutez l’outil Vérifier les géométries pour rechercher d’éventuels nouveaux problèmes géométriques. Le cas échéant, réexécutez l'outil Réparer les géométries.

  • La simplification de l'OGC ne prend pas en charge les segments non linéaires, tels que les courbes de Bézier, les arcs circulaires et les arcs elliptiques. Ces types de segments doivent être densifiés à l’aide de l’outil Densifier dans le jeu de données en entrée avant d’exécuter Réparer les géométries. Pour ne pas modifier de façon irréversible les segments non linéaires lors de l'exécution de l'outil Densifier, effectuez d'abord une copie des données. Appliquez ensuite l’outil Réparer les géométries à la copie. Pour savoir si vos données comportent des segments non linéaires, utilisez l'outil Ajouter des attributs géométriques.

Syntaxe

arcpy.management.RepairGeometry(in_features, {delete_null}, {validation_method})
ParamètreExplicationType de données
in_features

La classe d'entités ou la couche à traiter.

Feature Layer
delete_null
(Facultatif)

Détermine si les entités de géométrie nulle seront supprimées.

  • DELETE_NULL Les entités de géométrie nulle seront supprimées de l’entrée. Il s’agit de l’option par défaut.
  • KEEP_NULL Les entités de géométrie nulle ne seront pas supprimées de l’entrée.

Remarque :
Seul KEEP_NULL est valide pour les entrées issues d’une géodatabase d’entreprise.

Boolean
validation_method
(Facultatif)

Indique la méthode de validation utilisée pour identifier les problèmes de géométrie.

  • ESRILa méthode de validation de la géométrie d’Esri va être utilisée. Il s’agit de l’option par défaut.
  • OGCLa méthode de validation de la géométrie de l’OGC sera utilisée.
String

Sortie dérivée

NomExplicationType de données
out_feature_class

Entités en entrée mises à jour.

Couche d’entités

Exemple de code

Exemple 1 d'utilisation de l'outil RepairGeometry (fenêtre Python)

Le script de fenêtre Python ci-dessous illustre l’utilisation de la fonction RepairGeometry en mode immédiat sur un shapefile :

import arcpy
arcpy.RepairGeometry_management("c:/data/sketchy.shp")
Exemple 2 d'utilisation de l'outil RepairGeometry (script autonome)

Le script autonome suivant est un exemple d'application de la fonction RepairGeometry dans l'écriture de scripts.

# Description: 
#   Goes through the table generated by the Check Geometry tool and does 
#   the following
#   1) backs-up all features which will be 'fixed' to a "_bad_geom" feature class
#   2) runs repairGeometry on all feature classes listed in the table 

import arcpy
import os
 
# Table that was produced by Check Geometry tool
table = r"c:\temp\data.gdb\cg_sample1"
 
# Create local variables
fcs = []
 
# Loop through the table and get the list of fcs
for row in arcpy.da.SearchCursor(table, ("CLASS")):
    # Get the class (feature class) from the cursor
    if not row[0] in fcs:
        fcs.append(row[0])
 
# Now loop through the fcs list, backup the bad geometries into fc + "_bad_geom"
# then repair the fc
print("> Processing {0} feature classes".format(len(fcs)))
for fc in fcs:
    print("Processing " + fc)
    lyr = 'temporary_layer'
    if arcpy.Exists(lyr):
        arcpy.Delete_management(lyr)
    
    tv = "cg_table_view"
    if arcpy.Exists(tv):
        arcpy.Delete_management(tv)

    arcpy.MakeTableView_management(table, tv, ("\"CLASS\" = '%s'" % fc))
    arcpy.MakeFeatureLayer_management(fc, lyr)
    arcpy.AddJoin_management(lyr, arcpy.Describe(lyr).OIDFieldName, tv, "FEATURE_ID")
    arcpy.CopyFeatures_management(lyr, fc + "_bad_geom")
    arcpy.RemoveJoin_management(lyr, os.path.basename(table))
    arcpy.RepairGeometry_management(lyr)

Informations de licence

  • Basic: Oui
  • Standard: Oui
  • Advanced: Oui

Rubriques connexes