11 votos

Conseguir puntos-tocar-a-los atributos de la línea de vuelta a las líneas de la capa de uso de QGIS?

Estoy usando QGIS 2.14.4-Essen. Tengo dos capas:

  • puntos.shp que contiene puntos con un AÑO de columna
  • líneas.shp que contiene líneas que exactamente conectar los puntos de puntos.shp

Me gustaria recibir el AÑO atributo de puntos.shp de vuelta a las líneas.shp. Cada línea es un segmento con un punto en cada extremo (ver imagen de abajo). Lo que me gustaría conseguir es el AÑO del primer punto y el AÑO desde el segundo punto de la espalda en cada uno de los atributos de la línea.

Por ejemplo: línea 1 está tocando un primer punto con AÑO=2010 y un segundo punto con AÑO=2011. Me gustaría volver algo así como '2010-2011' en la línea 1 de atributos. El resultado debería parecerse a esto:

id  | points
----+-----------------
1   | 2010-2011
2   | 2011-2012
3   | 2012-2016

enter image description here

Hay una manera de conseguir esto utilizando QGIS?

8voto

Sushant23 Puntos 329

Aunque @radouxju respuesta es válida, voy a explicarlo un poco más detallado.

  1. Usted necesita asegurarse de que la entidad de polilínea que se divide exactamente por encima del punto de ubicaciones.
  2. Uso Join attribute by location. Elija la línea de división de la característica en punto de las ubicaciones de la capa de destino - en mi caso yo lo llamo "explotó".
  3. En la sección de resumen, seleccione "Tomar resumen de la intersección de la característica". Aquí, en lugar de ejecutar la herramienta de dos veces; una para Min y otra vez para Max, usted puede ejecutar una vez y elegir tanto el Min y Max.

enter image description here

  1. El archivo tendrá el siguiente atributo:

enter image description here

  1. Agregar nuevo campo de tipo string con el nombre de "Año" para el nuevo shapefile desde el paso 4.
  2. El uso de la calculadora de Campo, ir a la actualización de la existente en el terreno. Seleccionar el "Año" y escribir la siguiente expresión:

    to_string( "MINYEAR2" ) + '-' + to_string( "MAXYEAR2" )

  3. El último atributo de salida tendrá este aspecto:

enter image description here

  1. El resultado final será como este:

enter image description here


Aquí está la salida después de las pruebas de sus datos:

enter image description here

La tabla de la izquierda es el punto de datos después de la creación de un nuevo campo de tipo integer, y la tabla de la derecha después de unirse a la línea con el punto de datos con el paso 2 se mencionó anteriormente. A continuación, he utilizado los pasos 5-6 para crear el final de los datos.

Actualización

Traté de convertir el campo AÑO de string a entero usando la expresión to_int() y funcionó. Así que no es necesario hacerlo manualmente. Sin embargo, El tipo de campo debe ser de tipo Integer no Integer64. Asegúrese de que la longitud del campo es de hasta 9. Si elige una longitud de campo de 10, que serán convertidos Interger64, y no funcionará con Interger64. A continuación, puede seguir el proceso desde el paso 2 a 6

Aquí es el resultado final después de usar la expresión to_int():

enter image description here

En la anterior tabla de atributos de la izquierda, el AÑO es de tipo string y el AÑO2 es de tipo entero convertido el uso de la expresión to_int(). Se puede ver en la tabla de atributos de la derecha después de seguir los pasos 2-6, tengo MINYEAR2 y MAXYEAR2, a continuación, convertirse en una cadena de nuevo para concatenar todo junto en el campo AÑO.

5voto

xenny Puntos 670

Cuando se unen los puntos de unión a la línea tendrá varias relación. Con "join atributo por ubicación", usted será capaz de hacer para un determinado método de resumen. En su caso, hacer esto dos veces : una vez con el mínimo y una vez con el máximo. Después de que usted puede concatenar dos campos en un nuevo campo, y usted termina con lo que usted necesita.

enter image description here

En el campo de la calculadora :

tostring(minYEAR) + '-' + tostring(maxYEAR)

4voto

SteveLambert Puntos 126

Suponiendo que la topología es perfecto, creando un campo 'WKT' con la expresión

geom_to_wkt( $geometry) 

en su punto de capa, puede utilizar la expresión:

min( attribute( get_feature('points','WKT', geom_to_wkt(start_point($geometry)  )),'year'),attribute( get_feature('points','WKT', geom_to_wkt(end_point($geometry)  )),'year'))||'-'|| max( attribute( get_feature('points','WKT', geom_to_wkt(start_point($geometry)  )),'year'),attribute( get_feature('points','WKT', geom_to_wkt(end_point($geometry)  )),'year'))

en el campo de la calculadora de la capa de la tubería, la creación de una cadena de texto.

  • atributo(característica, attribute_name) Devuelve el valor de un determinado atributo de una entidad, aquí, el año de la función de punto de
    obtenidos.
  • get_feature(capa, atributo, valor) devuelve la primera característica de una capa de coincidencia de un atributo determinado valor. Aquí podemos comprobar si nos puede encontrar un punto con el mismo sistema de coordenadas (en formato WKT) como el
    de su línea de inicio y final de los vértices.
  • start_point(geometry) devuelve el primer nodo de una geometría. Aquí el primer vértice de la línea.
  • end_point(geometry) devuelve el último nodo de una geometría. Aquí el último vértice de la línea.
  • geom_to_wkt(geometry) devuelve el Conocido Texto (WKT) la representación de la geometría. enter image description here

Incluso se podría actualizar a:

CASE
WHEN attribute( get_feature('points','WKT', geom_to_wkt(start_point($geometry)  )),'year') = attribute( get_feature('points','WKT', geom_to_wkt(end_point($geometry)  )),'year')
THEN attribute( get_feature('points','WKT', geom_to_wkt(end_point($geometry)  )),'year')
ELSE min( attribute( get_feature('points','WKT', geom_to_wkt(start_point($geometry)  )),'year'),attribute( get_feature('points','WKT', geom_to_wkt(end_point($geometry)  )),'year'))||'-'|| max( attribute( get_feature('points','WKT', geom_to_wkt(start_point($geometry)  )),'year'),attribute( get_feature('points','WKT', geom_to_wkt(end_point($geometry)  )),'year'))
END

con el fin de mostrar sólo un año si dos puntos con el mismo año en que están conectados (obtención de 200X en lugar de 200X-200X).

La principal ventaja de este método es que si los datos de los cambios en sus puntos, se puede actualizar muy rápido con uno de los campos de la calculadora.
Incluso se podría añadir esta regla como una Autofield para cuando se crean nuevas líneas.
Saludos,

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: