Recalculer l'étendue complète de la classe d'entités File Geodatabase?


19

J'ai une classe de fonctionnalités dans une géodatabase fichier Esri. Lorsque je modifie les entités à l'aide de l'éditeur dans ArcMap et que je supprime la plupart de mes entités et en ne gardant que celles du milieu, la commande Zoom sur couche ne fonctionne pas comme prévu. Au lieu de zoomer sur l'étendue des entités restantes dans la classe d'entités, l'étendue sera l'ancienne (contenant toutes les entités supprimées). Lors de l'examen des valeurs d'étendue dans la boîte de dialogue des propriétés de la classe d'entités, je peux clairement voir les anciennes valeurs. La session d'édition ne semble donc pas modifier les valeurs complètes de l'étendue.

Existe-t-il un moyen de recalculer ces valeurs?

Je suis à peu près sûr que ce problème devrait se produire pour tous ceux qui modifient des fonctionnalités dans ArcMap ...


1
Malheureusement Arc: REBOX n'a ​​pas été traduit en tant qu'outil ArcGIS :-)
PolyGeo

Réponses:


6

Esri dispose désormais d'un outil pour cela dans 10.4 (hourra): recalculer l' étendue de la classe d'entités.

Je rencontrais ce problème lorsque je créais une classe d'entités et y écrivais une géométrie avec arcpy. Apparemment, ces outils ne mettent pas à jour l'étendue (probablement une bonne idée pour des raisons de performances).

J'ai réussi à réinitialiser l'étendue dans 10.2.2 avec la suggestion de @Lou:

arcpy.CompressFileGeodatabaseData_management(output_workspace)
arcpy.UncompressFileGeodatabaseData_management(output_workspace)

19

Cliquez avec le bouton droit sur la classe d'entités dans ArcCatalog et accédez aux Propriétés. Dans l'onglet Feature Extent, cliquez sur Recalculate. Et voilà!

J'utilise ArcGIS 10.2.1


6

Le compactage de la géodatabase va ranger votre index spatial

"Si vous ajoutez et supprimez fréquemment des données, vous devez compacter votre fichier ou votre géodatabase personnelle sur une base mensuelle. Vous devez également compacter une géodatabase après toute modification à grande échelle. les données de chaque fichier sont accessibles plus efficacement. Le compactage réduit également la taille de chaque fichier: il est possible de réduire de moitié ou plus la taille d'une géodatabase. "

http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#/Compacting_file_and_personal_geodatabases/003n0000007t000000/

Compact (gestion des données)

"Il est recommandé de compacter les géodatabases personnelles lorsqu'elles dépassent 250 Mo. Si la saisie, la suppression ou la modification générale de données est fréquemment effectuée sur une base de données, la base de données doit être régulièrement compactée pour garantir des performances optimales."

http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//00170000000n000000


4
Si vous effectuez des suppressions massives, c'est une chose importante à faire (en particulier pour les géodatabases plus importantes). Personnellement, je n'ai pas réussi à résoudre le problème d'étendue de manière fiable, mais c'est certainement une bonne idée.
Lou


5

Le GeoDatabase Extent se développe toujours - ne se raccourcit jamais automatiquement. Le compactage et la compression optimisent uniquement le stockage et la fragmentation, mais pas l'étendue elle-même. J'essaierais d'abord de recréer l'index spatial et de voir si cela fait l'affaire.

Mise à jour:

Étant donné que la reconstruction de l'index spatial ne fait pas l'affaire, je suis sûr que le code VBA suivant le fera:

Public Sub reCalcExt()
  Dim pGXApplication As IGxApplication
  Set pGXApplication = Application

  Dim pGxObject As IGxObject
  Set pGxObject = pGXApplication.SelectedObject

  If Not TypeOf pGxObject.InternalObjectName Is IFeatureClassName Then
    Exit Sub
  End If

  Dim pName As IName
  Set pName = pGxObject.InternalObjectName
  Dim pSchemaLock As ISchemaLock
  Set pSchemaLock = pName.Open

  pSchemaLock.ChangeSchemaLock esriExclusiveSchemaLock
  Dim pFeatureClassManage As IFeatureClassManage
  Set pFeatureClassManage = pSchemaLock
  pFeatureClassManage.UpdateExtent

  Exit Sub

ErrHandler:
  pSchemaLock.ChangeSchemaLock esriSharedSchemaLock
End Sub

Vous pouvez le faire dans n'importe quel autre langage de programmation pris en charge par ESRI. L'astuce consiste à obtenir un schéma et à utiliser la méthode IFeatureClassManage :: UpdateExtent .


J'ai essayé de recréer l'index spatial sur un échantillon de jeu de données, et cela n'a pas aidé dans mon cas de test. J'ai été honnêtement surpris.
Lou

Mettre à jour ma réponse avec du code alors.
Ragi Yaser Burhum

De cette façon, il s'agit du code ArcCatalog VBA.
Ragi Yaser Burhum

4

Je ne sais pas exactement ce qui le provoque dans les géodatabases fichier, mais je suis en effet en mesure de le reproduire et c'est quelque chose que j'ai rencontré auparavant. La seule façon dont j'ai pu découvrir comment la contourner est de compresser la géodatabase fichier. Cela résoudra le problème de l'étendue. Vous devrez le décompresser lorsque vous avez terminé, car vous ne pouvez pas modifier une géodatabase fichier compressée.

Pendant une session d'édition / ArcMap lorsque vous utilisez réellement les données, vous pouvez toujours tout sélectionner | effectuer un zoom sur la sélection comme solution de contournement. Ce n'est pas génial, mais je l'ai utilisé dans mon flux de travail jusqu'à ce que j'arrive à un point de rupture où je pourrais faire cette astuce de compression / décompression.

Remarque, le compactage ne fonctionnera pas (au moins, pas de manière fiable). Il reconstruira vos indices, mais je l'ai trouvé peu fiable pour résoudre les problèmes d'étendue. C'est toujours quelque chose que vous devriez faire de temps en temps. Je viens de l'essayer à nouveau en ce moment, et cela n'a pas fonctionné sur mon exemple de jeu de données. YMMV.


Vous pouvez également déplacer des classes d'entités vers une nouvelle géodatabase / fichier de formes, mais je doute fortement que ce soit une réponse acceptable. Cependant, au hasard, cela fait partie de votre flux de travail (emballage des données pour la livraison), cela peut fonctionner pour vous et ne pas nécessiter d'étapes supplémentaires.
Lou

3

Si vous souhaitez mettre à jour l'étendue des classes de fonctionnalités dans votre document mxd, ce morceau de code peut vous aider:

Dim pLayer As ILayer
        Dim pEnumLayer As IEnumLayer
        Dim pFeatureLayer As IFeatureLayer
        Dim pFeatureClass As IFeatureClass
        Dim pFeatureClassManage As IFeatureClassManage


        pEnumLayer = pMap.Layers
        pLayer = pEnumLayer.Next

        Do Until pLayer Is Nothing
            If TypeOf pLayer Is FeatureLayer Then
                pFeatureLayer = pLayer
                pFeatureClass = pFeatureLayer.FeatureClass
                pFeatureClassManage = pFeatureClass
                pFeatureClassManage.UpdateExtent()
            End If
            pLayer = pEnumLayer.Next
        Loop
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.