Menetapkan nilai default di bidang QGIS


12

Saya ingin menambahkan nilai default pada bidang layer. Maksudku, setiap kali fitur baru dibuat, bidang itu akan secara otomatis diisi dengan nilai default.

Dalam kasus saya, nilai default adalah variabel @project_filename (nama file proyek).

Saya tidak dapat menemukan fungsi ini di mana pun.

Salam,

Jawaban:


8

Sejak QGIS 2.18, buka properti layer / properti bidang dan tetapkan ekspresi ( @project_filenamedalam hal ini) sebagai nilai default.

Nilai default berbasis ekspresi

https://www.qgis.org/en/site/forusers/visualchangelog218/index.html#feature-client-side-default-field-values


1
Dalam C ++ API jika saya tidak salah ada kelas QgsDefaultValue untuk melakukannya secara terprogram. Apakah ada alternatif python untuk itu?
shika-kun

Jika Anda mengajukan ini sebagai pertanyaan baru, saya akan dengan senang hati menjawabnya. Kirimkan saya pengingat di sini;)
Matthias Kuhn


10

Anda dapat mendefinisikan fungsi yang menambahkan nama file proyek sebagai atribut dan menghubungkan fungsi ini dengan peristiwa yang menambahkan fitur. Anda dapat menggunakan kode berikut, mengubah nama bidang menjadi apa pun yang Anda pilih (saya gunakan Name) dan menempelkannya ke Konsol Python . Sekarang setiap kali Anda menambahkan fitur baru, bidang tersebut akan diisi dengan nama proyek saat ini:

import os

# Get project name
project = QgsProject.instance()
project_name = os.path.basename(project.fileName())

# Set active layer
layer = qgis.utils.iface.activeLayer()

# Define function to select added feature and add attribute to field "Name"
def update(featureAdded):
    idx = layer.fieldNameIndex('Name')
    layer.changeAttributeValue(featureAdded, idx, project_name)

# Connect "featureAdded" event to "select" function
layer.featureAdded.connect(update)

Hasil


1
Apakah Anda perlu menjalankan skrip setiap kali Anda mengedit layer atau skrip tetap tersimpan dalam proyek qgis?
Vale

1
@Vale - Anda dapat menyimpan skrip sebagai makro yang akan disimpan dalam proyek QGIS. Saya akan mengedit posting untuk memasukkan ini =)
Joseph

1
Mengapa Anda perlu memilih fitur Joseph?
Germán Carrillo

3
Saya tidak berpikir ada kebutuhan untuk mengirim pertanyaan lain, karena akan ada terlalu banyak tumpang tindih. Anda sebenarnya dekat. Saya sarankan Anda untuk menghindari memilih fitur. Apa yang Anda dapatkan sebagai parameter ketika SIGNAL featureAddeddipicu, sebenarnya adalah id fitur. Dan itu semua yang Anda butuhkan untuk menelepon changeAttributeValue. Ke dalam updatefungsi Anda hanya perlu 2 baris (menggunakan nama variabel Anda): idx = layer.fieldNameIndex('Name')dan layer.changeAttributeValue(featureAdded, idx, project_name).
Germán Carrillo

1
@ GermánCarrillo - Itu berhasil, wow sangat sederhana! Terima kasih atas saran saran Anda! Saya belajar sesuatu setiap hari =)
Joseph
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.