32 votos

Unir varios registros en una única característica mediante QGIS

Estoy intentando crear un join/relate en QGIS donde tengo un shapefile de edificios y al que me gustaría unir una tabla no espacial ( .csv -file) que contiene las personas que trabajan en cada edificio. Así que tengo varios registros en mi tabla que me gustaría ser capaz de unirse a mis características individuales en mi shapefile.

Sólo puedo ejecutar una unión en QGIS donde el primer registro se une a la característica shapefile (es decir, edificio), pero los registros posteriores se eliminan.

¿Podría alguien decirme cómo completar esta unión/relación en QGIS?

0 votos

Tenía una pregunta similar aquí gis.stackexchange.com/questions/5797/ Se sugirieron los plugins RT SQL Layer y eVis. Utilicé el plugin eVis pero no era la solución ideal.

2 votos

Tengo el mismo problema y efectivamente unir tablas funciona. El truco consiste en unir las tablas con valores múltiples a la tabla con el valor único (en este caso, de persona a edificio, y no al revés). El problema, según mi experiencia, es que al hacer esto, luego no se puede buscar y exportar el resultado como archivo georreferenciado, lo cual es un fastidio (al menos para mí). ¿Hay alguna forma de evitar este problema? marc

0 votos

¿Cuál es el resultado final que quiere conseguir? Aunque consigas hacer una unión, ¿quieres presentarla en un mapa? ¿Hacer estadísticas? Dependiendo de eso, se pueden seguir diferentes flujos de trabajo, pero utilizar una base de datos suele ser una buena idea si quieres hacer uniones.

16voto

John T Puntos 285

Resolví este problema utilizando QGIS 1.7.0 guardando primero la capa vectorial como una tabla de valores separados por comas (CSV) con el campo de geometría convertido a un texto bien conocido. Para hacer esto, el campo de capa del diálogo "Guardar capa vectorial como..." debe leer GEOMETRY=AS_WKT para crear un campo de texto bien conocido de la geometría con la columna llamada WKT.

A continuación, el archivo de geometría CSV se unió a la tabla de atributos no geométricos en una unión de uno a varios en la pestaña de uniones de propiedades de la tabla de atributos no geométricos.

La unión resultante se guardó como otro archivo CSV de geometría.

Al abrir esta tabla en QGIS, cada registro de atributos se representó mediante su geometría vectorial correspondiente.

Al hacer todo esto descubrí que el plugin de texto delimitado no es necesario para abrir un archivo de geometría CSV si los delimitadores son comas y el campo de geometría WKT se llama WKT.

Para más detalles sobre cómo hacerlo, consulte mi tutorial en http://georgiawildlife.com/node/2849 .

0 votos

Buen planteamiento, yo hice algo parecido sólo que utilizando ogr2ogr para crear los archivos CSV a partir de los Shapefiles. A continuación, un simple script R para combinar los archivos en el campo común que quería y escribir de nuevo a CSV. Luego ogr2ogr de nuevo para crear el archivo shape fusionado.

1 votos

Esto puede ser clasificado el más alto, pero el proceso significó para esto es contestado por @underdark abajo. Esto es un hack y no es en absoluto la mejor opción, es lento e ineficiente y resulta en archivos más grandes y más pasos.

8voto

nd. Puntos 231

En QGIS 1.7 hay un nuevo motor para Joins (se encuentra en las propiedades del vector).

Las tablas sin geometría pueden añadirse ahora a un proyecto como cualquier otra capa (vectorial).

4voto

Eran Puntos 2193

Realice la unión en LibreOffice Base.

No puedes superar el hecho de que estás intentando gestionar una relación de 1 a muchos.

De no espacial a no espacial merece la pena el esfuerzo de aprender. Creo que el mayor truco es asegurarse de que los campos de atributos de unión tienen exactamente los mismos términos.

Abra los datos espaciales localizados como una capa en QGIS, luego seleccione todos los registros en la tabla de atributos en QGIS (borrar selección, invertir selección) y cópielos en una nueva hoja en LibreOffice Calc. Encontrará que el primer campo es WKT, que es una descripción de la característica que puede utilizarse universalmente en SIG. Calc le ofrecerá un cuadro de diálogo para importar la tabla pegada, elija delimitada por tabulaciones, asegúrese de que la coma no está marcada, ya que hará pedazos el campo WKT. A continuación, resalte esta tabla en Calc, cambie a Base, resalte el icono Tablas de la izquierda y péguelo. Base abrirá un cuadro de diálogo para importar la tabla. El campo WKT puede ser retenido a través de la unión y cuando el archivo se importa de nuevo en QGIS como un .csv estos se utilizan para reubicar las características. Sólo recuerde la proyección.

De esta forma tendrás el control total de la unión y podrás hacerla "a la inversa". Para hacer joins en Base asegúrate de que el campo de dato único (el 1) es una clave primaria y luego lo apuntas a los "muchos" si estás familiarizado con el concepto 1 a muchos o 1 a n. Las uniones se establecen haciendo relaciones |TOOLS|. Como mencioné probablemente querrás patear a alguien cuando encuentres que los campos join tienen la misma información pero han usado diferente texto o sintaxis para representarla.

hth

2voto

paulr Puntos 1900

No creo que sea posible vincular tablas con una relación de 1 a muchos en QGIS. Como alternativa, puede probar gvSIG. Aquí puedes hacer enlaces 1 a muchos. Después de crear el enlace, seleccionando una característica en el mapa resaltará todos los registros relacionados en la tabla enlazada.

1 votos

Desde la introducción de las capas virtuales, esta respuesta ya no es correcta.

2voto

tobes Puntos 19

Si usted abre su pueblo capa y unirse a los edificios a, obtendrá una fila por cada persona. Es que lo que usted necesita?

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