কিউজিআইএস গ্রাফিকাল মডেলারে পুনরাবৃত্ত কাজগুলি সরল করুন


13

এখানে চিত্র বর্ণনা লিখুন

সেখানে কি পুনরাবৃত্তি রয়েছে যা উপরে প্রদর্শিত মডেলটিকে সহজ করার জন্য কিউজিআইএস গ্রাফিকাল মডেলারে ব্যবহার করা যেতে পারে? যদি তা না হয় তবে মডেলটি সরল করার আরও ভাল কোনও উপায় আছে কি?

প্রথম কলামটি আমার ইনপুট স্তরগুলি উপস্থাপন করে, দ্বিতীয় কলামটি ছেদটি, তৃতীয় কলামটি "ছেদ" অপারেশন থেকে আউটপুট, চতুর্থ কলামটি "অবস্থান অনুসারে যুক্ত বৈশিষ্ট্য" অপারেশন এবং পঞ্চম কলামটি যোগ ক্রিয়াকলাপের ফলাফল।

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

প্রথম পদক্ষেপটি জলাশয়ের সাথে "অর্ডার 1 স্ট্রিমগুলি" ছেদ করা এবং তারপরে একই জলাশয়টি দিয়ে "অর্ডার 2 স্ট্রিমগুলি" ছেদ করা। যদি কোনও "অর্ডার 3 স্ট্রিম" শেফফিল সরবরাহ করা থাকে তবে এই নতুন স্তরের ছেদটি সম্পাদন করা উচিত। অতএব কেবলমাত্র "অর্ডার 1 স্ট্রিম" এবং "অর্ডার 2 স্ট্রিম" বাধ্যতামূলক, বাকিগুলি সরবরাহিত জলাশয় স্তরটির উপর নির্ভর করে। উদাহরণস্বরূপ যদি ওয়াটারশেডটি অর্ডার 4 ওয়াটারশেড হয় তবে প্রয়োজনীয় স্ট্রিমগুলি "অর্ডার 4 স্ট্রিম" অবধি থাকে।

সমস্ত উপলভ্য ইনপুট স্তরগুলির জন্য ছেদটি সম্পূর্ণ হয়ে গেলে, পরে তারা ছেদিত স্ট্রিমগুলির যোগফল এবং গড় পেতে বিকল্পগুলির সাথে জলের সাথে যুক্ত হয়ে যুক্ত হয়।

চিত্রটি সঠিক পদ্ধতিটি দেখায়। আমি যদি মডেলারের বাইরে অপারেশন করি তবে ফলাফলগুলি সঠিক। আমি যখন মডেলটি চালনা করি তখন আমি এই ত্রুটিটি পাই।

"অ্যালগরিদম অর্ডার 5_প্লাস_উসড 'ননটাইপ' অবজেক্টটির কোনও এক্সট্রিবিউট 'ডেটাপ্রাইভাইডার' নেই Error

এটি ঘটে যদি আমি কোনও paraচ্ছিক প্যারামিটারের জন্য একটি ইনপুট সরবরাহ না করে (যেমন ইনপুটগুলি যেমন "অর্ডার 4 স্ট্রিমস") তবে আমি যদি সমস্ত ইনপুট সরবরাহ করি তবে আমার প্রয়োজনীয় ফলাফলগুলি পাই।

সুতরাং, আমি জিজ্ঞাসা করতে চাই যে এই কাজটি স্থাপনের আরও ভাল উপায় আছে কি না।

উত্তর:


12

আমি আপনার কাজটি যেভাবে সেট আপ করব তা হ'ল একটি কাস্টম স্ক্রিপ্ট তৈরি করা যা মডেলারের চেয়ে বৃহত্তর নমনীয়তা সরবরাহ করে তবে তার ব্যবহারকারীদের জন্য একই রকম ইন্টারফেস সরবরাহ করতে পারে। আপনি এটি থেকে একটি তৈরি করতে পারেন:

প্রসেসিং সরঞ্জামবক্স> স্ক্রিপ্টস> সরঞ্জামগুলি> নতুন স্ক্রিপ্ট তৈরি করুন

তারপরে নীচে স্ক্রিপ্টটি অনুলিপি / আটকান এবং এতে সংরক্ষণ করুন C:/Users/You/.qgis2/processing/scripts

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

আমি মনে করি স্ক্রিপ্টটি আপনি যা বলেছিলেন তা করে:

  • প্রথম দুটি আদেশ বাধ্যতামূলক তাই প্রক্রিয়া করা হবে।

  • IF বিবৃতিগুলি নিশ্চিত হয় যে কোনও সফল অর্ডার কেবলমাত্র তার পূর্ববর্তী হলেই প্রক্রিয়া করা হবে (উদাহরণস্বরূপ অর্ডার 4 কেবলমাত্র অর্ডার 3 নির্বাচন করা থাকলে চলবে)।

  • এছাড়াও, পাইথন কনসোলে বার্তাগুলি মুদ্রিত হয় যা দেখায় যে কোন আদেশগুলি প্রক্রিয়া করা হচ্ছে।


##Example model=name
##Order1=vector
##Order2=vector
##Order3=optional vector
##Order4=optional vector
##Order5=optional vector
##Watershed=vector
##Order2_Wshed=output vector
##Order3_Wshed=output vector
##Order4_Wshed=output vector
##Order5_Wshed=output vector

order1 = processing.getObject(Order1)
order2 = processing.getObject(Order2)
order3 = processing.getObject(Order3)
order4 = processing.getObject(Order4)
order5 = processing.getObject(Order5)
watershed = processing.getObject(Watershed)

if Order3 is None:
    print 'Processing Order1 and Order2'
else:
    print 'Processing Order1, Order2 and Order3'
    if Order4 is not None:
        print 'Processing Order1, Order2, Order3 and Order4'
        if Order5 is not None:
            print 'Processing Order1, Order2, Order3, Order4 and Order5'

output_1a = processing.runalg("qgis:intersection", order1, watershed, None)
output_1b = processing.runalg("qgis:joinattributesbylocation", output_1a['OUTPUT'], watershed, u'intersects', 0, 0, '', 0, None)
output_2a = processing.runalg("qgis:intersection", order2, watershed, None)
output_2b = processing.runalg("qgis:joinattributesbylocation", output_2a['OUTPUT'], output_1b['OUTPUT'], u'intersects', 0, 0, '', 0, Order2_Wshed)

if Order3 is None:
    pass
else:
    output_3a = processing.runalg("qgis:intersection", order3, watershed, None)
    output_3b = processing.runalg("qgis:joinattributesbylocation", output_3a['OUTPUT'], output_2b['OUTPUT'], u'intersects', 0, 0, '', 0, Order3_Wshed)
    if Order4 is None:
        pass
    else:
        output_4a = processing.runalg("qgis:intersection", order4, watershed, None)
        output_4b = processing.runalg("qgis:joinattributesbylocation", output_4a['OUTPUT'], output_3b['OUTPUT'], u'intersects', 0, 0, '', 0, Order4_Wshed)
        if Order5 is None:
            pass
        else:
            output_5a = processing.runalg("qgis:intersection", order5, watershed, None)
            output_5b = processing.runalg("qgis:joinattributesbylocation", output_5a['OUTPUT'], output_4b['OUTPUT'], u'intersects', 0, 1, 'sum, mean', 0, Order5_Wshed)

স্ক্রিপ্টটি চলাকালীন ইন্টারফেসের স্ক্রিনশটটি নীচে দেওয়া হয়েছে (যা আপনি যখন আপনার মডেলটি চালাবেন তার মতো দেখতে হবে):

স্ক্রিপ্ট চলছে

কয়েকটি বিষয় লক্ষণীয়:

  • লাল বাক্সে বাধ্যতামূলক পরামিতি থাকে

  • সবুজ বাক্সে alচ্ছিক পরামিতি রয়েছে

  • নীল বাক্সে বাধ্যতামূলক প্যারামিটার রয়েছে

  • ব্ল্যাক বাক্সে আউটপুট ফলাফলের alচ্ছিক পরামিতি রয়েছে। সম্পর্কিত আদেশটি নির্বাচিত হলে স্ক্রিপ্টটি কেবল আউটপুট স্তরগুলি সরবরাহ করবে (উদাহরণস্বরূপ, যদি অর্ডার 5 এর জন্য ইনপুটটি নির্বাচিত না হয় তবে এর জন্য আউটপুট হয়, একটি ত্রুটি ঘটবে)। অতএব, ব্যবহারকারীর অবশ্যই ইনপুট এবং প্রাসঙ্গিক ফলাফলগুলি নির্বাচন করতে হবে। এটি উদ্দেশ্যমূলক ছিল না তবে ব্যক্তিগতভাবে আমি মনে করি এটি ব্যবহারকারীকে প্যারামিটারগুলি সাবধানে পরীক্ষা করতে বাধ্য করার একটি ভাল উপায়।


আমি কিউজিআইএস 2.12.3 ব্যবহার করেছি ( প্রসেসিং প্লাগইন সংস্করণ 2.12.2 সহ)।


2
সাম্প্রতিক কিউজিআইএস পডকাস্টে তাদের প্রসেসিংয়ের স্রষ্টা রয়েছে এবং তিনি বলেছিলেন যে এটি যেভাবে নির্মিত হয়েছিল সে কারণেই আপনি এখন মডেল নির্মাতায় সরাসরি কোনও পুনরাবৃত্তি যুক্ত করতে পারবেন না। এটি যুক্ত করতে একটি বিস্তৃত পুনরায় লেখার প্রয়োজন হবে। সুতরাং একটি কাস্টম স্ক্রিপ্ট অবশ্যই আপাতত এটি করার উপায়।
হাইক্কি ওয়েসেন্টো

@ ওয়েসেন্টো - এটি অত্যন্ত আকর্ষণীয়, এটি অন্তর্ভুক্ত করার জন্য আপনাকে ধন্যবাদ। আপনার এই নির্দিষ্ট পডকাস্টের কোনও লিঙ্ক আছে?
জোসেফ


1
@ ডেনিসটিজি - ক্ষমা প্রার্থনা বন্ধু, আমার পোস্টে আমার উল্লেখ করা উচিত ছিল যে আমি কিউজিআইএস ২.১২.৩ ব্যবহার করেছি ( প্রসেসিং প্লাগইন সংস্করণ ২.১২.২ সহ)।
জোসেফ

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