কিউজিআইএসের পাইথন কনসোল থেকে ইন্টারপোলেশন প্লাগইন কল করা হচ্ছে


13

আমি পাইথন কনসোল থেকে কিউজিআইএস ইন্টারপোলেশন প্লাগইন ফাংশন (টিআইএন পদ্ধতি) (রাস্টার-> ইন্টারপোলেট) কল করতে চাই।

আমি QGIS API বা প্রসেসিং অ্যালগরিদম তালিকার মধ্যে সংশ্লিষ্ট ফাংশনটি খুঁজে পাচ্ছি না। আমি সাগা ট্রায়ানগুলেশন অ্যালগরিদমটি পেয়েছি, যা সূক্ষ্মভাবে কাজ করে তবে 5-10 এক্স ধীর এবং গতি আমার ক্ষেত্রে গুরুত্বপূর্ণ।

এটি কার্যকর করতে কোন ধারণা?


2
যদিও আমার এটির প্রয়োজন নেই, এটি জেনে রাখা দরকারী জিনিস। আমি এই লিঙ্কটি অনুসরণ করেছি: ( gis.stackexchange.com/questions/11216/… )। আমি যতদূর পেরেছি from rasterinterpolation import rasterinterpolationকিন্তু কোন মডিউলটি কল করবেন (বা কীভাবে কল করবেন) তাও নিশ্চিত নই।
জোসেফ

আপনি আপনার প্রয়োজনীয়তা আরও কিছুটা পরিষ্কার করতে পারেন? আপনি কি কেবল কোনও ইনপুট রাস্টার স্তর থেকে একটি নতুন ইন্টারপোলটেড রাস্টার স্তরটি গণনার কোনও উপায় অনুসন্ধান করছেন?
আন্ডার ডার্ক

আমার অনুরূপ সমস্যা রয়েছে: আমি একটি কাউন্টর মডেল তৈরি করতে চাই যা রাস্টার \ ইন্টারপোলেশন এর পরে গ্রাড থেকে সাগা \ সংক্ষেপে শুরু হয়। প্রশ্নটি হল - "প্রসেসিং মডেলার" উইন্ডোতে রাস্টারিনেরপোলটার কীভাবে যুক্ত করবেন?
এইচ.ওয়েনার

উত্তর:


5

আমি নিম্নলিখিত প্রশ্নের সম্পূর্ণ সমাধান প্রদান করতে সক্ষম হয়েছি:

কিউজিআইএস-এ পাইথন কনসোল থেকে কীভাবে কোনও ইন্টারপোলেশন রাস্টার গণনা করা যায়?

আমি এখানেও উত্তরটি পুনরায় পোস্ট করব, কারণ বিশাল আগ্রহের কারণে এটি আকর্ষণীয় বলে মনে হচ্ছে:

উত্তর:

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 সংস্করণে পুনরায় লিখতে হবে!


1
আমি আপনার উদাহরণ কোডটি চেষ্টা করে দেখি, তবে কেবল স্তর_ডাটা দ্বারা কাজ করছি n আন্তঃপোলেশনঅ্যাট্রিবিউট = 0, আমি অন্য ক্ষেত্রের সূচী দিয়ে চেষ্টা করি, এবং কেবল 0 পাই
লিওনার্ড

এটা ঠিক - আমিও এই সমস্যার মুখোমুখি হয়েছি, তবে কারণ অনুসন্ধানের জন্য আমার পর্যাপ্ত সময় নেই। আমার সমাধানটি ছিল স্ক্রিপ্টটিকে এমন একটি স্তর খাওয়ানো যাতে কেবলমাত্র একক পছন্দসই ক্ষেত্র থাকে had আপনি উন্নত সমাধানের জন্য QGIS API ডক্স চেষ্টা করতে পারেন।
রুট 676

3

আপনি যদি প্লাস্টিন ম্যানেজার ব্যবহার করে রাস্টার ইন্টারপোলেশন প্লাগইন ইনস্টল করে থাকেন তবে আপনি এটি করতে পারেন।

from rasterinterpolation.core.rasterinterpolator import RasterInterpolator
rastLayer = iface.activeLayer()
interpolator = RasterInterpolator(rastLayer,0,1)
a= interpolator.linear(QgsPoint(10.662629, 76.225421))
print a

দ্রষ্টব্য: আমি সত্যই জানি না যে উপরের কোডটি এটির কোনও মূল্য ছাপিয়েছে তা ছাড়া অন্যটি কী করে। তবে এটি সম্ভবত আপনাকে ব্যবহার বুঝতে সাহায্য করবে।

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