পাইকিজিআইএস ব্যবহার করে অ্যাট্রিবিউট মানগুলি কীভাবে পড়বেন?


18

অ্যাট্রিবিউট টেবিলের মধ্যে থাকা তথ্য পাওয়ার কী উপায় আছে, পাইকগিস ব্যবহার করে কলাম 2, সারি 2 তে বলুন?


এটি সহায়ক, তবে এটি আপনাকে কেবল গুনের মান দেয় বলে মনে হয়। মনে হচ্ছে বৈশিষ্ট্যগুলির একটি নাম / মান জোড়া হওয়া দরকার। আপনি প্রতিটি বৈশিষ্ট্যের জন্য নামটি কীভাবে পাবেন? "ক্ষেত্র" সব কি এটাই?
আজপিয়ের

এটি আসলে প্রশ্নের উত্তর দেয় না। আপনি কি অন্য কিছু প্রশ্ন থাকে, তাহলে আপনি এটি ক্লিক করে অনুরোধ করতে পারেন প্রশ্ন জিজ্ঞাসা করুন । আপনি এটিও করতে পারেন একটি খয়রাত যোগ একবার আপনি যথেষ্ট আছে এই প্রশ্নের আরো দৃষ্টি আকর্ষণ করতে খ্যাতি । - পর্যালোচনা থেকে
মার্টিন হোগি

উত্তর:


43

একটি স্তর প্রতিটি বৈশিষ্ট্য লুপ করতে, getFeatures()জেনারেটর ব্যবহার করুন । এটি QgsFeatureস্তরের বৈশিষ্ট্যগুলির ( ) এর একটি পুনরাবৃত্তি প্রদান করে ।

for feature in layer.getFeatures():
    pass # do something with feature

আপনি যদি কেবলমাত্র কোনও বৈশিষ্ট্যে আগ্রহী হন তবে স্তরটির সমস্ত বৈশিষ্ট্যের পরিবর্তে, আপনি এটি ব্যবহার করে QgsFeatureRequestএটি এফআইডি করতে পারেন:

fid = 1 # the second feature (zero based indexing!)
iterator = layer.getFeatures(QgsFeatureRequest().setFilterFid(fid))
feature = next(iterator)

একবার আপনার কোনও QgsFeatureবস্তু থাকলে আপনি attributes()সেই বৈশিষ্ট্যটির সাথে যুক্ত বৈশিষ্ট্যগুলি (ওরফে কলাম বা ক্ষেত্রগুলি) উদ্ধার করতে পদ্ধতিটি ব্যবহার করতে পারেন , যেমন:

# get the feature's attributes
attrs = feature.attributes()
# print the second attribute (note zero based indexing of Python lists)
print(attrs[1])

যদি আপনি কোনও সংখ্যার পরিবর্তে ক্ষেত্রটির নাম অনুসারে সূচনা করতে চান তবে আপনাকে ফিল্ড ম্যাপিংগুলি ব্যবহার করতে হবে:

idx = layer.fieldNameIndex('name')
print(feature.attributes()[idx])

লুপ চলাকালীন ক্ষেত্রের সূচকটি পরিবর্তন করা উচিত নয়, সুতরাং আপনাকে কেবল একবার এটি কল করতে হবে।

পাইকিজিআইএস কুকবুকে আরও তথ্য এবং উদাহরণ রয়েছে: http://www.qgis.org/pyqgis-cookbook/vector.html#iterating-over-vector-layer

হালনাগাদ

আপনি ব্যবহার করে আরো অনেক কিছু সহজেই বৈশিষ্ট্য বৈশিষ্ট্য অ্যাক্সেস করতে পারেন QgsFeatureএকটি মত dict, যেমন

for feature in layer.getFeatures():
    name = feature["name"]

আমি নিশ্চিত নই যে কোন সংস্করণটি এসেছে বা এটি সর্বদা উপস্থিত থাকলে।


11

ভেবেছিলাম আমি আসলে কিছু কোড যুক্ত করব, কারণ এই সমস্যাটি গুগল করা এই প্রশ্নটি ফিরিয়ে দেয় ... বেশিরভাগ লোক একটি লিঙ্কে একটি দ্রুত ব্যাখ্যা বা একটি কোড স্নিপেট পছন্দ করে যা এমন পৃষ্ঠাতে পরিচালিত করে যাতে প্রচুর পরিমাণে অতিরিক্ত তথ্য রয়েছে।

কোনও টেবিলের তথ্য পাওয়ার জন্য আপনাকে প্রথমে স্তরটির বৈশিষ্ট্যগুলি অ্যাক্সেস করতে হবে । আমার ক্ষেত্রে আমি বৈশিষ্ট্যগুলিকে একটি চলকতে রেখেছি। তারপরে আপনি বৈশিষ্ট্যগুলি লুপ করেন এবং প্রতিটি বৈশিষ্ট্যের জন্য আপনি এর বৈশিষ্ট্যগুলিতে কল করেন যা তাদের কলাম সূচক ব্যবহার করে মুদ্রণ করা যেতে পারে । উদাহরণস্বরূপ, আমি যদি দ্বিতীয় কলামের সমস্ত মান পেতে চাই, তবে আমি এটি করব:

lyr = iface.activeLayer()

features = lyr.getFeatures()

for feat in features:
    attrs = feat.attributes()
    print attrs[1]

1

সক্রিয় স্তরের জন্য এটি কীভাবে করা যায় তা কেবল উপরের উত্তরগুলি দেখায়। আমি মনে করি, অনেক ক্ষেত্রে আপনি লেয়ার উইন্ডোতে যাচাই করা স্তর বা সক্রিয় স্তর নয় এমন স্তরের জন্য বলা বৈশিষ্ট্যটি সন্ধান করতে পারেন। নীচের কোডটি আপনার স্তরগুলির উইন্ডোতে যুক্ত সমস্ত স্তরগুলির একটি তালিকা পাবেন (তারা চেক করা বা সক্রিয় থাকলে তা নির্বিশেষে) এবং সারি 2, কলাম 2 এ বৈশিষ্ট্যটি পাবেন।

from qgis.core import QgsProject

layer = QgsProject.instance().mapLayersByName("myLayerName")[0]
        value = layer.getFeature(2).attribute(2)

নোট ম্যাপলায়ারবাইনেম প্রদত্ত নামের সাথে স্তরগুলির একটি তালিকা ফেরত দেয়। আমি ধরে নিচ্ছি যে এই উদাহরণটির জন্য একটি বিদ্যমান আছে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.