3 votos

QGIS utilizando una consulta espacial en el editor de atributos de capa

Actualmente estoy creación de una tabla para la captura de polígonos en un archivo de forma de mostrar los terrenos de las áreas de mantenimiento. Una de las columnas de la capa es el nombre de la parroquia. Esta está contenida en otra capa

En el mantenimiento de los argumentos de la capa que pueda establecer la parroquia de la columna 'Valor de la Relación" y especificar la Parroquia de la capa y la correspondiente Clave y Nombre de la columna. Si yo captura de un nuevo récord, puedo, a continuación, agregue el nombre de la parroquia. Pero yo tendría que haber consultado a la parroquia de la capa de primer a se ha establecido que el nombre de la Parroquia.

Hay una manera de automatizar este proceso, de modo que cuando capturo el nuevo registro en el Mantenimiento de los argumentos de la capa, el nombre de la parroquia se rellena automáticamente. Sé que puedo hacer una unión espacial, pero yo prefiero no tener que hacer esto, lo que significaría un paso adicional que es separada de la principal tarea de la captura de los datos.

3voto

Ray Koopman Puntos 111

Usted puede obtener el nombre de la parroquia como un valor predeterminado a través de una intersección con su característica capa con la parroquia nombres. por lo tanto, usted tendrá una función personalizada en el generador de expresiones. El código de esta función podría ser como este (QGIS3), que es más o menos adaptadas a partir de este post (https://gis.stackexchange.com/a/163608/87346):

from qgis.core import *
from qgis.gui import *
from qgis.utils import iface

@qgsfunction(args="auto", group='Custom')
def getAttributeIntersectFeature(intersectLayername, intersectFieldname, geom, feature, parent):
# If geom is empty, return empty string
if (geom is None):
    return ''

# Get layer reference from layername
intersectLayer = QgsProject.instance().mapLayersByName(intersectLayername)[0]

# Raise if layer not found
if intersectLayer is None:
    raise Exception("Layer not found: " + intersectLayername)

# Count intersection within current feature
attributename = ''
for ft in intersectLayer.getFeatures():
    intersectGeom = ft.geometry()
    if (intersectGeom is None):
        continue
    if intersectGeom.intersects(geom):
        attributename += ft[intersectFieldname] + ','

return attributename[:-1]

a continuación, utilice la función con el generador de expresiones y ponerlo en el valor predeterminado de la sección (en este ejemplo, derivar el nombre del país de un país de la capa): enter image description here

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X