Ricalcolo completo della classe di funzionalità File Geodatabase?


19

Ho una featureclass in un geodatabase di file Esri. Quando modifico le funzionalità usando l'editor in ArcMap e cancello la maggior parte delle mie funzionalità mantenendo solo quelle al centro, il comando zoom su layer non funziona come previsto. Invece di eseguire lo zoom sull'estensione delle funzioni rimanenti nella classe di entità geografiche, l'estensione sarà quella precedente (contenente tutte le funzioni eliminate). Quando rivedo i valori di estensione nella finestra di dialogo delle proprietà per la classe caratteristica, posso vedere chiaramente i vecchi valori. Quindi la sessione di modifica non sembra modificare i valori di estensione completa.

C'è un modo per ricalcolare questi valori?

Sono abbastanza sicuro che questo problema dovrebbe verificarsi a tutti gli utenti che modificano le funzionalità in ArcMap ...


1
Sfortunatamente Arc: REBOX non è stato tradotto come uno strumento ArcGIS :-)
PolyGeo

Risposte:


6

Esri ora ha uno strumento per questo in 10.4 (evviva): Ricalcola estensione classe caratteristica.

Stavo incontrando questo problema quando stavo creando una classe di funzionalità e scrivendo la geometria in esso con arcpy. Apparentemente questi strumenti non aggiornano l'estensione (probabilmente una buona idea per motivi di prestazioni).

Sono riuscito a ripristinare l'estensione in 10.2.2 con il suggerimento di @Lou:

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

19

Fare clic con il tasto destro sulla feature class in ArcCatalog e andare su Proprietà. Nella scheda Estensione funzionalità, fai clic su Ricalcola. E voilà!

Sto usando ArcGIS 10.2.1


6

La compattazione del Geodatabase metterà in ordine il tuo indice spaziale

"Se aggiungi ed elimini frequentemente dati, dovresti compattare il tuo file o geodatabase personale su base mensile. Dovresti anche compattare un geodatabase dopo qualsiasi modifica su larga scala. La compattazione riordina lo spazio di archiviazione riordinando i record ed eliminando lo spazio inutilizzato. Dopo la compattazione, è possibile accedere ai dati in ciascun file in modo più efficiente. La compattazione riduce anche le dimensioni di ciascun file: è possibile ridurre le dimensioni di un geodatabase di metà o più. "

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

Compatto (gestione dei dati)

"Si consiglia di compattare i database geografici personali quando diventano più grandi di 250 MB. Se l'immissione dei dati, la cancellazione o la modifica generale vengono spesso eseguite su un database, il database deve essere regolarmente compattato per garantire prestazioni ottimali."

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


4
Se stai effettuando enormi eliminazioni, questa è una cosa importante da fare (specialmente per geodatabase più grandi). Personalmente non ho avuto la soluzione affidabile per risolvere il problema dell'estensione, ma è sicuramente una buona idea.
Lou


5

L'estensione GeoDatabase si espande sempre, non si accorcia mai automaticamente. La compattazione e la compressione ottimizzano solo l'archiviazione e la frammentazione, ma non l'estensione stessa. Vorrei provare a ricreare prima l'indice spaziale e vedere se questo fa il trucco.

Aggiornare:

Poiché la ricostruzione dell'indice spaziale non risolve il problema, sono sicuro che il seguente codice VBA :

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

Puoi farlo in qualsiasi altro linguaggio di programmazione supportato dall'ESRI. Il trucco è ottenere uno schemalock e usare il metodo IFeatureClassManage :: UpdateExtent .


Ho provato a ricreare l'indice spaziale su un set di dati di esempio e questo non ha aiutato nel mio caso di test. Sono stato sinceramente sorpreso.
Lou,

Quindi aggiorno la mia risposta con un po 'di codice.
Ragi Yaser Burhum,

In questo modo, questo è il codice VBA di ArcCatalog.
Ragi Yaser Burhum,

4

Non so esattamente cosa lo causi nei file geodatabase, ma sono davvero in grado di replicarlo ed è qualcosa che ho affrontato prima. L'unico modo in cui sono stato in grado di scoprire come bypassarlo è comprimere il file geodatabase. Ciò risolverà il problema dell'estensione. Dovrai decomprimerlo quando hai finito, perché non puoi modificare un geodatabase di file compresso.

Durante una sessione di modifica / ArcMap quando si utilizzano effettivamente i dati, è sempre possibile selezionare tutto | zoom su selezionato come soluzione alternativa. Non è eccezionale, ma l'ho usato nel mio flusso di lavoro fino a quando non sono arrivato a un punto di rottura in cui ho potuto fare quel trucco comprimere / decomprimere.

Nota, la compattazione non funzionerà (almeno, non in modo affidabile). Ricostruirà i tuoi indici, ma l'ho trovato inaffidabile per la risoluzione dei problemi di estensione. È ancora qualcosa che dovresti fare di volta in volta. Ho appena provato di nuovo in questo momento, e non ha funzionato sul mio set di dati di esempio. YMMV.


Puoi anche spostare le classi di caratteristiche in un nuovo geodatabase / shapefile, ma dubito fortemente che sia una risposta accettabile. Tuttavia, nella strana possibilità che fa parte del tuo flusso di lavoro (impacchettare i dati per la consegna), potrebbe funzionare per te e non richiedere passaggi aggiuntivi.
Lou

3

Se vuoi aggiornare l'estensione della classe di funzionalità nel tuo documento mxd questo pezzo di codice potrebbe aiutarti:

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.