Juste pour ajouter une autre méthode, vous pouvez configurer une macro de projet qui, une fois chargée:
- Joint automatiquement votre fichier de formes à votre csv
- Met à jour les champs
IP1
etIP2
- Supprime les champs joints en ne laissant que les champs du fichier de formes (c.-à-d. Pas de doublons)
Créez d'abord un projet si vous ne l'avez pas déjà fait, puis accédez à la barre d'outils:
Projet> Propriétés du projet ...> Macros
Utilisez ensuite le code suivant dans la def openProject():
fonction et entrez les noms de vos couches et les champs que vous souhaitez joindre. J'ai utilisé "Exemple" et "feuille de calcul" pour mon fichier shapefile et csv respectivement avec le champ 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())
Assurez-vous que les calques ne sont pas joints, enregistrez le projet et activez les macros en allant dans la barre d'outils:
Paramètres> Général> Activer les macros
Maintenant, lorsque vous fermez le projet et modifiez le fichier csv, la prochaine fois que vous chargez le projet, les champs doivent être automatiquement mis à jour: