Neuberechnung des vollständigen Umfangs der File Geodatabase-Feature-Class?


19

Ich habe eine Feature-Class in einer Esri File-Geodatabase. Wenn ich die Features mit dem Editor in ArcMap bearbeite, die meisten meiner Features lösche und nur die in der Mitte behalte, funktioniert der Befehl "Auf Layer zoomen" nicht wie erwartet. Anstatt auf die Ausdehnung der in der Feature-Class verbleibenden Features zu zoomen, wird die vorherige Ausdehnung verwendet (die alle gelöschten Features enthält). Wenn ich die Ausdehnungswerte im Eigenschaftsdialogfeld für die Feature-Class überprüfe, sehe ich deutlich die alten Werte. Die Editiersitzung scheint also nicht die gesamten Extent-Werte zu verändern.

Gibt es eine Möglichkeit, diese Werte neu zu berechnen?

Ich bin mir ziemlich sicher, dass dieses Problem bei allen auftreten sollte, die Features in ArcMap bearbeiten ...


1
Leider wurde Arc: REBOX nicht als ArcGIS-Tool übersetzt :-)
PolyGeo

Antworten:


6

Esri hat jetzt ein Tool dafür in 10.4 (Hurra): Feature Class Extent neu berechnen .

Ich bin auf dieses Problem gestoßen, als ich eine Feature-Class erstellt und mit arcpy Geometrie darin geschrieben habe. Anscheinend aktualisieren diese Tools den Umfang nicht (wahrscheinlich eine gute Idee aus Gründen der Leistung).

Ich habe den Umfang in 10.2.2 mit @Lous Vorschlag erfolgreich zurückgesetzt:

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

19

Klicken Sie in ArcCatalog mit der rechten Maustaste auf die Feature-Class, und wechseln Sie zu den Eigenschaften. Klicken Sie auf der Registerkarte Funktionsumfang auf Neu berechnen. Und voilà!

Ich verwende ArcGIS 10.2.1


6

Durch Komprimieren der Geodatabase wird Ihr räumlicher Index aufgeräumt

"Wenn Sie häufig Daten hinzufügen und löschen, sollten Sie Ihre Datei oder Ihre persönliche Geodatabase monatlich komprimieren. Sie sollten auch eine Geodatabase nach umfangreichen Änderungen komprimieren. Durch Komprimieren wird der Speicher aufgeräumt, indem Datensätze neu angeordnet und nicht verwendeter Speicherplatz beseitigt werden. Nach dem Komprimieren Auf die Daten in jeder Datei kann effizienter zugegriffen werden. Durch die Komprimierung wird auch die Größe der einzelnen Dateien verringert. Möglicherweise kann die Größe einer Geodatabase um die Hälfte oder mehr verringert werden. "

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

Kompakt (Datenverwaltung)

"Es wird empfohlen, Personal Geodatabases zu komprimieren, wenn sie größer als 250 MB werden. Wenn Daten in einer Datenbank häufig eingegeben, gelöscht oder allgemein bearbeitet werden, sollte die Datenbank regelmäßig komprimiert werden, um eine optimale Leistung zu gewährleisten."

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


4
Wenn Sie umfangreiche Löschvorgänge ausführen, ist dies besonders bei größeren Geodatabases wichtig. Ich persönlich hatte es nicht zuverlässig das Ausmaß Problem zu beheben, aber es ist auf jeden Fall eine gute Idee.
Lou


5

Der GeoDatabase Extent wird immer erweitert - nie automatisch gekürzt. Das Komprimieren und Komprimieren optimiert nur die Speicherung und Fragmentierung, nicht jedoch das Extent. Ich würde versuchen, zuerst den räumlichen Index neu zu erstellen und zu sehen, ob dies der Trick ist.

Aktualisieren:

Da die Neuerstellung des räumlichen Index nicht ausreicht, ist der folgende VBA-Code sicher :

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

Sie können dies in jeder anderen von ESRI unterstützten Programmiersprache tun. Der Trick besteht darin, ein Schema zu erhalten und die Methode IFeatureClassManage :: UpdateExtent zu verwenden.


Ich habe versucht, den räumlichen Index in einem Beispieldatensatz neu zu erstellen, was in meinem Testfall nicht geholfen hat. Ich war ehrlich überrascht.
Lou

Aktualisiere dann meine Antwort mit einigem Code.
Ragi Yaser Burhum

Auf diese Weise handelt es sich um ArcCatalog VBA-Code.
Ragi Yaser Burhum

4

Ich weiß nicht genau, was es in File Geodatabases verursacht, aber ich kann es tatsächlich replizieren und es ist etwas, mit dem ich zuvor konfrontiert wurde. Die einzige Möglichkeit, herauszufinden, wie dies umgangen werden kann, besteht darin, die File-Geodatabase zu komprimieren. Dadurch wird das Problem mit dem Umfang behoben. Sie müssen es anschließend dekomprimieren, da Sie eine komprimierte File-Geodatabase nicht bearbeiten können.

Während einer Bearbeitungs- / ArcMap-Sitzung, in der Sie die Daten tatsächlich verwenden, können Sie immer alle | auswählen Zoomen Sie zur Umgehung des Problems auf Ausgewählt. Es ist nicht großartig, aber ich habe es in meinem Workflow verwendet, bis ich an eine Grenze kam, an der ich diesen Trick zum Komprimieren / Dekomprimieren ausführen konnte.

Hinweis: Die Komprimierung funktioniert nicht (zumindest nicht zuverlässig). Es wird Ihre Indizes neu erstellen, aber ich habe festgestellt, dass es für die Behebung von Umfangsproblemen unzuverlässig ist. Es ist immer noch etwas, was Sie von Zeit zu Zeit tun sollten. Ich habe es gerade noch einmal versucht und es hat bei meinem Beispieldatensatz nicht funktioniert. YMMV.


Sie können Feature-Classes auch in eine neue Geodatabase / ein neues Shapefile verschieben. Ich bezweifle jedoch, dass dies eine akzeptable Antwort ist. Bei einer ungewöhnlichen Gelegenheit, die Teil Ihres Workflows ist (Verpacken der Daten für die Zustellung), funktioniert dies jedoch möglicherweise für Sie und erfordert keine zusätzlichen Schritte.
Lou

3

Wenn Sie den Umfang der Feature-Classess in Ihrem mxd-Dokument aktualisieren möchten, kann Ihnen dieser Codeabschnitt helfen:

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.