পাইকগিস সহ কোনও ভেক্টর স্তরটি পুনরুক্ত করার সময়, কোনও বৈশিষ্ট্য নির্বাচিত কিনা তা আমি কীভাবে পরীক্ষা করব?


10

নিম্নলিখিত কোডটি ( পাইকগিস কুকবুকের উদাহরণ থেকে সংক্ষিপ্ত ) ব্যবহার করে কোনও ভেক্টর স্তরটি দিয়ে পুনরাবৃত্তি করার সময় , কোনও বৈশিষ্ট্য নির্বাচন করা হয়েছে কিনা তা পরীক্ষা করার কোনও উপায় আছে কি?

provider = vlayer.dataProvider()
feat = QgsFeature()
allAttrs = provider.attributeIndexes()
provider.select(allAttrs)
while provider.nextFeature(feat):
    geom = feat.geometry()
    attrs = feat.attributeMap()
    for (k,attr) in attrs.iteritems():
        print "%d: %s" % (k, attr.toString())

বিকল্পভাবে, আমি ব্যবহার করে নির্বাচিত বৈশিষ্ট্যগুলির একটি তালিকা তৈরি করতে পারতাম vlayer.selectedFeatures(), তবে আমি আশা করছি যে প্রতিটি বৈশিষ্ট্য সরাসরি পরীক্ষা করার কোনও উপায় আছে।

উত্তর:


8

কোনও বৈশিষ্ট্যের অবজেক্টের পিতামাতার স্তরটি সরাসরি খুঁজে বের করার কোনও উপায় বা কিউজেস ফিচার শ্রেণিতে কোনও পদ্ধতি থেকে এটি নির্বাচিত কিনা তা মনে হচ্ছে না।

এর অনুরূপ পন্থাটি vlayer.selectedFeatures()পরীক্ষা করা হয় এটি feat.id()রয়েছে কিনা vlayer.selectedFeaturesIds()। কিউজেস ফিচার আইডিগুলি অন্য ভেক্টর স্তরগুলির সাথে কেবল তাদের নিজস্ব স্তরের সাথে তুলনা করে অনন্য মান নয়।

বিকল্পভাবে, আপনি vlayer.selectedFeatures()সরবরাহকারীর সমস্ত বৈশিষ্ট্যের পরিবর্তে সেই বৈশিষ্ট্যগুলি দিয়ে শুরু করতে এবং পুনরাবৃত্তি করতে পারেন ।

তবুও আরেকটি পদ্ধতি হল প্রাথমিকভাবে প্রদত্ত ভেক্টর স্তরটির জন্য নির্বাচিত এবং অ-নির্বাচিত বৈশিষ্ট্য আইডির সেটগুলি (বা তালিকা) সংগ্রহ করা:

# previous relevant code

set_selids = set(vlayer.selectedFeaturesIds())
feat = QgsFeature()
vlayer.select([], QgsRectangle(), False)
set_allids = set()
while vlayer.nextFeature(feat):
    set_allids.add(feat.id())

set_notselids = set_allids - set_selids

print set_allids
print set_selids
print set_notselids

আমি ভেক্টর লেয়ারের জন্য সমস্ত বৈশিষ্ট্য (বা আইডি) এর রেফারেন্স পুনরুদ্ধার করার জন্য একক কল খুঁজে পাচ্ছি না (যেমন এখনও ব্যবহার করতে হবে QgsVectorLayer.select()এবং পুনরায় পুনরুক্তি করতে হবে QgsVectorLayer.nextFeature())।

সম্পাদনা করুন : QgsVectorLaer প্রতিফলিত করার জন্য আপডেট করা কোড নির্বাচন করা কল (সরাসরি সরবরাহকারীর দরকার নেই) পরিচালনা করতে পারে এবং মানচিত্রের ক্যানভাসে প্রকৃত নির্বাচিত বৈশিষ্ট্যগুলিকে গণ্ডগোল করে না, যার setSelectedFeatures()আপডেট দরকার।

2 সম্পাদনা করুন : বৈশিষ্ট্য আইডি সেট তৈরির পরে, আপনি সেগুলি পুনরাবৃত্তি QgsVectorLayer.featureAtId(featid)করতে পারেন এবং বৈশিষ্ট্যটি অ্যাক্সেস করতে ব্যবহার করতে পারেন।


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