Apa itu sintaksis bidang pemetaan bidang Alat batch yang dikumpulkan di QGIS?

10

Di QGIS, ada alat bagus ini "Bidang Refactor" di Toolbox Pemrosesan:

Alat Bidang Reaktor

Menggunakannya pada satu layer cukup mudah.

Namun, ketika Anda berencana menggunakannya dalam mode batch, orang dapat melihat kotak teks "Fields mapping" . Saya mencari contoh sintaks untuk digunakan di sana . Saya belum menemukan dokumentasi khusus.

Batch refactor

gisnside
sumber
Setelah menjalankan refactoring dari GUI, Anda dapat menonton perintah di menu Processing -> History (Ctrl + Alt + H)
kadarivan

Jawaban:

7

Ini tidak terlalu nyaman untuk dilakukan, tetapi berikut ini adalah sintaks yang diperlukan untuk kotak teks itu (saya menulisnya dalam beberapa baris hanya demi kejelasan):

{'expression': u'type the expression here',
 'length': <type the length>,
 'type': <code of the type>,
 'name': u'type the field name here',
 'precision': <type the precision>}

Misalnya (ingat untuk menggunakan kurung keriting):

{'expression': u'"FLAG1"+"FLAG2"',
 'length': 20, 'type': 6,
 'name': u'FLAG1',
 'precision': 5}

Anda perlu menulis banyak baris seperti di atas sebagai jumlah kolom input, dipisahkan dengan koma. Misalnya, jika layer Anda mengandung tiga bidang:

{'expression': u'"FLAG1"+"FLAG2"', 'length': 20, 'type': 6, 'name': u'FLAG1', 'precision': 5}, {'expression': u'100*"FLAG2"', 'length': 20, 'type': 6, 'name': u'FLAG2', 'precision': 5}, {'expression': u'"100-"FLAG2"', 'length': 20, 'type': 6, 'name': u'FLAG3', 'precision': 5}

dan itu harus bekerja (itu bekerja untuk saya).

Harap perhatikan bahwa Anda dapat menghindari menggunakan sintaks yang berorientasi pada kamus ini dan secara langsung menggunakan nilai yang diperlukan. Misalnya, dengan merujuk pada contoh pertama, Anda dapat menggunakan:

{u'"FLAG1"+"FLAG2"', 20, 6, u'FLAG1', 5}

Jika Anda tidak menggunakan sintaks ini, kesalahan berikut akan ditampilkan:

Nilai parameter tidak ada: Pemetaan bidang (baris 1)

mgri
sumber
2
Bisakah Anda jelaskan apa artinya <code of the type>? Saya mencoba menggunakan 3 dengan asumsi itu adalah untuk string (karena ini adalah ke-3 dalam opsi dropdown) tetapi saya mendapat kesalahan: objek 'int' tidak memiliki atribut ' getItem ' Lihat log untuk detail lebih lanjut. Kode yang saya gunakan adalah: {u '"FLAG"', 0, 3, u'FLAG ', 0} untuk salah satu lapisan saya di mana {' ekspresi ': u' "FLAG" ',' panjang ': 0,' ketik ': 3,' nama ': u'FLAG', 'presisi': 0}.
JAT86
@ JAT86 Ini adalah angka yang mengidentifikasi tipe data (yaitu int, string dan sebagainya). Sayangnya, saya tidak menemukan referensi untuk mereka, tetapi saya harus mengingat nilai untuk tipe yang paling sering digunakan: 2 untuk int, 6 untuk ganda dan 10 untuk string. Selain itu, mungkin Anda tidak harus menentukan 0panjang bidang (setidaknya 1!). Tolong, beri tahu saya jika Anda memecahkan masalah.
mgri
Terima kasih atas tanggapan yang cepat. Mungkin pemrosesan batch jauh lebih kompleks daripada yang saya kira. Saya mencoba menggunakan setidaknya 1 untuk panjang dan 10 untuk jenis kode: {u '"FLAG"', 1, 10, u'FLAG ', 0} Namun, kesalahan muncul:' int 'objek tidak memiliki atribut' getItem 'Lihat log untuk detail lebih lanjut. Lapisan saya memiliki atribut berikut: nama: bendera, Jenis: string, Panjang: 0, Presisi: 0, Ekspresi: "flag"
JAT86
@ JAT86 Apakah menjalankan alat dari GUI mengembalikan masalah?
mgri
Jika dengan GUI maksud Anda satu lapisan, tidak itu tidak memiliki masalah. Kolom FLAG berhasil dihapus setelah "mengklik Hapus bidang yang dipilih" dan disimpan ke dalam layer baru "Refactored".
JAT86
2

Ada algoritma lain yang mirip dengan ini yang antarmuka menyederhanakan proses batch yang lebih baik.

masukkan deskripsi gambar di sini

Mª Carmen Blánquez Hernández
sumber
1
Bahasa Inggris Inggris
BERA
Terjemahan bahasa Inggris untuk item menu yang dimaksud adalah "Tambahkan bidang ke tabel atribut"
J. Taylor