আমি নিম্নলিখিত প্রশ্নের সম্পূর্ণ সমাধান প্রদান করতে সক্ষম হয়েছি:
কিউজিআইএস-এ পাইথন কনসোল থেকে কীভাবে কোনও ইন্টারপোলেশন রাস্টার গণনা করা যায়?
আমি এখানেও উত্তরটি পুনরায় পোস্ট করব, কারণ বিশাল আগ্রহের কারণে এটি আকর্ষণীয় বলে মনে হচ্ছে:
উত্তর:
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
কিন্তু কোন মডিউলটি কল করবেন (বা কীভাবে কল করবেন) তাও নিশ্চিত নই।