QGIS alanında varsayılan bir değer ayarlama


12

Bir katmanın alanına varsayılan bir değer eklemek istiyorum. Yani, her yeni özellik oluşturulduğunda, bu alan otomatik olarak varsayılan değerle doldurulur.

Benim durumumda varsayılan değer @project_filename değişkeni (projenin dosya adı) olacaktır.

Bu işlevi hiçbir yerde bulamıyorum.

Saygılarımızla,

Yanıtlar:


8

QGIS 2.18'den beri katman özelliklerine / alan özelliklerine gidin ve bir ifadeyi ( @project_filenamebu durumda) varsayılan değer olarak ayarlayın.

İfadeye dayalı varsayılan değerler

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


1
Yanılmıyorsam C ++ API'sinde programlı olarak yapmak için sınıf QgsDefaultValue vardır. Buna python alternatifi var mı?
shika-kun

Bunu yeni bir soru olarak sorarsanız, cevaplamaktan mutluluk duyarım. Bana burada bir hatırlatma gönderin;)
Matthias Kuhn


10

Proje dosya adını öznitelik olarak ekleyen bir işlev tanımlayabilir ve bu işlevi özellik ekleyen olayla bağlayabilirsiniz. Aşağıdaki kodu kullanabilir, alanın adını istediğiniz gibi değiştirebilirsiniz (kullandım Name) ve Python Konsoluna yapıştırabilirsiniz . Şimdi her yeni özellik eklediğinizde, alan geçerli proje adıyla doldurulur:

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)

Sonuç


1
Katmanı her düzenlediğinizde komut dosyasını çalıştırmanız mı gerekiyor yoksa komut dosyası qgis projesinde saklanıyor mu?
Vale

1
@Vale - Komut dosyasını QGIS projesinde depolanacak bir makro olarak kaydedebilirsiniz . Ben bu = dahil etmek için yazı düzenleyeceğim
Joseph

1
Neden Joseph özelliklerini seçmeniz gerekiyor?
Germán Carrillo

3
Çok fazla çakışma olacağı için başka bir soru göndermeye ihtiyaç olduğunu düşünmüyorum. Aslında yakınsın. Özellik seçmekten kaçınmanızı öneririm. SIGNAL featureAddedtetiklendiğinde parametre olarak aldığınız şey aslında bir özellik kimliğidir. Ve aramak için ihtiyacınız olan bu changeAttributeValue. İçine updatefonksiyonu sadece (senin değişken adları kullanarak) 2 satırlık gerekir: idx = layer.fieldNameIndex('Name')ve layer.changeAttributeValue(featureAdded, idx, project_name).
Germán Carrillo

1
@ GermánCarrillo - Bu işe yaradı, vay çok basit! Büyük öneri arkadaşın için teşekkürler! Her gün bir şeyler öğreniyorum =)
Joseph
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.