QGIS के पायथन कंसोल से इंटरपोलेशन प्लगइन को कॉल करना


13

मैं अजगर सांत्वना से QGIS इंटरपोलेशन प्लगइन फंक्शन (TIN मेथड) (Raster-> इंटरपोलेट) को कॉल करना चाहूंगा।

मैं QGIS API के भीतर या प्रोसेसिंग एल्गोरिथ्म सूची के भीतर संबंधित फ़ंक्शन नहीं ढूँढ सकता। मुझे SAGA त्रिकोणासन एल्गोरिथ्म मिला, जो ठीक काम करता है, लेकिन 5-10 x धीमा है और मेरे मामले में गति महत्वपूर्ण है।

किसी भी विचार यह कैसे निष्पादित करने के लिए?


2
हालाँकि मुझे इसकी आवश्यकता नहीं है, फिर भी यह जानना उपयोगी होगा। मैंने इस लिंक का अनुसरण किया: ( gis.stackexchange.com/questions/11216/… )। मैं जहाँ तक गया, from rasterinterpolation import rasterinterpolationलेकिन यकीन नहीं है कि किस मॉड्यूल को कॉल करना है (या कॉल कैसे करना है)।
जोसेफ

क्या आप अपनी आवश्यकताओं को थोड़ा और स्पष्ट कर सकते हैं? क्या आप एक इनपुट रैस्टर परत से एक नई प्रक्षेपित रेखापुंज परत की गणना करने का तरीका खोज रहे हैं?
UnderDark

मेरे पास एक समान समस्या है: मैं एक काउंटौर मॉडल बनाना चाहता हूं जो रैस्टर \ इंटरपोलेशन के साथ शुरू होता है और उसके बाद ग्रिड से सागा / कंट्रोस। प्रश्न है - "प्रोसेसिंग मॉडलर" विंडो में रैस्टरिनेपोलर कैसे जोड़ें?
एच। वीनर

जवाबों:


5

मैं निम्नलिखित प्रश्न में एक पूर्ण समाधान प्रदान करने में सक्षम था:

क्यूजीआईएस में अजगर कंसोल से एक प्रक्षेप रैस्टर की गणना कैसे करें?

मैं इस उत्तर को यहाँ भी दूंगा, क्योंकि बड़ी रुचि के कारण यह आकर्षित होता है:

उत्तर:

Pyqgis पर दस्तावेज़ीकरण बहुत आत्म व्याख्यात्मक नहीं है, लेकिन मैं समझ कैसे ठीक संबद्ध प्रक्षेप कक्षाएं कॉल करने के लिए ( QgsInterpolator, QgsTINInterpolator, QgsIDWInterpolator, QgsGridFileWriter) अजगर से। मैं स्क्रिप्ट के हर चरण का विस्तार से वर्णन करने जा रहा हूं:

चरण 1:

कोर और विश्लेषण मॉड्यूल आयात करें और परत टैब में एक मूसलीक के साथ चयन करके प्रक्षेप के लिए वांछित वेक्टर परत प्राप्त करें।

import qgis.core
import qgis.analysis

layer = qgis.utils.iface.activeLayer()

चरण 2:

आवश्यक पैरामीटर्स के साथ प्रक्षेप कक्षाएं तैयार करें। LayerData संरचना के प्रारंभ के लिए सटीक पैरामीटर QGIS API डॉक्स (खोजकर्ता: QgsInterpolator) में पाए जा सकते हैं ।

layer_data = QgsInterpolator.LayerData()
layer_data.vectorLayer = layer
layer_data.zCoordInterpolation=False
layer_data.InterpolationAttribute =0
layer_data.mInputType = 1

कृपया ध्यान दें कि मैं Z निर्देशांक का उपयोग नहीं करता हूं, मुझे पहला उपलब्ध क्षेत्र (इंडेक्स = 0) इंटरपोलेशन विशेषता के रूप में मिलता है, और इनपुट के रूप में POINTS का उपयोग करते हैं।

चरण 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- ग्रिड ( .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)

ध्यान रखें कि QGIS-API वर्तमान में संस्करण 3.0 में फिर से लिखा गया है और उपयोग किए गए प्रक्षेप-वर्ग को इससे स्थानांतरित कर दिया गया qgis.analysisहै qgis.core! इस स्क्रिप्ट की कार्यक्षमता पर इसका बहुत बड़ा प्रभाव पड़ेगा ताकि इसे संस्करण 3.0 के लिए फिर से लिखा जाए!


1
मैं आपके उदाहरण कोड की कोशिश करता हूं, लेकिन केवल layer_data द्वारा काम कर रहा हूं। InterpolationAttribute = 0, मैं एक और फील्ड इंडेक्स के साथ कोशिश करता हूं, लेकिन केवल 0. मिलता है
लियोनार्ड

यह सही है - मुझे भी इस समस्या का सामना करना पड़ा, लेकिन मेरे पास इस कारण की जांच करने के लिए पर्याप्त समय नहीं था। मेरा समाधान स्क्रिप्ट को एक परत को खिलाने के लिए था जिसमें सिर्फ वांछित क्षेत्र था। आप बेहतर समाधान के लिए QGIS API डॉक्स आज़मा सकते हैं।
root676

3

यदि आप Raster Interpolation plugin को Plugin Manager का उपयोग करके इंस्टॉल करते हैं तो आप ऐसा कर सकते हैं।

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

नोट: मुझे वास्तव में पता नहीं है कि उपरोक्त कोड इस तथ्य के अलावा क्या करता है कि यह एक मूल्य मुद्रित करता है। लेकिन यह शायद आपको उपयोग को समझने में मदद करेगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.