Para añadir otro método, se puede establecer un Proyecto macro que cuando se carga:
- Une automáticamente su shapefile con su csv
- Actualiza el
IP1
y IP2
campos
- 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())
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:
3 votos
Echa un vistazo a este tutorial: Realización de uniones de tablas