20 votos

¿Unir datos de Excel a una tabla de atributos en QGIS sin crear duplicados?

Tengo una tabla de atributos con dos campos vacíos en QGIS.

Example_1

Quiero importar una base de datos excel para rellenar mis campos vacíos en QGIS. Mi archivo excel coincide con las columnas de mi tabla de atributos de QGIS.

Example_2

Soy capaz de unir correctamente mi Excel (.CSV) a mi shapefile. Sin embargo, el proceso, en lugar de rellenar los campos en blanco como deseo, ha creado duplicados. Con la ayuda de " Table Manager " puedo corregir la situación, pero requiere mucho tiempo. Estoy buscando una forma más eficiente de unir mis datos de Excel.

Example_3

¿Cómo puedo unir mi archivo Excel a mi tabla de atributos sin crear duplicados?

3 votos

Echa un vistazo a este tutorial: Realización de uniones de tablas

18voto

DucDigital Puntos 351

Yo haría las siguientes cosas para facilitar la vida:

Antes de hacerlo, haga una copia de seguridad de su archivo shape.

  1. En su shapefile, vaya a las propiedades de la capa / campos y active el modo de edición.
  2. seleccionar todos los campos excepto el campo ID
  3. Eliminar todos los campos excepto el campo ID
  4. añada su archivo csv como capa en QGIS (Menú principal/Capa/Añadir capa/Añadir capa de texto delimitado) enter image description here (elegir sin geometría)
  5. en su shapefile, seleccione propiedades/uniones y elija ambos campos ID para el origen y el destino. Como se describe en la otra respuesta a esta pregunta.
  6. Guarde su Shapefile modificado.

enter image description here

esta es la pestaña Campo a la que me refiero

enter image description here

No olvides alternar la edición antes y después de eliminar el campo innecesario

16voto

Dennkster Puntos 331

Querrá unir el archivo excel con el shapefile. Los unirá en un atributo común y el resultado será una capa unida en la que cada registro contiene los atributos del archivo shapefile y del archivo excel.

Ok primero cargas tu archivo excel y tu vector después en las capas. He utilizado algunos datos de prueba que hice, pero su configuración debe ser similar a la de abajo. enter image description here

Ahora haga clic con el botón derecho del ratón en la capa (en el panel de capas) y elija propiedades, luego elija unir. Primero pulse el signo verde + en la parte inferior izquierda (flecha roja grande en la imagen de abajo) y aparecerá un nuevo menú de Añadir Unión Vectorial (como el de abajo) Aquí su capa de unión será el archivo de Excel (así que elija el archivo y la hoja de Excel adecuados) el campo de unión es el campo en el archivo de Excel que tiene el atributo común al shapefile. El campo de destino es el campo que coincide con el shapefile. (en mi caso, los dos campos comunes se llamaban unidad, pero si el campo se llamara UNIT_ en el archivo shapefile lo habría utilizado en lugar de UNIT para mi campo de destino)
enter image description here Hay algunas otras opciones con las que puedes jugar en la unión, como si sólo quieres ver ciertos campos, etc... de todos modos ahora están unidos y si vuelves a mirar los atributos del shapefile verás que ahora tiene los atributos correspondientes del archivo excel como abajo.

enter image description here

Aquí tienes unos prácticos tutoriales que te mostrarán paso a paso cómo hacerlo:

https://www.mapbox.com/tilemill/docs/guides/joining-data/

http://maps.cga.harvard.edu/qgis/wkshop/join_csv.php

http://qgis.spatialthoughts.com/2012/03/using-tabular-data-in-qgis.html

¿Cómo unir tablas externas con la tabla de atributos de un shapefile en QGIS?

http://www.digital-geography.com/qgis-tutorial-ii-how-to-join-data-with-shapefiles/#.Vs9vpmHXKUk

y el tutorial que ArMoraer mencionó en los comentarios.

1 votos

He mirado el tutorial mapbox.com/tilemill/docs/guides/joining-data que fue, por cierto, muy útil. Sin embargo, sigo sin poder unir mi archivo DBF con mi shapefile. Me sorprende porque la estructura de ambas tablas coincide perfectamente. Parece que no he entendido bien el "campo de unión" y el "campo de destino". ¿Podría añadir más detalles, por favor?

1 votos

@Laurent Robitaille-Lainesse He actualizado mi post con una guía más detallada. Uní un archivo excel de prueba a un shapefile de polígonos sólo para asegurarme de que mis pasos eran correctos.

0 votos

He conseguido unir correctamente mi archivo excel a QGIS. Observo que la opción "join" añade un nuevo campo en la tabla de atributos. Corrígeme si me equivoco, pero parece imposible añadir los datos de mi archivo excel al campo vacío de mi tabla de atributos.

11voto

Mue Puntos 2469

Para añadir otro método, se puede establecer un Proyecto macro que cuando se carga:

  1. Une automáticamente su shapefile con su csv
  2. Actualiza el IP1 y IP2 campos
  3. Elimina los campos unidos dejando sólo los campos del shapefile (es decir, sin dulcificar)

En primer lugar, cree un proyecto si aún no lo ha hecho y luego vaya a la barra de herramientas:

Proyecto > Propiedades del proyecto... > Macros > Macros

A continuación, utilice el siguiente código en el def openProject(): e introduzca los nombres de sus capas y los campos que desea unir. He utilizado "Ejemplo" y "hoja de cálculo" para mi archivo shapefile y csv respectivamente con el campo ID :

from PyQt4.QtCore import *
import qgis
from qgis.core import QgsMapLayerRegistry, QgsVectorJoinInfo

for layer in QgsMapLayerRegistry.instance().mapLayers().values():
    # Change to your shapefile name
    if layer.name() == "Example":
        qgis.utils.iface.setActiveLayer(layer)
        shp = qgis.utils.iface.activeLayer()

for layer in QgsMapLayerRegistry.instance().mapLayers().values():
    # Change to your csv name
    if layer.name() == "spreadsheet":
        qgis.utils.iface.setActiveLayer(layer)
        csv = qgis.utils.iface.activeLayer()

# Set up join parameters
shpField='ID'
csvField='ID'
joinObject = QgsVectorJoinInfo()
joinObject.joinLayerId = csv.id()
joinObject.joinFieldName = csvField
joinObject.targetFieldName = shpField
shp.addJoin(joinObject)

# Define fields to update and joined fields to copy values from
ip1 = shp.fieldNameIndex('IP1') 
ip1_join = shp.fieldNameIndex('spreadsheet_IP1')
ip2 = shp.fieldNameIndex('IP2') 
ip2_join = shp.fieldNameIndex('spreadsheet_IP2')

shp.startEditing()
for feat in shp.getFeatures():
    shp.changeAttributeValue(feat.id(), ip1, feat.attributes()[ip1_join])
    shp.changeAttributeValue(feat.id(), ip2, feat.attributes()[ip2_join])
shp.commitChanges()

# Remove join 
shp.removeJoin(csv.id())

Project macro

Asegúrese de que las capas son no se unió, guardar el proyecto y habilitar macros yendo a la barra de herramientas:

Configuración > General > Habilitar macros


Ahora, cuando cierre el proyecto y edite el archivo csv, la próxima vez que cargue el proyecto, los campos deberían actualizarse automáticamente:

Editing csv file

Results

8voto

BeastRaban Puntos 543

Mi sugerencia es utilizar el código abierto LibreOffice / Open Office para editar su archivo Excel y hacer el archivo .dbf. He preparado un libro de trabajo de prueba para usted. Cuaderno de pruebas - enlace

  1. Abrir el archivo en Libre Office / Open Office.
  2. Pegue en la hoja de "Excel" los datos de su archivo de Excel.
  3. Pegue en la hoja "DBF" los datos de su archivo .dbf (pegue sólo ID, X, Y) (los valores IP1, IP2 se añadirán automáticamente).
  4. Guarde como archivo name.dbf (donde name es el mismo que el nombre de su archivo shape).

Tabla de resultados sin duplicados en QGIS: enter image description here

5voto

ellisbben Puntos 3213

Para empezar, ¿por qué están los campos vacíos? ¿Puede empezar sin los campos vacíos y utilizar simplemente las dos columnas producidas en la unión? Creo que este es el enfoque más sencillo. O eso o encontrar una herramienta similar a la herramienta "Cargar" en ArcGIS.

https://desktop.arcgis.com/en/arcmap/latest/extensions/production-mapping/loading-data-into-a-geodatabase.htm

Si no está utilizando una base de datos geográfica, se lo recomiendo encarecidamente.

0 votos

No estoy utilizando una base de datos geográfica. De hecho, no estoy familiarizado con ella.

1 votos

@LaurentRobitaille-Lainesse Recomiendo encarecidamente la creación de una nueva geodatabase de archivos, a continuación, una nueva clase de características dentro de eso, y utilizar esto para almacenar sus datos. También recomiendo hacer una breve investigación sobre las geodatabases y las clases de características y por qué las usamos, lo que ofrecen más allá de los shapefiles.

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