बस एक और तरीका जोड़ने के लिए, आप एक प्रोजेक्ट मैक्रो सेट कर सकते हैं जो लोड होने पर:
- स्वचालित रूप से अपने आकार को अपने सीएसवी में जोड़ता है
IP1
और IP2
फ़ील्ड अपडेट करता है
- केवल आकृति के क्षेत्र छोड़ने वाले सम्मिलित क्षेत्रों को हटा देता है (अर्थात डुप्लिकेट नहीं)
सबसे पहले, एक प्रोजेक्ट बनाएं यदि आपने पहले से ऐसा नहीं किया है और फिर टूलबार पर जाएं:
प्रोजेक्ट> प्रोजेक्ट गुण ...> मैक्रोज़
फिर def openProject():
फ़ंक्शन में निम्न कोड का उपयोग करें और अपनी परतों और उन फ़ील्ड्स के नाम दर्ज करें, जो आप चाहते हैं। मैंने अपने क्षेत्र के साथ क्रमशः अपनी आकृति आकृति और सीएसवी फ़ाइल के लिए "उदाहरण" और "स्प्रेडशीट" का उपयोग किया 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())
सुनिश्चित करें कि परतें शामिल नहीं हुई हैं, प्रोजेक्ट को सहेजें और टूलबार पर जाकर मैक्रो को सक्षम करें :
सेटिंग्स> सामान्य> मैक्रो सक्षम करें
अब जब आप प्रोजेक्ट को बंद करते हैं और सीएसवी फ़ाइल को संपादित करते हैं, तो अगली बार जब आप प्रोजेक्ट को लोड करते हैं, तो फ़ील्ड स्वचालित रूप से अपडेट होनी चाहिए: