Menghitung ulang sepenuhnya kelas fitur File Geodatabase?

19

Saya memiliki sebuah featureseclass di file esri geodatabase. Ketika saya mengedit fitur menggunakan editor di ArcMap, dan saya menghapus sebagian besar fitur saya dan hanya menyimpan yang di tengah, perintah zoom to layer tidak berfungsi seperti yang diharapkan. Alih-alih memperbesar hingga batas fitur yang tersisa di kelas fitur, batasnya akan menjadi yang pertama (berisi semua fitur yang dihapus). Ketika meninjau nilai-nilai luas dalam dialog properti untuk kelas fitur, saya dapat dengan jelas melihat nilai-nilai lama. Jadi sesi edit sepertinya tidak mengubah nilai batas penuh.

Apakah ada cara untuk menghitung ulang nilai-nilai ini?

Saya cukup yakin bahwa masalah ini harus terjadi pada semua orang yang mengedit fitur di ArcMap ...

offermann
sumber
1
Sayangnya Arc: REBOX tidak diterjemahkan sebagai alat ArcGIS :-)
PolyGeo

Jawaban:

6

Esri sekarang memiliki alat untuk ini dalam 10.4 (hore): Hitung Ulang Luas Kelas Fitur.

Saya mengalami masalah ini ketika saya membuat kelas fitur dan menulis geometri dengan arcpy. Tampaknya alat-alat itu tidak memperbarui jangkauan (mungkin ide yang bagus untuk alasan kinerja).

Saya telah berhasil menyetel ulang batas pada 10.2.2 dengan saran @Lou:

arcpy.CompressFileGeodatabaseData_management(output_workspace)
arcpy.UncompressFileGeodatabaseData_management(output_workspace)
Harga Curtis
sumber
19

Klik kanan kelas fitur di ArcCatalog dan pergi ke Properties. Di tab Fitur Extent, klik Hitung Ulang. Dan voila!

Saya menggunakan ArcGIS 10.2.1

Geoffroy Richer-Lalonde
sumber
6

Memadatkan Geodatabase akan merapikan indeks spasial Anda

"Jika Anda sering menambah dan menghapus data, Anda harus memadatkan file atau geodatabase pribadi Anda setiap bulan. Anda juga harus memadatkan basis data geodat setelah perubahan skala besar. Memadatkan merapikan penyimpanan dengan menyusun ulang catatan dan menghilangkan ruang yang tidak digunakan. Setelah memadatkan, data dalam setiap file dapat diakses dengan lebih efisien. Memadatkan juga mengurangi ukuran setiap file — mungkin untuk dapat mengurangi ukuran suatu geodatabase hingga setengah atau lebih. "

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

Compact (Manajemen Data)

"Dianjurkan untuk memadatkan basis data pribadi ketika ukurannya menjadi lebih dari 250 MB. Jika entri data, penghapusan, atau pengeditan umum sering dilakukan pada basis data, basis data harus dipadatkan secara teratur untuk memastikan kinerja yang optimal."

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

Mapperz
sumber
4
Jika Anda melakukan penghapusan besar-besaran, ini adalah hal penting untuk dilakukan (terutama untuk geodatabasa yang lebih besar). Saya pribadi tidak dapat diandalkan untuk memperbaiki masalah sejauh itu, tapi itu jelas merupakan ide yang bagus.
Lou
5

Extent GeoDatabase selalu mengembang - tidak pernah memendek secara otomatis. Memadatkan dan Memadatkan hanya mengoptimalkan penyimpanan dan fragmentasi, tetapi bukan Extent itu sendiri. Saya akan mencoba membuat ulang indeks spasial terlebih dahulu dan melihat apakah itu berhasil.

Memperbarui:

Karena pembangunan kembali indeks spasial tidak berhasil, saya yakin kode VBA berikut akan:

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

Anda dapat melakukan ini dalam bahasa pemrograman lain yang didukung ESRI. Caranya adalah dengan mendapatkan schemalock dan menggunakan metode IFeatureClassManage :: UpdateExtent .

Ragi Yaser Burhum
sumber
Saya mencoba membuat ulang indeks spasial pada dataset sampel, dan itu tidak membantu dalam kasus pengujian saya. Sejujurnya aku terkejut.
Lou
Memperbarui jawaban saya dengan beberapa kode kemudian.
Ragi Yaser Burhum
Dengan cara ini, ini adalah kode ArcCatalog VBA.
Ragi Yaser Burhum
4

Saya tidak tahu persis apa yang menyebabkannya di File Geodatabases, tapi saya memang bisa meniru dan itu adalah sesuatu yang saya hadapi sebelumnya. Satu-satunya cara saya bisa mengetahui cara mem-bypassnya adalah dengan Mengompresi file geodatabase. Itu akan memperbaiki masalah tingkat. Anda harus mendekompresnya ketika selesai, karena Anda tidak dapat mengedit file geodatabase yang dikompresi.

Selama sesi edit / ArcMap ketika Anda benar-benar menggunakan data, Anda selalu dapat memilih semua | zoom untuk dipilih sebagai solusi. Ini tidak bagus, tapi saya sudah menggunakannya dalam alur kerja saya sampai saya mencapai titik puncak di mana saya bisa melakukan trik kompres / dekompresi.

Catatan, Memadatkan tidak akan berfungsi (setidaknya, tidak andal). Itu akan membangun kembali indeks Anda, tetapi saya merasa tidak dapat diandalkan untuk memperbaiki masalah tingkat. Itu masih sesuatu yang harus Anda lakukan dari waktu ke waktu. Saya baru saja mencobanya lagi sekarang, dan tidak berfungsi pada dataset sampel saya. YMMV.

Lou
sumber
Anda juga dapat memindahkan kelas fitur ke geodatabase / shapefile baru, tapi saya sangat ragu itu jawaban yang dapat diterima. Namun, pada kesempatan aneh itu bagian dari alur kerja Anda (mengemas data untuk pengiriman) itu mungkin bekerja untuk Anda dan tidak memerlukan langkah-langkah tambahan.
Lou
3

Jika Anda ingin memperbarui tingkat klasifikasi fitur dalam dokumen mxd Anda, kode ini dapat membantu Anda:

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
Radek M.
sumber