পাইকিজিআইএস দিয়ে একটি এক্সপ্রেশন ব্যবহার করে বৈশিষ্ট্য নির্বাচন করা


13

আমি কীভাবে পাইকিজিজিসের সাহায্যে একটি এক্সপ্রেশন ব্যবহার করে বৈশিষ্ট্যগুলি নির্বাচন করতে পারি?

আমি একটি ব্যবহার করার চেষ্টা করেছি QgsExpressionকিন্তু নির্বাচন পদ্ধতি এটি গ্রহণ করে না:

exp = QgsExpression("'ogc_fid' = 482")
cLayer = canvas.currentLayer()
cLayer.select(exp)

এটি কি সম্ভব এবং যদি তাই হয় তবে আমি কীভাবে এটি করব?

উত্তর:


24

আজকাল (কিউজিআইএস v3.x)

  1. স্তর রেফারেন্স পান:

    layer = iface.activeLayer()

  2. ভাব দ্বারা বৈশিষ্ট্য নির্বাচন করুন:

    layer.selectByExpression( "\"ogc_fid\"=482" )


কিউজিআইএসের আগে 2.16

এই পদক্ষেপগুলি অনুসরণ করুন:

  1. স্তর রেফারেন্স পান:

    cLayer = iface.mapCanvas().currentLayer()

  2. একটি অভিব্যক্তি থেকে একটি বৈশিষ্ট্যযুক্তর পান:

    expr = QgsExpression( "\"ogc_fid\"=482" )

    it = cLayer.getFeatures( QgsFeatureRequest( expr ) )

  3. প্রাপ্ত ফলাফল থেকে বৈশিষ্ট্য আইডির একটি তালিকা তৈরি করুন 2 .:

    ids = [i.id() for i in it]

  4. প্রাপ্ত আইডির সাথে বৈশিষ্ট্যগুলি নির্বাচন করুন 3:

    cLayer.setSelectedFeatures( ids )


দ্রষ্টব্য: আপনি যদি একটি স্ট্রিং মান সহ কোনও এক্সপ্রেশন সেট করতে চান তবে আপনাকে এই জাতীয় মানটিতে উদ্ধৃতি চিহ্ন যুক্ত করতে হবে:

expr = QgsExpression( " \"name\" = 'my string' " )

যদি আপনার স্ট্রিংয়ের মান ভেরিয়েবল থেকে আসে তবে আপনি এটি করতে পারেন:

myVariable = 'my string'
expr = QgsExpression( " \"name\" = '{}' ".format(myVariable) )

আমি কীভাবে বলব "\"ogc_fid\"=482 AND name=\"hello world\""? এখানে এটি বলে যে এটি অজগরটিতে পাওয়া যায় না: qgis.org/api/… । সম্ভবত আপনি এই সীমাবদ্ধতা দূরীকরণ একটি উপায় জানেন?
জেনিয়া ইভানভ

2
মনে রাখবেন যে ক্ষেত্রের নামগুলি অবশ্যই ডাবল উদ্ধৃত হওয়া উচিত, স্ট্রিংয়ের মান একক উদ্ধৃত হওয়া উচিত, এবং সংখ্যার উদ্ধৃতিগুলির প্রয়োজন হবে না। আপনার উদাহরণে: "\"ogc_fid\"=482 AND \"name\"='hello world'"। বিটিডাব্লু, আপনি আপনার মন্তব্যে যে লিঙ্কটি অন্তর্ভুক্ত করেছেন তা প্রকৃতপক্ষে উল্লেখ করছে যে BinaryOperatorTextপাইথন বাইন্ডিংগুলিতে স্থির বৈশিষ্ট্যটি পাওয়া যায় না, তবে অপারেটররা QgsExpressionপাইথন বাইন্ডিংয়ের মাধ্যমে ব্যবহার করা হলেও এটি কাজ করে ।
জার্মানি ক্যারিলো

@ জার্মেনসিরিলিও আমি উপরে আপনার পদ্ধতিটি ব্যবহার করছি তবে অনুলিপিটি অনুসন্ধানের জন্য অনুলিপি এবং পেস্ট করেও কোনও মান ফিরিয়ে আনতে পারছি না। কলামে স্ট্রিং রয়েছে তাই আমি ব্যবহার করেছি expr = QgsExpression("\"police_ref\" = 'P0580996'")। আমি অনুসন্ধান শব্দটিতে (একক উদ্ধৃতিগুলির জন্য) একটি বিরতি-চরিত্র যুক্ত করার চেষ্টা করেছি তবে এতে কোনও পার্থক্য আসে না। মজার বিষয় হচ্ছে, আমি যদি জিজ্ঞাসা করছি এমন বৈশিষ্ট্য সারণীটি খুলি, এবং সেখানে অভিব্যক্তি নির্মাতাকে ব্যবহার করি তবে এটি নির্বাচন করবে যদি আমি উদাহরণ হিসাবে যে পুলিশ_রফ ব্যবহার করি তা প্রথম সারিতে থাকে তবে অন্যথায় নয়
অ্যালেক্স

@ জার্মেনসিরিল্লো দুঃখিত যে এটিকে কিছু মনে করবেন না, আমি আলাদাভাবে কী করেছি তা আমি নিশ্চিত নই তবে এখনই এটি বৈশিষ্ট্যগুলি নির্বাচন করতে পারি! অন্যদের পড়ার জন্য, আপনার একক উদ্ধৃতিগুলির জন্য ব্রেক-চরিত্রের দরকার নেই
অ্যালেক্স

6

এটি কিউজিআইএস পাইথন কনসোলে আমার জন্য কাজ করেছিল

layer = qgis.utils.iface.activeLayer()
layer .selectByExpression(" \"ogc_fid\" = '{}' ".format(482))

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

2

আপনার এটি কেবল জিইউআই ইন্টারফেসে পরীক্ষা করা দরকার: "এক্সপ্রেশন দ্বারা নির্বাচন করুন"। যদি এটি কাজ করে, আপনি এটি ডায়াল কোট দ্বারা পরিবেষ্টিত আপনার পাইথন কোডে পেস্ট করতে পারেন ""।

exp = QgsExpression("ogc_fid=482")

আপনি যদি কোনও স্ট্রিংয়ের সাথে তুলনা করেন তবে আপনি একক উদ্ধৃতি '' যোগ করতে পারেন।

exp = QgsExpression("ogc_fid='482'")

এটি অজগর একই নীতি, এটি ডাবল উদ্ধৃতি এবং একক উদ্ধৃতি মধ্যে পার্থক্য করতে পারে।

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