পাইথন ব্যবহার করে তাদের বৈশিষ্ট্যগুলির উপর ভিত্তি করে ফিল্টার বৈশিষ্ট্যগুলি?


16

পাইগন ব্যবহার করে কিগিসে তাদের বৈশিষ্ট্যগুলি (আরকোবজেক্টগুলিতে আইকোরিফিল্টারের অনুরূপ) বৈশিষ্ট্যগুলি কীভাবে পাবেন? সমস্ত বৈশিষ্ট্য পাওয়ার পরিবর্তে এবং ম্যানুয়ালি এটিকে ফিল্টার করার পরিবর্তে, ক্লজটি ফিল্টার করার জন্য যেখানে কোনও ক্লজ ব্যবহার করার বিকল্প নেই?

উদাহরণ: আমার একটি কাউন্টি নামক একটি ক্ষেত্রের নাম রয়েছে। এতে পঞ্চাশ হাজারেরও বেশি বৈশিষ্ট্য রয়েছে। সময় ব্যয় করার কারণে সমস্ত বৈশিষ্ট্য আনা এবং ফিল্টার করা সম্ভব নয়। সুতরাং আমি আর্কোবজেক্টগুলিতে আইকোরিফিল্টার.হেনক্লেজ = 'কাউন্টিগুলি = নরওইচ' ব্যবহার করে এটি সম্পর্কে জিজ্ঞাসা করতে পারি। পাইকিগিসেও আমার অনুরূপ জিনিস দরকার।


1
@ নাথানডাব্ল্যা হ্যাঁ আপনি ঠিক বলেছেন। আমার কেবল স্তর থেকে কোয়েরি ব্যবহার করে ডেটা ফেরত নেওয়া দরকার। আপনি দয়া করে পাইকগিসে কোনও উদাহরণ দিতে পারেন?
ভেঙ্কট

@ নাথানডাব্লু হাই আমি পেয়েছি আর্কিসে এটির ডেফিনেশন ক্যোয়ারির মতো কাজ করা। এই উদাহরণ দেখুন। t = আউটপুটলিয়ার.সেটসুবসস্ট্রিং ('ইউনিিকআইডি =' + ইনপুটফিট.অ্যাট্রিবিউট ("ইউনিিকআইডি")। টু পাইবজেক্ট ()) যদি টি == সত্য: আউটপুটপ্রাইডার = আউটপুটলায়ার.ডেটাপ্রোভিডার () মুদ্রণ আউটপুটপ্রোভিডার.ফেটেরকাউন্ট () অর্থাৎ এটি কেবল অনুসন্ধানটি ফেরত দেবে সন্তুষ্ট তথ্য
ভেঙ্কট

@ ওয়েঙ্কট কিউজিআইএস-এ কোথায় আপনি কোয়েরি রাখছেন? ধন্যবাদ।
21:54

উত্তর:


12

কিউজিআইএস এক্সপ্রেশন ইঞ্জিনটি QgsFeatureRequest.setFilterExpression( unicode )পদ্ধতিটি ব্যবহার করে এটি করতে সক্ষম হয় (যেহেতু কিউজিআইএস ২.২)

request = QgsFeatureRequest().setFilterExpression( u'"Counties" = \'Norwich\'' )
it = l.getFeatures( request )

কিউজিআইএস ২.১০ দিয়ে শুরু করে এমনকী এটিও সম্ভব যে এইভাবে ফিল্টারিং করা আপনাকে অন্যান্য ধরণের ফিল্টারিংয়ের (যেমন পাইথন বাস্তবায়নের ক্ষেত্রে) কিছু বাড়তি কর্মক্ষমতা দেয়।

নিম্নলিখিত তিনটি শর্ত পূরণ হলে মূলত এটি প্রযোজ্য:

  • আপনি পোস্টগ্রিজ সরবরাহকারীর সাথে একটি স্তর ব্যবহার করছেন এই মুহুর্তে (২.১16) পোস্টগিজ সরবরাহকারী ছাড়াও আরও অনেকগুলি এটি প্রয়োগ করে (স্পষ্টালাইট, ওজিআর, ওরাকল ...)।
  • তোমার অভিব্যক্তি মাত্রাতিরিক্ত জটিল নয় (কিছু পছন্দ >, =, IN, NOT NULL... সমর্থিত)
  • আপনি এই বৈশিষ্ট্যটি সেটিংস> বিকল্পসমূহ> ডেটা উত্স> ডেটা উত্স হ্যান্ডলিং> পোস্টগ্রিজ সার্ভার-সাইডে এক্সপ্রেশন এক্সিকিউট করুন এ সক্ষম করেছেন
  • পারফরম্যান্স সুবিধাটি ডাটাবেস টেবিলগুলিতে উপযুক্ত সূচকগুলির সাথে সর্বোত্তম

কিউজিআইএস ৩.০ সহ এটি সহজভাবে করাও সম্ভব

features = l.getFeatures('"Counties" = \'Norwicth\'')

1

এই পোস্টটি - যা সদৃশ প্রশ্নের উত্তর হিসাবে বিবেচিত হতে পারে - কীভাবে স্তর থেকে সমস্ত বৈশিষ্ট্য আনতে হবে তা বিশদ। আপনি যে প্রক্রিয়াটি সন্ধান করছেন সেটি লেখক হ'ল ম্যানুয়ালি তথ্য ফিরিয়ে দেওয়ার পরে বর্ণনা করেছেন। এটি একটি দুর্দান্ত সম্পূর্ণ রেফারেন্স এবং তাদের লিঙ্কটি আপনাকে সত্যই সহায়তা করতে পারে।


2
এটি কোনও সদৃশ প্রশ্ন নয়। আমি একটি স্তর থেকে সমস্ত বৈশিষ্ট্য আনতে চাই না। প্রথমে এটি ফিল্টার করুন এবং তারপরে আমি সেই বৈশিষ্ট্যগুলি আনতে চাই যা ফিল্টার মানদণ্ডের আওতায় আসে। অর্থাত্ পারফরম্যান্স অনেক ভাল।
ভেঙ্কট

1

একটি বর্গ কোয়েরি ব্যবহার করে এটি দিয়ে সহজেই সম্ভব ogr। আপনি উদাহরণস্বরূপ QGIS পাইথন কনসোল বা একটি স্বতন্ত্র স্ক্রিপ্টে এই কোডটি কার্যকর করতে পারেন।
উদাহরণ :

from osgeo import ogr

path = "path to your shapefile.shp"
ID = "FieldID" # For instance 'Countries' 
datasource = ogr.Open(str(path)) # your datasource

layer = datasource.GetLayer(0) # Import layer 0 --> only works with shapefiles
layerName = str( layer.GetName() )# Save the Layersname first

# Do the sql query
# Selects all features from a layer datasource where Field Countries is equal to 'Germany'
layers = datasource.ExecuteSQL("SELECT * FROM %s WHERE %s = '%s'" % (layerName, ID, 'Germany') )
res = []
for i in range(0,layers.GetFeatureCount()):
   f = layers.GetFeature(i)
   g = f.GetGeometryRef()
   res.append(g.Area()) 

# res now contains the measured area of each feature where the attribute ID has the value 'Germany'

0

এসকিউএল ফিল্টারগুলি নির্দিষ্ট করে কিউজিআইএস এপিআই ব্যবহার করে সংস্করণ 1.9 হিসাবে এখনও সমর্থিত নয়।

আমি এই মেইলিং তালিকার নিবন্ধটি থেকে বুঝতে পারছি , "দেশীয় সরবরাহকারীর এসকিউএল" এর জন্য সমর্থন কেবল ভবিষ্যতের প্রকাশে হবে।

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