পাইথন ব্যবহার করে কিউজিআইএস-এ একটি নির্বাচিত বৈশিষ্ট্যের ডেটা প্রাপ্ত?


10

পাইথন এবং কিউজিআইএস সম্পর্কিত আমার একটি সমস্যা / প্রশ্ন রয়েছে। পাইথন ব্যবহার করে কিউজিআইএস-এ একটি নির্বাচিত বৈশিষ্ট্যের ডেটা পাওয়া সম্ভব এবং যদি তা হয় তবে কীভাবে?

আমার উদাহরণে আমার কাছে একটি স্তর রয়েছে যা শহুরে পরিকল্পনার জন্য কিছু পার্সেল দেখায়। আমি যদি এখন পার্সেলগুলির মধ্যে একটি নির্বাচন করি তবে আমি ঠিক এই পার্সেলের ডেটা পেতে চাই। এই ডেটাটি একটি অজগর স্ক্রিপ্ট দ্বারা পড়তে হবে এবং তারপরে একটি স্বয়ংক্রিয়ভাবে তৈরি পিডিএফ ফাইলটিতে যুক্ত করা উচিত। শেষ পদক্ষেপটি সহজ তবে আমি এই নির্বাচিত বৈশিষ্ট্যটি থেকে ডেটা পাইনি।

সক্রিয় স্তর থেকে ডেটা পাওয়া সম্ভব, তবে এই স্তরের একটি নির্বাচিত বৈশিষ্ট্য থেকেও ডেটা পাওয়া সম্ভব?

আশা করি তুমি আমাকে সাহায্য করতে পারবে। শুভেচ্ছা সহ

উত্তর:


15

কলিং layer.selectedFeatures()আপনার নির্বাচিত বৈশিষ্ট্য (গুলি) সহ একটি তালিকা ফেরত দেবে। তারপরে আপনি feature.attributeMap()প্রতিটি বৈশিষ্ট্যের বৈশিষ্ট্যের একটি অভিধান পেতে নির্বাচিত প্রতিটি বৈশিষ্ট্যটিতে কল করতে পারেন ।

layer = qgis.utils.iface.activeLayer()
selected_features = layer.selectedFeatures()
for i in selected_features:
    attrs = i.attributeMap()
    for (k,attr) in attrs.iteritems():
    print "%d: %s" % (k, attr.toString())

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


অদ্ভুত, QgsFeature বস্তু selected_features থেকে ফলাফল কোন জ্যামিতি পদ্ধতি আছে যা ...
user32882

9

আমি মাত্র 2.0 সংস্করণ 2.0 থেকে কিউজিআইএস পাইথন এপিআইতে পরিবর্তনের আলোকে পূর্ববর্তী উত্তরের কিছু আপডেট পোস্ট করতে চেয়েছিলাম ।

আগের মত, আপনি নির্বাচিত বৈশিষ্ট্যগুলির একটি তালিকা পাবেন iface.activeLayer().selectedFeatures()তবে QGISসংস্করণে >= 2.0আপনি এখন QgsFeature.attributes()পরিবর্তে ফাংশনটি ব্যবহার করেন QgsFeature.attributeMap()। দুটি ফাংশন হুবহু এক নয়: attributes()এখন একটি তালিকা ফিরে আসে , যেখানে পুরানো attributeMap()একটি অভিধান ফেরত দেয় । জন্য API ডকুমেন্টেশন ব্রাউজ করতে এক মুহুর্ত সময় নিন QgsFeature.attributes(), QgsAttributesইত্যাদি বুঝতে বৈশিষ্ট্যাবলী সংরক্ষণ / প্রবেশ করে।

আপনি যদি আগ্রহী হন তবে আপনি এই মেলিং তালিকার থ্রেডে API পরিবর্তনের পিছনে কিছু যুক্তি সম্পর্কে পড়তে পারেন: [কিউজিস-বিকাশকারী] নতুন ভেক্টর এপিআই নির্বাচন বৈশিষ্ট্যগুলি । সংক্ষেপে (কিউজিআইএস বিকাশকারী মার্টিন ডোবিয়াসের ভাষায়):

বৈশিষ্ট্যে অ্যাক্সেস: f.attributeMap()আর নেই, কারণ বৈশিষ্ট্যগুলি এখন listমানচিত্রের (পাইথন:) পরিবর্তে কোনও ভেক্টরে (পাইথন :) সঞ্চিত রয়েছে dictQgsFeatureক্লাসটি পাইথন কনটেইনার অবজেক্ট 4 এমুলেট করে যাতে আপনি বৈশিষ্ট্যগুলি অ্যাক্সেস করতে পারেন যেমন QgsFeatureউদাহরণগুলি একটি তালিকা বা অভিধান ছিল, কীগুলি ক্ষেত্রের সূচক বা ক্ষেত্রের নাম হিসাবে রয়েছে:

f[0] ... প্রথম বৈশিষ্ট্য

f["type"] ... "টাইপ" নামযুক্ত বৈশিষ্ট্য

এখনও সমস্ত বৈশিষ্ট্য পাওয়া সম্ভব: f.attributes()মানগুলির একটি তালিকা প্রদান করে।

সুতরাং কীভাবে আপনি কীভাবে জিজ্ঞাসা করেছিলেন (উদাহরণস্বরূপ, আপনি নির্বাচিত একক বৈশিষ্ট্যের জন্য ডেটা পান) উদাহরণস্বরূপ, ধরুন আপনার cityবৈশিষ্ট্যগুলির একটি স্তর রয়েছে যা প্রত্যেকটির একটি countyবৈশিষ্ট্য সহ বৈশিষ্ট্যের একটি তালিকা রয়েছে । আপনি countyনির্বাচিত একটি নির্দিষ্ট শহরের মান পেতে (বলে Helena, AR), পাইথন কনসোলে নিম্নলিখিতটি করুন:

city = iface.activeLayer().selectedFeatures()[0]
city["county"]
# OUTPUTS: u'Phillips'

আপনি যদি শহরের বৈশিষ্ট্য সারণীতে সমস্ত ক্ষেত্রের মান চান তবে আপনি কেবল ব্যবহার করতে পারেন:

cityData = city.attributes()

এছাড়াও আপনি এই উদাহরণ থেকে ক্ষেত্রের সমস্ত নাম সিটি.ফিল্ডস ()। নাম () ব্যবহার করে পেতে পারেন যা ক্ষেত্রের নামের একটি তালিকা প্রত্যাবর্তন করবে।
ক্যারি এইচ

1

আমি জে। টেলরের দেওয়া উত্তরের জন্য দরকারী কিছু যুক্ত করতে চাই এবং উল্লেখ করি যে ২০১২ সালের বর্তমান গৃহীত উত্তরগুলি এখন আর সঠিক নয়:

কিউজসফিজার অবজেক্টটি দরকারী __geo_interface__বৈশিষ্ট্যকে সমর্থন করে , যা প্রদত্ত বৈশিষ্ট্য থেকে একটি অভিধান প্রদান করে। অভিধানটি আসলে জিওজেএসএন স্ট্যান্ডার্ডে রয়েছে, সুতরাং আপনি সমস্ত বৈশিষ্ট্য-মান জুটি এবং জ্যামিতি অন্তর্ভুক্ত পাবেন। বৈশিষ্ট্যটি এখন কিছু সময়ের জন্য বিদ্যমান রয়েছে, শন গিলিস প্রথমে 2012 সালে কিছু সময় বর্ণনা করেছিলেন, এখানে উদাহরণের ব্যবহার রয়েছে । কিউজিআইএস-এর কোন সংস্করণ থেকে এটি পাওয়া যায় সে সম্পর্কে আমি কোনও তথ্য খুঁজে পাইনি এবং আমি এখনও কিউজিআইএস 3 চেষ্টা করে দেখিনি, তবে অবশ্যই কমপক্ষে QGIS 2.14 থেকে পাওয়া গেছে।

টি এল; ডিআর:

layer = qgis.utils.iface.activeLayer()
selected_features = layer.selectedFeatures()
for i in selected_features:
    attrs = i.__geo_interface__
    print attrs # GeoJSON attributes of a feature
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.