আমি নিম্নলিখিত প্রশ্নের সম্পূর্ণ সমাধান প্রদান করতে সক্ষম হয়েছি:
কিউজিআইএস-এ পাইথন কনসোল থেকে কীভাবে কোনও ইন্টারপোলেশন রাস্টার গণনা করা যায়?
আমি এখানেও উত্তরটি পুনরায় পোস্ট করব, কারণ বিশাল আগ্রহের কারণে এটি আকর্ষণীয় বলে মনে হচ্ছে:
উত্তর:
Pyqgis উপর ডকুমেন্টেশন খুব স্বশাসিত নয়, কিন্তু আমি বের করলাম কিভাবে সঠিকভাবে সংযুক্ত ক্ষেপক শ্রেণীর ডাকতে ( QgsInterpolator, QgsTINInterpolator, QgsIDWInterpolator, QgsGridFileWriter) পাইথন থেকে। আমি স্ক্রিপ্টের প্রতিটি পদক্ষেপটি দুর্দান্তভাবে বর্ণনা করতে যাচ্ছি:
ধাপ 1:
মূল এবং বিশ্লেষণ মডিউলটি আমদানি করুন এবং স্তর ট্যাবে মাউসক্লিক দিয়ে এটি নির্বাচিত করে ইন্টারপোলেশনের জন্য পছন্দসই ভেক্টর স্তরটি পান।
import qgis.core
import qgis.analysis
layer = qgis.utils.iface.activeLayer()
ধাপ ২:
প্রয়োজনীয় পরামিতিগুলির সাথে ইন্টারপোলেশন ক্লাসগুলি প্রস্তুত করুন। লেয়ারডেটা স্ট্রাক্টের সূচনা করার জন্য সঠিক পরামিতিগুলি কিউজিআইএস এপিআই ডক্সে (সার্চটার্ম: কিউজআইন্টারপ্লোলার) পাওয়া যাবে।
layer_data = QgsInterpolator.LayerData()
layer_data.vectorLayer = layer
layer_data.zCoordInterpolation=False
layer_data.InterpolationAttribute =0
layer_data.mInputType = 1
দয়া করে লক্ষ্য করুন যে আমি z স্থানাঙ্ক ব্যবহার করি না, আমি প্রথম উপলব্ধ ক্ষেত্র (সূচক = 0) ইন্টারপোলেশন বৈশিষ্ট্য হিসাবে পেয়েছি এবং ইনপুট ধরণের হিসাবে পয়েন্টগুলি ব্যবহার করি।
ধাপ 3:
আপনার ইন্টারপোলেশন ইঞ্জিনটি চয়ন করুন। এখানে আপনি টিআইএন-ইন্টারপোলেশন পদ্ধতি ( QgsTINInterpolator) এবং আইডিডাব্লু-ইন্টারপোলেশন ( QgsIDWInterpolator) এর মধ্যে চয়ন করতে পারেন । আমি QgsTINInterpolatorআমার কোডটি এনেছি ।
tin_interpolator = QgsTINInterpolator([layer_data])
মনে রাখবেন আপনাকে layer_dataইন্টারপোলেশন ইঞ্জিনের একটি অজগর তালিকাটি পাস করতে হবে ! এটি আপনাকে একাধিক স্তর_ডেটা দৃশ্য যুক্ত করতে দেয়।
পদক্ষেপ 4:
ইন্টারপোলেশন-আউটপুট রফতানির জন্য প্রয়োজনীয় পরামিতিগুলি সেটআপ করুন (এর ডকুমেন্টেশন দেখুন QgsGridFileWriter)। এগুলির মধ্যে আন্তঃবিবাহ গুই (ফাইলপথ, ব্যাপ্তি, রেজোলিউশন, কলম এবং সারিগুলির সংখ্যা) এর অনুরূপ তথ্য অন্তর্ভুক্ত রয়েছে।
export_path ="C:/SomeFolder/output.asc"
rect = layer.extent()
res = 10
ncol = int( ( rect.xMaximum() - rect.xMinimum() ) / res )
nrows = int( (rect.yMaximum() - rect.yMinimum() ) / res)
output = QgsGridFileWriter(tin_interpolator,export_path,rect,ncol, nrows,res,res)
output.writeFile(True)
iface.addRasterLayer(export_path, "interpolation_output")
QgsGridFileWriterকেবলমাত্র ASCII-grids ( .asc) লেখায় আপনার আউটপুট-রাস্টারটির ফাইল এক্সটেনশন সম্পর্কে সচেতন হন । writeFile()পদ্ধতিটি কল করে ডেটা ডিস্কে লিখিত হয় । রফতানির পরে আপনি গ্রিড-ফাইলটি ক্যানভাসে রাস্টার হিসাবে যুক্ত করতে পারেন।
রেফারেন্সের জন্য সম্পূর্ণ স্ক্রিপ্ট:
import qgis.analysis
import qgis.core
layer = qgis.utils.iface.activeLayer()
layer_data = QgsInterpolator.LayerData()
layer_data.vectorLayer = layer
layer_data.zCoordInterpolation=False
layer_data.InterpolationAttribute =0
layer_data.mInputType = 1
tin_interpolator = QgsTINInterpolator([layer_data])
export_path = "E:/GIS_Workbench/script_output/test.asc"
rect = layer.extent()
res = 10
ncol = int( ( rect.xMaximum() - rect.xMinimum() ) / res )
nrows = int( (rect.yMaximum() - rect.yMinimum() ) / res)
output = QgsGridFileWriter(tin_interpolator,export_path,rect,ncol,nrows,res,res)
output.writeFile(True)
মনে রাখবেন কিউজিআইএস-এপিআই বর্তমানে 3.0.০ সংস্করণে নতুন করে লেখা হয়েছে এবং ব্যবহৃত ইন্টারপোলেশন-ক্লাসগুলি থেকে সরানো qgis.analysisহয়েছে qgis.core! এটি এই স্ক্রিপ্টটির কার্যকারিতাটিতে বিশাল প্রভাব ফেলবে যাতে এটি 3.0 সংস্করণে পুনরায় লিখতে হবে!
from rasterinterpolation import rasterinterpolationকিন্তু কোন মডিউলটি কল করবেন (বা কীভাবে কল করবেন) তাও নিশ্চিত নই।