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,

Egidi
sumber

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

Matthias Kuhn
sumber
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

Yusuf
sumber
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