Apakah ada cara cepat untuk menghapus semua atribut dari layer tetapi membiarkan poligon tetap di tempatnya?

9

Saya memiliki layer Shapefile di QGIS 2.6 dengan beberapa poligon, masing-masing memiliki data di lebih dari 100 bidang. Saya perlu membuat layer baru dengan semua poligon yang sama, tetapi dengan semua bidang data kosong (set ke 0, Null atau kosong tergantung pada jenis bidang). Apakah ada cara yang lebih cepat untuk melakukan ini daripada menekan delete pada setiap bidang setiap poligon satu per satu, saya harus melakukan ini lebih dari 1000 kali dengan cara ini.

alphabetasoup
sumber
1
Harap edit pertanyaan untuk memasukkan versi perangkat lunak GIS dan format data (mis., Shapefile, FGDB, PostGIS, ..)
Vince

Jawaban:

3

Tidak bisakah Anda hanya menyalin dan menempelkan data Anda ke Layer X (lapisan / shapefile / kelas fitur / apa pun) yang tidak memiliki atribut (selain OID dan Geometri) dan kemudian salin dan tempel kembali geometri "kosong" yang sekarang ke dalam lapisan asli Anda?

pengguna23715
sumber
6

Anda bisa memasukkan kode berikut di Konsol Python untuk menghapus SEMUA atribut untuk NULLuntuk shapefile yang dimuat ke QGIS. Pilih lapisan dari panel lapisan (Daftar Isi) dan jalankan kodenya:

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()        

Ini diuji pada QGIS 2.8.2.


PEMBARUAN :

Menanggapi komentar oleh @Vince, kode berikut ini dapat langsung disalin / ditempelkan ke konsol Python dan akan mengubah nilai atribut tergantung pada jenis bidang (yaitu 0untuk bidang bilangan bulat ; NULLuntuk bidang string ; dan zaman 1900-01-01untuk a Tanggal lapangan):

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()
Yusuf
sumber
1
Bisakah Anda mengubah logika untuk menetapkan nol ke angka, kosong / NULL ke string, dan zaman ke tanggal?
Vince
@Vince - Terima kasih sobat, saya pasti bisa mencoba karena saya bukan ahli dalam hal ini :)
Joseph
@Vince - Terima kasih lagi untuk menyebutkan tweak, saya kebetulan belajar lebih banyak tentang python =)
Joseph
1
Saya kira usia saya menunjukkan ketika saya memikirkan zaman 1 Januari 1970 atau 1900, bukan 2000;)
Vince
3

Anda cukup menyimpannya sebagai file baru dan centang kotak "Lewati Penciptaan Atribut" di dialog "Simpan sebagai ...". Ia melakukan persis seperti yang dikatakannya.

Akan ada satu kolom penghitung angka bernama FID, ternyata format Shapefile membutuhkan setidaknya satu atribut? Jika Anda bisa, gunakan sesuatu yang lebih baik, spatialite atau geopackage.

bugmenot123
sumber
+1, Anda benar karena minimal harus ada satu atribut. Tetapi ini adalah metode yang sangat bagus dan sederhana karena Anda bisa menjalankan Field Calculator dan mengganti semua nilai FID ke NULL.
Joseph
1
Perilaku QGIS sepertinya aneh. Kolom FID dapat diedit dan bukan pemetaan aktual antara geometri dan atribut. Jika Anda menghapus kolom, Anda mendapatkan satu bernama "id fitur" yang tidak dapat diedit. Itu seharusnya sudah menjadi hasil pertama. QGIS 2.10. Saya akan mengajukan bug nanti.
bugmenot123
2

Buka file .dbf dengan openoffice atau yang lain, dan hapus data.
Anda dapat menggunakan python untuk mengulang file dan menghapus semua kecuali header Lihat modul python dbf

julsbreakdown
sumber
1
Menggunakan tool-ignorant-ignorant pada komponen file dBase cenderung menyebabkan korupsi shapefile. Jika tujuannya adalah untuk mengisi kosong dan nol, "menghapus" data kemungkinan hanya akan menghasilkan file dBase dengan catatan lebih sedikit daripada .shp / .shx.
Vince
Memang, tapi kami hanya menghapus data, tidak ada risiko.
julsbreakdown
Tidak, tugasnya adalah menjaga poligon dan membersihkan atribut yang sesuai, sehingga risikonya sangat tinggi. Setiap jawaban yang tidak memperingatkan potensi korupsi tidak mengambil risiko dengan cukup serius.
Vince
Saya tahu ini cara yang sulit, bukan yang biasa tetapi berhasil. Jelas, dipersilahkan untuk menyimpan cadangan dari data asli.
Leehan
Dalam kasus khusus ini risikonya tidak begitu besar karena semua atribut di semua bidang diinisialisasi. Oleh karena itu, jika urutan catatan berubah dalam file dbf, itu tidak akan membuat kekacauan karena semua catatan memiliki data yang sama dalam atribut. Pengguna harus tetap berhati-hati bahwa jumlah fitur di .dbf sama dengan di .shp. Namun, seperti yang ditulis oleh @Vince, pengguna harus diperingatkan bahwa a) mengubah urutan baris b) jumlah baris dalam .dbf biasanya mengarah ke shapefile yang rusak dan tidak dapat digunakan.
user30184
2

QGIS dapat membuka file bentuk tanpa .dbf.

Jadi Anda bisa menghapus komponen .dbf dan memuatnya .shp, yang hanya akan menghasilkan geometri.

HeikkiVesanto
sumber
Itu tip yang baik meskipun saya pribadi menahan diri untuk tidak menghapus file terkait :)
Joseph
1
Ya, mengganti nama mungkin opsi yang lebih aman.
HeikkiVesanto
2

Mungkin Anda dapat mengedit file * .dbf dengan Excel.

Kemudian Anda menghapus semua bidang kecuali yang geom.

Akhirnya simpan dan keluar.

Akan bermanfaat untuk menyimpan arsip * .shp sebelum melakukan ini.

Leehan
sumber
Arti tampaknya menjaga skema tetap utuh sehingga hanya nilai atribut yang harus ditetapkan ke beberapa nilai default. Dan Anda tidak dapat menyimpan ke format dbf dengan Excel.
user30184
2
Bidang geometri tidak ada di komponen dBase dari sebuah shapefile.
Vince
di sana tidak ada bidang wkt saat mengedit dbf dengan excel.
Leehan
Bidang FID menautkan baris dalam .dbf ke geometri, yang disimpan dalam .shp. Sungguh, .dbf tidak ada hubungannya dengan geometri. en.wikipedia.org/wiki/Shapefile
mr.adam
1

Di QGIS 2.8.x Anda juga bisa menyingkirkan bidang tertentu atau semua. Buka tabel atribut, Toggle editing mode, Klik tombol "Delete kolom", Pilih semua atribut yang tidak diinginkan dan klik "OK" Simpan hasil edit.

Cuitlahuac Hernandez-Santiago
sumber