Um eine weitere Methode hinzuzufügen, können Sie ein Projektmakro einrichten, das beim Laden Folgendes ausführt:
- Fügt Ihr Shapefile automatisch Ihrem CSV hinzu
- Aktualisiert die Felder
IP1
undIP2
- Entfernt die verbundenen Felder und lässt nur die Felder des Shapefiles (dh keine Dulplikate)
Erstellen Sie zunächst ein Projekt, falls Sie dies noch nicht getan haben, und wechseln Sie dann zur Symbolleiste:
Projekt> Projekteigenschaften ...> Makros
Verwenden Sie dann den folgenden Code in der def openProject():
Funktion und geben Sie die Namen Ihrer Ebenen und die Felder ein, die Sie verbinden möchten. Ich habe für meine Shapefile- und CSV-Datei "Example" und "Spreadsheet" mit folgendem Feld verwendet 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())
Stellen Sie sicher, dass die Ebenen nicht verbunden sind, speichern Sie das Projekt und aktivieren Sie Makros, indem Sie zur Symbolleiste gehen:
Einstellungen> Allgemein> Makros aktivieren
Wenn Sie jetzt das Projekt schließen und die CSV-Datei bearbeiten, sollten die Felder beim nächsten Laden des Projekts automatisch aktualisiert werden: