Bir katmandaki tüm nitelikleri temizlemenin ancak çokgenleri yerinde bırakmanın hızlı bir yolu var mı?


9

QGIS 2.6'da her biri 100'den fazla alanda veri bulunan birkaç çokgen içeren bir Shapefile katmanı var. Tüm aynı çokgenler ile yeni bir katman oluşturmanız gerekir, ancak tüm veri alanları boş (0, Null veya boş alan türüne bağlı olarak ayarlanır). Bunu yapmanın daha hızlı bir yolu, her bir çokgenin her alanında birer birer silme tuşuna basmaktan daha hızlı mı, bunu 1000'den fazla kez bu şekilde yapmak zorunda kalacaktım.


1
Lütfen düzenlemek soru CBS yazılım sürümünü ve veri biçimi eklemek için (örneğin, şekil dosyası, FGDB, PostGIS, ..)
Vince

Yanıtlar:


3

Verilerinizi (OID ve Geometri dışında ) hiçbir özelliği olmayan Katman X'e (katman / şekil dosyası / özellik sınıfı / her ne olursa olsun) kopyalayıp yapıştıramaz ve sonra şimdi "boş" geometriyi kopyalayıp yapıştıramazsınız orijinal katmanınıza?


6

QGIS'e yüklenen bir şekil dosyasının TÜM niteliklerini temizlemek için Python Konsoluna aşağıdaki kodu girebilirsiniz NULL. Katmanlar panelinden (İçindekiler) katmanı seçin ve kodu çalıştırın:

layer = qgis.utils.iface.activeLayer()     
layer.startEditing()   
for field in layer.dataProvider().attributeIndexes():   
    for feature in layer.getFeatures(): 
        layer.changeAttributeValue(feature.id(), field, NULL)    

layer.commitChanges()        

Bu QGIS 2.8.2 üzerinde test edilmiştir.


GÜNCELLEME :

@Vince tarafından yorumuna yanıt olarak, aşağıdaki kod doğrudan Python konsoluna yapıştırılan / kopyalanabilir ve bağlı özelliklerin değerlerini değiştirecektir tip (yani alanın 0için tamsayı alanları; NULLyönelik dize alanları ve bir dönem içinde 1900-01-01için a Tarih alanı):

layer = qgis.utils.iface.activeLayer()     
layer.startEditing()  
for field in layer.pendingFields():
        if field.typeName() == 'Integer':
                name_int = field.name()
                for feature in layer.getFeatures():
                        feature[name_int] = '0'
                        layer.updateFeature(feature)
        if field.typeName() == 'String':
                name_str = field.name()
                for feature in layer.getFeatures():
                        feature[name_str] = NULL
                        layer.updateFeature(feature)
        if field.typeName() == 'Date':
                name_dat = field.name()
                for feature in layer.getFeatures():
                        feature[name_dat] = '1900-01-01'
                        layer.updateFeature(feature)
layer.commitChanges()

1
Rakamlara sıfır, dizelere boş / NULL ve tarihlere dönem atamak için mantığı değiştirebilir misiniz?
Vince

@Vince - Teşekkürler dostum, bu konuda uzman olmadığımdan kesinlikle deneyebilirim :)
Joseph

@Vince - çimdik söz için tekrar teşekkür ederiz, ben) = piton hakkında daha fazla bilgi oldu
Joseph

1
Sanırım yaşım şovları, 2000 değil, 1 Ocak 1970 ya da 1900 çağını düşündüğümde;)
Vince

3

Basitçe yeni bir dosya olarak kaydedebilir ve "Farklı kaydet ..." iletişim kutusundaki "Öznitelik Oluşturmayı Atla" kutusunu işaretleyebilirsiniz. Tam olarak söylediklerini yapar.

FID adında bir sayısal sayaç sütunu olacak, görünüşe göre Shapefile formatı en az bir özellik gerektiriyor mu? Mümkünse daha iyi bir şey, mekansal veya geopackage kullanın.


+1, en az bir özellik olması gerektiği için haklısın. Ancak bu, Alan Hesaplayıcı'yı çalıştırabileceğiniz ve FID'in tüm değerlerini değiştirebileceğiniz için çok güzel ve basit bir yöntemdir NULL.
Joseph

1
QGIS davranışı tuhaf görünüyor. FID sütunu düzenlenebilir ve geometri ile öznitelikler arasındaki gerçek eşleme değildir. Sütunu silerseniz, düzenlenemeyen "özellik kimliği" adlı bir tane alırsınız. Bu zaten ilk sonuç olmalı. QGIS 2.10. Daha sonra bir hata vereceğim.
Bugmenot123

2

.Dbf dosyasını openoffice veya diğerleriyle açın ve verileri kaldırın.
Dosyalar üzerinde döngü yapmak ve başlıklar hariç tümünü kaldırmak için python kullanabilirsiniz. Bkz. Dbf python modülü


1
DBase dosya bileşeninde shapefile-cahil araçların kullanılması, shapefile bozulmasına neden olabilir. Amaç boşlukları ve sıfırları doldurmaksa, verileri kaldırmak ".shp / .shx" den daha az kayıt içeren bir dBase dosyası üretir.
Vince

Gerçekten de, sadece verileri kaldırıyoruz, herhangi bir risk yok.
julsbreakdown

Hayır, görev çokgenleri korumak ve karşılık gelen özellikleri temizlemektir, bu nedenle risk çok yüksektir. Potansiyel yolsuzluğu uyarmayan herhangi bir cevap, riski yeterince ciddiye almaz.
Vince

Zor bir yol olduğunu biliyorum, yani normal bir yol değil ama işe yarıyor. Açıkçası, orijinal verilerin bir yedeğini saklayabilirsiniz.
Leehan

Bu özel durumda risk o kadar büyük değildir, çünkü tüm alanlardaki tüm özellikler başlatılır. Bu nedenle, dbf dosyasındaki kayıtların sırası değişiyorsa, tüm kayıtların özniteliklerde aynı verilere sahip olması nedeniyle hala karışıklık yapmaz. Kullanıcı yine de .dbf'deki özelliklerin sayısının .shp ile aynı olmasına dikkat etmelidir. Bununla birlikte, @Vince yazdığı gibi, kullanıcılar a) b sıralarının sırasını değiştirerek .dbf'deki satır sayısının genellikle bozuk ve kullanılamaz bir şekil dosyasına yol açtığı konusunda uyarılmalıdır.
user30184

2

QGIS, .dbf olmadan şekil dosyalarını açabilir.

Böylece .dbf bileşenini silebilir ve sadece geometriyi getirecek olan .shp dosyasını yükleyebilirsiniz.


Ben şahsen herhangi bir ilişkili dosyaları silmemek için kendimi kaçınmasına rağmen bu iyi bir ipucu :)
Joseph

1
Evet, yeniden adlandırma daha güvenli bir seçenek olabilir.
HeikkiVesanto

2

Belki * .dbf dosyasını Excel ile düzenleyebilirsiniz.

Ardından geom dışında tüm alanları silersiniz.

Sonunda kaydedin ve çıkın.

Bunu yapmadan önce * .shp arşivini saklamak faydalı olacaktır.


Bunun anlamı şemayı sağlam tutmak gibi görünmektedir, bu nedenle yalnızca özniteliklerin değerleri bazı varsayılan değerlere ayarlanmalıdır. Excel ile dbf formatına kaydedemezsiniz.
user30184

2
Geometri alanı, bir şekil dosyasının dBase bileşeninde mevcut değildir.
Vince

sağ excel ile dbf düzenlerken hiçbir wkt alan yoktur.
Leehan

FID alanı, .dbf dosyasındaki satırları .shp dosyasında depolanan geometriye bağlar. Gerçekten .dbf'nin geometriyle bir ilgisi yoktur. en.wikipedia.org/wiki/Shapefile
mr.adam

1

QGIS 2.8.x sürümünde belirli alanlardan veya tüm alanlardan da kurtulabilirsiniz. Özellik tablosunu aç, Düzenleme modunu aç / kapat, "Sütunu sil" düğmesini tıklayın, Tüm istenmeyen niteliklerinizi seçin ve "Tamam" ı tıklayın. Düzenlemeleri kaydedin.

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.