Özellikler silindiğinde şekil dosyalarının boyutu nasıl azaltılır?


9

Bu küçük küçük komut dosyası tüm katmanlardaki tüm küçük özellikleri siler. Bu iyi çalışır, ancak .shp dosyalarının boyutu azalmaz. Lütfen nedenini söyle...

canvas = iface.mapCanvas()
expr = QgsExpression("$length<100")
for l in canvas.layers():
    l.startEditing()
    it = l.getFeatures(QgsFeatureRequest(expr))
    for ft in it:
        l.deleteFeature(ft.id())
    l.commitChanges()

Yanıtlar:


14

Çünkü şekil dosyalarından özellikleri silmenin en hızlı yolu tüm .shp, .shx ve .dbf parçalarını yeniden yazmadan kayıtları .dbf parçasında "silinmiş" işaretiyle işaretlemektir. Bu, GDAL shp sürücü sayfasında da http://www.gdal.org/drv_shapefile.html olarak belgelenmiştir.

OGR şekil dosyası sürücüsü, şekil dosyasının mevcut şekillerinin yeniden yazılmasını ve şekillerin silinmesini destekler. Silinen şekiller .dbf dosyasında silinmek üzere işaretlenir ve sonra OGR tarafından yoksayılır. Bunları kalıcı olarak kaldırmak için (FID'lerin yeniden numaralandırılmasıyla sonuçlanır) veri kaynağı ExecuteSQL () yöntemi ile SQL 'REPACK' çağrılır.


2
Teknik olarak, dBase'in "silindi olarak işaretle" özelliği şekil dosyaları tarafından desteklenmez, bu nedenle GDAL bunu yaparken bozuk şekil dosyaları oluşturur.
Vince

ESRI tarafından MapObjects fiziksel bir şey kaldırmaz benzer delRecord (index) yöntemi olduğunu buldum nerede eski bir cevap gis.stackexchange.com/questions/162615/… (bu belki de bir yinelenen) var. Belki ESRI programları şekil dosyalarını kapatmadan önce "paket" çalıştırmaya daha iyi bakarlar, ancak "silindi olarak işaretle" için bazı destekleri varmış gibi hissediyorlar.
user30184

Katmanda 'farklı kaydet' işlemi silinen özellikleri kaldırır.
SpatialSuccess

QGIS ve python'da o kadar büyük bir deneyimim yok. SQL 'REPACK'i nasıl çağırıyorsunuz?
EvanH

5

Bunu gördüğünüz QGIS sürümünü kontrol etmelisiniz.

DeleteFeatures çağrıldıktan sonra herhangi bir artık yetim satırlarını kaldırmak için bir şekil dosyası yeniden paketlenecek şekilde, bu davranış sürüm 2.14 tweaked biliyorum.

Sürüm 2.14 ile yeniden test etmeli ve herhangi bir iyileştirme olup olmadığını görmelisiniz.


Cevabınız için çok teşekkür ederim. 2.14 sürümünde ayarlanmış olması harika görünüyor. 2.12.2 sürümünü çalıştırıyorum ve 2.12.3'ün indirmeye hazır olduğunu biliyorum, ancak 2.14 sürümünü nerede bulabilirim?
EvanH
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.