4 votos

Añadir una columna de actualización automática en una capa de puntos con información de otra capa de puntos en QGIS

Tengo 2 capas de datos de puntos. La capa de puntos A sirve para capturar características sobre el terreno y la capa de puntos B contiene datos de códigos postales. Lo que estoy tratando de lograr es que cuando se crea una característica de punto en la capa de punto A se actualiza automáticamente una columna en la capa de punto A con el código postal más cercano de la capa de punto B. ¿Alguien tiene alguna idea sobre cómo puedo lograr esto?

2voto

ghotan Puntos 29

QGIS 3.0+

Tal vez pueda utilizar Default en los widgets de capa, junto con la opción refFunciones plugin.

A continuación se muestra un ejemplo de una nueva capa, que tiene un soil para copiar la información del suelo de meuse capa de puntos.

Verás Valor por defecto se establece en geomnearest('meuse_point_32632', 'soil') lo que significa que copia el soil campo desde el punto más cercano del meuse_point_32632 capa.

enter image description here

A continuación, obtendrá el soil Los datos se copian en su nueva capa mientras digitaliza para añadir puntos.

enter image description here


QGIS 2.18

Puede utilizar Campos automáticos junto con el plugin refFunciones plugin.

En la ventana Autocampos, seleccione Custom Expression y establece geomnearest('other_point_layer', 'target_field') .

Encontrará información detallada en AutoFields plygin sitio web.

1voto

she_weeds Puntos 126

Utilizando QGIS 3.x también puede probar a utilizar la siguiente expresión en el campo Valor por defecto sección del formulario de atributos que aparece en la respuesta de Kazuhito. Sustituir 'Point B' con el nombre de su capa Punto B y "postcode" con su campo de código postal del Punto B respectivamente.

Si desea que se actualice cada vez que edite los datos existentes de la capa Punto A, active también la opción "Aplicar valor por defecto al actualizar".

aggregate('Point B','concatenate',"postcode",
           intersects(closest_point(aggregate('Point B','collect',$geometry),
                                    geometry()),
                      $geometry))

Lo que hace es agregar valores de otra capa ( "postcode" valores de la Point B ) y filtrarlos mediante una especie de unión de "vecino más próximo".

El filtro busca el punto más cercano en su capa Punto B (que se agrega mediante collect ), a su capa Punto A ( geometry() ya que ahora estamos en la tierra de los agregados), y luego comprueba que que se cruza con la geometría del Punto B. Dicho de otro modo, "filtra las características más cercanas a tu geometría del Punto A" .

(Como ambas son capas puntuales, probablemente podrías utilizar within() en lugar de intersects() si quisieras).

Resultado:

enter image description here


Bono

Como nota al margen, en un principio interpreté erróneamente tu pregunta original como una pregunta de punto a polígono y llegué a una conclusión interesante: un enfoque similar funciona, pero es necesario amortiguar el polígono por la cantidad más pequeña o de vez en cuando obtendrás algunos puntos en el polígono. closest_point() resultados disjuntos de la capa de polígonos. Creo que esto tiene que ver con la forma en QGIS representa las geometrías de puntos; hay un poco de redondeo implican.

aggregate('Polygon','concatenate',"name",
           intersects(closest_point(aggregate('Polygon','collect',$geometry),
                                    geometry()),
                      buffer($geometry,0.000000000001)))

Resultado (los puntos en rojo son los closest_point() resultados estilizados mediante el generador de geometría):

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