¿Unirse a múltiples registros a una sola característica usando QGIS?

25

Estoy tratando de crear una unión / relación en QGIS donde tengo un shapefile de edificios y me gustaría unirme a una tabla no espacial (.csv) que contenga personas que trabajan en cada edificio. Por lo tanto, tengo varios registros en mi tabla que me gustaría poder unir a mis características individuales en mi archivo de forma. Solo puedo ejecutar una unión en QGIS donde el primer registro se une a la función shapefile (es decir, construcción) pero los registros posteriores se eliminan.

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

Mick
fuente
Tuve una pregunta similar aquí gis.stackexchange.com/questions/5797/… El complemento RT SQL Layer y los complementos eVis fueron sugeridos. Usé el complemento eVis pero no era la solución ideal.
Ando
2
Estoy teniendo el mismo problema y, de hecho, unir tablas funciona. El truco consiste en unir las tablas con valores múltiples a la tabla con el valor único (aquí, de persona a edificio, en lugar de al revés). El problema, hasta donde yo sé, es que al hacer esto, no puedes buscar y exportar el resultado como un archivo georreferenciado, que es un error (al menos para mí). ¿Alguna forma de evitar este problema? marc
¿Cuál es el resultado final que quieres lograr? Incluso si logras unirte, ¿quieres presentarlo en un mapa? ¿Las estadísticas? Dependiendo de eso, se pueden seguir diferentes flujos de trabajo, pero usar una base de datos suele ser una buena idea si desea hacer uniones.
johanvdw

Respuestas:

15

Resolví este problema usando 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 texto bien conocido. Para hacer esto, el campo de capa del cuadro de diálogo "Guardar capa de vector como ..." debe leer GEOMETRY = AS_WKT para crear un campo de texto bien conocido de la geometría con la columna denominada WKT.

El archivo de geometría CSV se unió a la tabla de atributos no geométricos en una unión de uno a muchos en la pestaña de propiedades de la tabla de atributos no geométricos.

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

Cuando esta tabla se abre en QGIS, cada registro de atributo se representa con su geometría vectorial adecuada.

Al hacer todo esto, descubrí que el complemento 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 obtener detalles sobre cómo se hace esto, consulte mi tutorial en http://georgiawildlife.com/node/2849 .

Greg Cracovia
fuente
Buen enfoque, hice algo similar solo ogr2ogrpara crear los archivos CSV de los Shapefiles. Luego, un simple script R para fusionar los archivos en el campo común que quería y escribir en CSV. Luego ogr2ogrnuevamente para crear el archivo de forma combinado.
vpipkt
1
Esto puede ser calificado como el más alto, pero el proceso previsto para esto es respondido por @underdark a continuación. Este es un truco y no es la mejor opción, es lento e ineficiente y da como resultado archivos más grandes y más pasos.
nittyjee
10

Las uniones creadas en las propiedades de capa solo agregan columnas a las entidades existentes. Si la capa vectorial solo tiene 160 entidades, ¡una unión no puede aumentar el número de entidades!

Utilice la función de capa virtual en su lugar. Ofrece combinaciones reales de tipo SQL / base de datos. Para ver un ejemplo, vea mi publicación reciente: Pequeños múltiplos para mapas de flujo OD utilizando capas virtuales

ingrese la descripción de la imagen aquí

bajo oscuro
fuente
7

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

Las tablas sin geometría ahora se pueden agregar a un proyecto como cualquier otra capa (vector).

Giovanni Manghi
fuente
7

A partir de la versión 2.2, QGIS admite relaciones uno a muchos. Sin embargo, defínalos en las Propiedades del proyecto, no en las Propiedades de la capa vectorial. Y luego los registros relacionados aparecerán en la Tabla de atributos de la capa o en Identificar resultados a través del formulario.

Vea la respuesta y enlace a una buena guía aquí .

Anna Pestereva
fuente
4

Haz la unión en LibreOffice Base.

No puede superar el hecho de que está tratando de gestionar una relación de 1 a muchos.

Para no espacial a no espacial, vale la pena el esfuerzo de aprender. Creo que el mayor truco es asegurarse de que los campos de atributo de unión tengan exactamente los mismos términos.

Abra los datos espaciales ubicados como una capa en QGIS, luego seleccione todos los registros en la tabla de atributos en QGIS (selección clara, selección invertida) 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 se puede usar universalmente en SIG. Calc le dará un cuadro de diálogo para importar la tabla pegada, elija la pestaña delimitada, asegúrese de que la coma no esté marcada, ya que masticará el campo WKT en bits. Luego resalte esta tabla en Calc, cambie a Base, resalte el icono de Tablas a la izquierda y pegue. Base pasará por un cuadro de diálogo para importar la tabla. El campo WKT se puede retener a través de la unión y cuando el archivo se vuelve a importar a QGIS como .csv, estos se utilizan para reubicar las funciones. Solo recuerda la proyección.

De ese modo, tendrá el control total de la unión y podrá hacerlo en "marcha atrás". Para hacer uniones en Base, asegúrese de que el campo de datos único (el 1) es una clave principal y luego apunte a "muchos" si está familiarizado con un concepto de 1 a muchos o de 1 a n. Las uniones se configuran haciendo relaciones | HERRAMIENTAS |. Como mencioné, probablemente querrá patear a alguien cuando encuentre que los campos de unión tienen la misma información pero han usado texto o sintaxis diferentes para representarlo.

hth

BWill
fuente
2

No creo que sea posible vincular tablas con una relación de 1 a muchos en QGIS. Como alternativa, es posible que desee probar gvSIG. Aquí puedes hacer 1 a muchos enlaces. Después de crear el enlace, al seleccionar una función en el mapa se resaltarán todos los registros relacionados en la tabla vinculada.

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