QGIS2.x থেকে QGIS3.x স্থানান্তরিত হওয়ার সাথে সাথে পুরো প্রক্রিয়াজাতকরণ কাঠামোটি আবার তৈরি হয়ে গেছে এবং এর বড় অংশগুলি এখন সি ++ শ্রেণি হিসাবে চলে যা আপনি পাইথন ব্যবহারের সাথে ইন্টারেক্ট করতে পারবেন। দুর্ভাগ্যক্রমে ডেটা / ডেটাসেট আইওয়ের জন্য সহজ পরামিতি সিনট্যাক্স আর বৈধ নয়। নতুন প্যারামিটার কাঠামোটি বিল্টইন (পাইথন-) প্রসেসিং অ্যালগরিদমগুলির পরে যা আপনি টুলবাক্সে পূর্বেই ইনস্টলড পেয়েছেন তার পরে অনেক বেশি ওরিয়েন্টেটেড।
আমি দেখতে পাচ্ছি, আপনি ইতিমধ্যে @unddark দ্বারা নতুন অ্যালগরিদম কাঠামোর বর্ণনা অনুসরণ করেছেন। তবে আপনার প্রয়োজনীয়তার জন্য এই কাঠামোটি সামঞ্জস্য করতে (রাস্টার স্তর, ডাবল ইনপুট ইত্যাদি) আপনাকে স্ক্রিপ্টের একাধিক স্থানে কোড পরিবর্তন করতে হবে। আমি আপনার জন্য একটি সংক্ষিপ্ত ব্যাখ্যা দিয়ে মোটামুটি উদাহরণ কোড করেছি (@undarks উদাহরণের উপর ভিত্তি করে একটি অ্যালগরিদম কঙ্কাল):
from qgis.PyQt.QtCore import QCoreApplication, QVariant
from qgis.core import (QgsProcessing, QgsProcessingAlgorithm,
QgsProcessingParameterRasterLayer,QgsProcessingParameterNumber,
QgsProcessingParameterRasterDestination)
class RasterAlg(QgsProcessingAlgorithm):
INPUT_RASTER_A = 'INPUT_RASTER_A'
INPUT_RASTER_B = 'INPUT_RASTER_B'
INPUT_DOUBLE = 'INPUT_DOUBLE'
OUTPUT_RASTER_A = 'OUTPUT_RASTER_A'
OUTPUT_RASTER_B = 'OUTPUT_RASTER_B'
def __init__(self):
super().__init__()
def name(self):
return "RasterAlg"
def tr(self, text):
return QCoreApplication.translate("RasterAlg", text)
def displayName(self):
return self.tr("RasterAlg script")
def group(self):
return self.tr("RasterAlgs")
def groupId(self):
return "RasterAlgs"
def shortHelpString(self):
return self.tr("RasterAlg script without logic")
def helpUrl(self):
return "https://qgis.org"
def createInstance(self):
return type(self)()
def initAlgorithm(self, config=None):
self.addParameter(QgsProcessingParameterRasterLayer(
self.INPUT_RASTER_A,
self.tr("Input Raster A"), None, False))
self.addParameter(QgsProcessingParameterRasterLayer(
self.INPUT_RASTER_B,
self.tr("Input Raster B"), None, False))
self.addParameter(QgsProcessingParameterNumber(
self.INPUT_DOUBLE,
self.tr("Input Double"),
QgsProcessingParameterNumber.Double,
QVariant(1.0)))
self.addParameter(QgsProcessingParameterRasterDestination(
self.OUTPUT_RASTER_A,
self.tr("Output Raster A"),
None, False))
self.addParameter(QgsProcessingParameterRasterDestination(
self.OUTPUT_RASTER_B,
self.tr("Output Raster B"),
None, False))
def processAlgorithm(self, parameters, context, feedback):
raster_a = self.parameterAsRasterLayer(parameters, self.INPUT_RASTER_A, context)
raster_b = self.parameterAsRasterLayer(parameters, self.INPUT_RASTER_B, context)
double_val = self.parameterAsDouble(parameters, self.INPUT_DOUBLE,context)
output_path_raster_a = self.parameterAsOutputLayer(parameters, self.OUTPUT_RASTER_A, context)
output_path_raster_b = self.parameterAsOutputLayer(parameters, self.OUTPUT_RASTER_B, context)
#DO SOME CALCULATION
results = {}
results[self.OUTPUT_RASTER_A] = output_path_raster_a
results[self.OUTPUT_RASTER_B] = output_path_raster_b
return results
কোন পদক্ষেপগুলি করা হয়?
- সমস্ত প্রয়োজনীয় ক্লাস আমদানি করুন।
- উত্তরাধিকার সূত্রে প্রাপ্ত বর্গ হিসাবে অ্যালগরিদম সংজ্ঞায়িত করুন
QgsProcessingAlgorithm
।
INPUT_RASTER_A = 'INPUT_RASTER_A'
প্রক্রিয়াকরণ কাঠামোর দ্বারা সরবরাহিত পরামিতিগুলির সাথে আপনার অ্যালগরিদমকে রেফারেন্স করার জন্য প্রথমে আপনাকে আলগোরিদিম শ্রেণীর স্ট্রিং ভেরিয়েবল (প্যারামিটারের নাম) হিসাবে ইনপুট এবং আউটপুট পরামিতিগুলির নাম ঘোষণা করতে হবে ।
- প্রক্রিয়াজাতকরণ টুলবক্স গুইতে আপনার অ্যালগরিদমকে তারের যুক্ত পদ্ধতিগুলি যুক্ত করুন এবং হেল্পস্ট্রিংগুলি সরবরাহ করুন ইত্যাদি
- তারপরে আপনি প্রসেসিং ফ্রেমওয়ার্কের পরামিতিগুলি যুক্ত করুন। সেই সন্তান শ্রেণীর হিসাবে সংজ্ঞায়িত করা হয়
QgsProcessingParameterType
- আপনার অ্যালগরিদম ক্ষেত্রে: QgsProcessingParameterRasterLayer
, QgsProcessingParameterNumber
, ইত্যাদি। আপনি এপিআই এন্ট্রি (যেমন।QgsProcessingParameterRasterLayer
সঠিক যুক্তিগুলি পাস করার জন্য এবং প্যারামিটার অবজেক্টগুলি তৈরি ) এর ।
- রানটাইম সময় আপনি প্যারামিটারগুলি থেকে ইনপুট ডেটাসেটগুলি প্রাপ্ত পদ্ধতিটিতে প্যারামিটার
context
এবং feedback
অবজেক্টগুলি পাশ করুন processAlgorithm()
(এই ক্ষেত্রে QgsRasterLayer অবজেক্টগুলি ব্যবহার করেparameterAsRasterLayer()
)।
- আপনার গণনা করুন।
- ফলাফলের অভিধানে আউটপুট যুক্ত করুন এবং কল করার ফলস্বরূপ সেগুলি ফিরিয়ে দিন
processAlgorithm()
।
আমি আশা করি কিউজিআইএস 3-তে কীভাবে আপনার অজগর অ্যালগরিদমগুলি ডিজাইন করবেন সে সম্পর্কে আপনাকে কিছু অন্তর্দৃষ্টি দিতে পারলাম। আপনি যখনই আটকে আছেন, প্রক্রিয়াজাতকরণ কাঠামোর বিদ্যমান অ্যালগরিদমগুলি কীভাবে পরামিতিগুলি পরিচালনা করে তা দেখতে সর্বদা সহায়ক। আপনি তাদের এখানে একবার দেখতে পারেন ।