Dosya Coğrafi Veritabanı özellik sınıfının tam kapsamı yeniden hesaplanıyor mu?


19

Bir Esri dosya coğrafi veritabanında bir featureclass var. ArcMap'teki düzenleyiciyi kullanarak özellikleri düzenlediğimde ve özelliklerimin çoğunu sildiğimde ve yalnızca ortadaki özellikleri koruduğumda, katmana yakınlaştırma komutu beklendiği gibi çalışmaz. Özellik sınıfında kalan özelliklerin kapsamını yakınlaştırmak yerine, kapsam birincisi olacaktır (silinen tüm özellikleri içerir). Feature sınıfının özellikler iletişim kutusundaki kapsam değerlerini incelerken, eski değerleri açıkça görebiliyorum. Dolayısıyla, düzenleme oturumu tam değerlerini değiştirmiyor gibi görünüyor.

Bu değerleri yeniden hesaplamanın bir yolu var mı?

Bu sorunun ArcMap'teki özellikleri düzenleyen herkesin ortaya çıkması gerektiğinden eminim ...


1
Ne yazık ki Arc: REBOX bir ArcGIS aracı olarak çevrilmedi :-)
PolyGeo

Yanıtlar:


6

Esri'nin şimdi bunun için bir araç var (hooray): Özellik Sınıfı Uzantısını Yeniden Hesapla.

Bir özellik sınıfı oluştururken ve arcpy ile geometri yazarken bu sorunla karşılaşıyordum. Görünüşe göre bu araçlar kapsamı güncellemiyor (muhtemelen performans nedenleriyle iyi bir fikir).

@Lou'nun önerisi ile 10.2.2'de kapsamı sıfırlamada başarılı oldum:

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

19

ArcCatalog'da özellik sınıfını sağ tıklatın ve Özellikler'e gidin. Özellik Uzantısı sekmesinde Yeniden Hesapla'yı tıklayın. Ve voilà!

ArcGIS 10.2.1 kullanıyorum


6

Coğrafi Veritabanını sıkıştırmak, uzamsal dizininizi düzenler

"Sık sık veri ekleyip sildiğinizde, dosyanızı veya kişisel coğrafi veritabanınızı aylık olarak sıkıştırmalısınız. Ayrıca, büyük ölçekli bir değişiklikten sonra bir coğrafi veritabanını da sıkıştırmalısınız. Kayıtları yeniden sıralayarak ve kullanılmayan alanı kaldırarak depolama alanını düzenleyin. her dosyadaki verilere daha verimli bir şekilde erişilebilir. Sıkıştırma ayrıca her dosyanın boyutunu da azaltır; bir coğrafi veritabanının boyutunu bir buçuk veya daha fazla azaltabilmek mümkündür. "

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

Kompakt (Veri Yönetimi)

"Kişisel coğrafi veri tabanlarının 250 MB'den büyük olduklarında sıkıştırılması önerilir. Bir veritabanında sık sık veri girişi, silme veya genel düzenleme yapılırsa, en iyi performansı sağlamak için veritabanı düzenli olarak sıkıştırılmalıdır."

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


4
Büyük çaplı silme işlemleri yapıyorsanız, bu önemli bir şeydir (özellikle daha büyük coğrafi veri tabanları için). Ben şahsen bu kapsam problemini güvenilir bir şekilde çözmedim, ama kesinlikle iyi bir fikir.
Lou


5

GeoDatabase Extent her zaman genişler - asla otomatik olarak kısalmaz. Sıkıştırma ve Sıkıştırma yalnızca depolama ve parçalanmayı optimize eder, ancak Extent'in kendisini değil. Öncelikle mekansal endeksi yeniden oluşturmayı dener ve bunun hile yapıp yapmadığını görürdüm.

Güncelleme:

Uzamsal dizin yeniden oluşturma hile yapmadığından , aşağıdaki VBA kodunun emin olacağım:

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

Bunu ESRI destekli başka bir programlama dilinde yapabilirsiniz. Hile bir şema kilidi almak ve IFeatureClassManage :: UpdateExtent yöntemini kullanmaktır.


Örnek bir veri kümesinde uzamsal dizini yeniden oluşturmayı denedim ve bu benim test durumumda yardımcı olmadı. Dürüstçe şaşırdım.
Lou

Cevabımı bazı kodlarla güncelliyor.
Ragi Yaser Burhum

Bu şekilde, bu ArcCatalog VBA kodu.
Ragi Yaser Burhum

4

Dosya Geodatabases'te tam olarak neye neden olduğunu bilmiyorum, ancak gerçekten çoğaltabildim ve daha önce karşılaştığım bir şey. Bunu nasıl atlayabileceğimi öğrenmenin tek yolu, dosya coğrafi veritabanını sıkıştırmaktır. Bu, kapsam sorununu çözecektir. Bir Sıkıştırılmış dosya coğrafi veritabanını düzenleyemediğiniz için, işiniz bittiğinde Sıkıştırmayı Açmanız gerekir.

Verileri gerçekten kullandığınızda bir düzenleme / ArcMap oturumu sırasında, her zaman tümünü | geçici çözüm olarak seçilene zum yapın. Harika değil, ama bu sıkıştırma / açma işlemini yapabileceğim bir kırılma noktasına gelene kadar iş akışımda kullandım.

Not, Sıkıştırma çalışmaz (en azından güvenilir değil). Endekslerinizi yeniden inşa edecek, ancak kapsam sorunlarını düzeltmek için güvenilir olmadığını gördüm. Hala zaman zaman yapman gereken bir şey. Hemen şimdi tekrar denedim ve örnek veri kümemde işe yaramadı. YMMV.


Ayrıca özellik sınıflarını yeni bir coğrafi veritabanına / şekil dosyasına taşıyabilirsiniz, ancak bunun kabul edilebilir bir yanıt olduğundan şüpheliyim. Bununla birlikte, iş akışınızın bir parçası olan garip şansta (teslimat için verileri paketleme) sizin için çalışabilir ve fazladan adımlar gerektirmez.
Lou

3

Eğer mxd belgenizdeki özellik sınıfının kapsamını güncellemek istiyorsanız bu kod grubu size yardımcı olabilir:

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.