मैं निम्नलिखित प्रश्न में एक पूर्ण समाधान प्रदान करने में सक्षम था:
क्यूजीआईएस में अजगर कंसोल से एक प्रक्षेप रैस्टर की गणना कैसे करें?
मैं इस उत्तर को यहाँ भी दूंगा, क्योंकि बड़ी रुचि के कारण यह आकर्षित होता है:
उत्तर:
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 के लिए फिर से लिखा जाए!
from rasterinterpolation import rasterinterpolation
लेकिन यकीन नहीं है कि किस मॉड्यूल को कॉल करना है (या कॉल कैसे करना है)।