কেবল অন্য পদ্ধতি যুক্ত করতে আপনি একটি প্রকল্প ম্যাক্রো সেট আপ করতে পারেন যা লোড হওয়ার পরে:
- স্বয়ংক্রিয়ভাবে আপনার সিএসভিতে আপনার শেফফিলায় যোগ দেয়
- ক্ষেত্র
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())
নিশ্চিত করুন যে স্তরগুলি যোগদান না করেছে , প্রকল্পটি সংরক্ষণ করুন এবং সরঞ্জামদণ্ডে গিয়ে ম্যাক্রো সক্ষম করুন :
সেটিংস> সাধারণ> ম্যাক্রোগুলি সক্ষম করুন
এখন আপনি যখন প্রকল্পটি বন্ধ করেন এবং সিএসভি ফাইলটি সম্পাদনা করেন, পরের বার আপনি যখন প্রকল্পটি লোড করবেন তখন ক্ষেত্রগুলি স্বয়ংক্রিয়ভাবে আপডেট হওয়া উচিত: