Establecer un valor predeterminado en un campo QGIS


12

Me gustaría agregar en el campo de una capa un valor predeterminado. Quiero decir, cada vez que se crea una nueva característica, ese campo se rellena automáticamente con el valor predeterminado.

En mi caso, el valor predeterminado sería la variable @project_filename (nombre del archivo del proyecto).

No puedo encontrar esta funcionalidad en ningún lado.

Saludos,

Respuestas:


8

Desde QGIS 2.18, vaya a las propiedades de capa / propiedades de campo y establezca una expresión ( @project_filenameen este caso) como el valor predeterminado.

Valores predeterminados basados ​​en expresiones

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


1
En la API de C ++, si no me equivoco, existe la clase QgsDefaultValue para hacerlo mediante programación. ¿Hay una alternativa a Python para eso?
shika-kun

Si hace esto como una nueva pregunta, me complacerá responderla. Solo envíeme un recordatorio aquí;)
Matthias Kuhn


10

Puede definir una función que agregue el nombre de archivo del proyecto como un atributo y conectar esta función con el evento que agrega características. Puede usar el siguiente código, cambiar el nombre del campo a lo que elija (lo usé Name) y pegarlo en la Consola Python . Ahora, cada vez que agregue una nueva función, el campo se completará con el nombre del proyecto actual:

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)

Resultado


1
¿Necesita ejecutar el script cada vez que edita la capa o el script permanece almacenado en el proyecto qgis?
Vale

1
@Vale: puede guardar el script como una macro que se almacenará dentro del proyecto QGIS. Editaré la publicación para incluir esto =)
Joseph

1
¿Por qué necesita seleccionar características Joseph?
Germán Carrillo

3
No creo que sea necesario publicar otra pregunta, ya que habría demasiada superposición. Estás realmente cerca. Te sugiero que evites seleccionar funciones. Lo que obtienes como parámetro cuando featureAddedse activa la SEÑAL es en realidad una identificación de característica. Y eso es todo lo que necesitas para llamar changeAttributeValue. En la updatefunción solo necesitarías 2 líneas (usando tus nombres de variables): idx = layer.fieldNameIndex('Name')y layer.changeAttributeValue(featureAdded, idx, project_name).
Germán Carrillo

1
@ GermánCarrillo - Eso funcionó, ¡qué simple! Gracias por tu gran sugerencia amigo! Aprendo algo todos los días =)
Joseph
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.