मैं एक QGIS प्लगइन का निर्माण कर रहा हूं जो स्थानीय नेटवर्क में एक MySQL डेटाबेस से जुड़ता है, और फिर एक टेबल से एक इन-मेमोरी लेयर के सबसेट को जोड़ता है; सबसेट डेटा मुद्रा पर आधारित है (केवल प्रत्येक स्थान के लिए सबसे हालिया अवलोकन ले रहा है जहां माप किए जाते हैं)। यह मेमोरी लेयर सफलतापूर्वक बनाई गई है।
हालाँकि मैं तब कुछ जियोप्रोसेसिंग एल्गोरिदम चलाना चाहता हूं, और मुझे उनमें से किसी में इन-मेमोरी लेयर का उपयोग करने में परेशानी हो रही है।
self.stationuri = "point?crs=epsg:4326&field=id:integer&field={}:double&index=yes".format(self.cb_field.currentText())
self.vlayer = QgsVectorLayer(self.stationuri,"scratch","memory")
if not self.vlayer.isValid():
raise Exception("Failed to create in-memory layer")
self.vlayer.startEditing()
for i,r in enumerate(result): # Result is row-by-row result of SQL query
# Add features
...
self.vlayer.commitChanges()
self.vlayer.updateExtents()
# Add layer to map
QgsMapLayerRegistry.instance().addMapLayer(self.vlayer)
# Layer is successfully added to map with all features and geometry
# BELOW IS WHERE IT FALLS APART
try:
processing.runandload("gdalogr:gridinvdist",self.vlayer,self.cb_field.currentText(),2,0,0,0,0,0,0,0,'Float32',None) # None = in-memory output; I get the same error if I specify a string path and filename.
except Exception, e:
raise e
कोई अपवाद नहीं उठाया गया है, लेकिन कोई आउटपुट TOC में नहीं बनाया या जोड़ा जाता है, लेकिन निम्न लॉग निम्न में बनाया गया है processing.log
:
INFO|Mon May 04 2015 11:28:23|GDAL execution console output|/bin/sh: 1: /tmp/processing/bbebe7599c83446d9c2b03a251879657/OUTPUT.tif: not found|/bin/sh: 1: -zfield: not found||FAILURE: Source datasource is not specified.|Usage: gdal_grid [--help-general] [--formats]| [-ot {Byte/Int16/UInt16/UInt32/Int32/Float32/Float64/| CInt16/CInt32/CFloat32/CFloat64}]| [-of format] [-co "NAME=VALUE"]| [-zfield field_name] [-z_increase increase_value] [-z_multiply multiply_value]| [-a_srs srs_def] [-spat xmin ymin xmax ymax]| [-clipsrc <xmin ymin xmax ymax>|WKT|datasource|spat_extent]| [-clipsrcsql sql_statement] [-clipsrclayer layer]| [-clipsrcwhere expression]| [-l layername]* [-where expression] [-sql select_statement]| [-txe xmin xmax] [-tye ymin ymax] [-outsize xsize ysize]| [-a algorithm[:parameter1=value1]*] [-q]| <src_datasource> <dst_filename>||Available algorithms and parameters with their's defaults:| Inverse distance to a power (default)| invdist:power=2.0:smoothing=0.0:radius1=0.0:radius2=0.0:angle=0.0:max_points=0:min_points=0:nodata=0.0| Moving average| average:radius1=0.0:radius2=0.0:angle=0.0:min_points=0:nodata=0.0| Nearest neighbor| nearest:radius1=0.0:radius2=0.0:angle=0.0:nodata=0.0| Various data metrics| <metric name>:radius1=0.0:radius2=0.0:angle=0.0:min_points=0:nodata=0.0| possible metrics are:| minimum| maximum| range| count| average_distance| average_distance_pts|
महत्वपूर्ण हिस्सा लगता है FAILURE: Source datasource is not specified.
हालांकि self.vlayer.isValid() == True
, इसलिए मुझे नहीं लगता कि मेरे इनपुट में क्या गलत है। मैं प्रतिस्थापन है की कोशिश की self.vlayer
के साथ 'memory:scratch'
करने के लिए कॉल में processing.runandload
, लेकिन फिर मैं निम्न त्रुटि कंसोल के लिए मुद्रित (लेकिन नहीं उठाया) मिलती है: Error: Wrong parameter value: memory:scratch
।
क्यूजीआईएस जीयूआई के माध्यम से इसे चलाने के दौरान मुझे एक ही मुद्दा मिलता है, और scratch
टीओसी में मेरी परत का चयन करने के लिए ड्रॉपडाउन मेनू का उपयोग किया जाता है। यह तब होता है जब मैं आउटपुट रैस्टर को इन-मेमोरी के रूप में निर्दिष्ट करता हूं या डिस्क पर कोई स्थान निर्दिष्ट करता हूं।
यह प्रश्न समान लगता है, लेकिन उनका समाधान यह था कि मेमोरी परत को उपयोग करने से पहले टीओसी में जोड़ा जाए। मैं पहले से ही ऐसा कर रहा हूं और फिर भी त्रुटि बनी हुई है।
मैंने सोचा था कि यह मेमोरी लेयर्स और QGIS जियोप्रोसेसिंग एल्गोरिदम के साथ एक सामान्य मुद्दा था, लेकिन निम्नलिखित मुद्दे के बिना काम करता है:
processing.runandload("qgis:fixeddistancebuffer",self.vlayer, 500, 5, True, "output_buffer.shp")
मैं क्या गलत कर रहा हूं? कुछ प्रोसेसिंग एल्गोरिदम में मेरे मेमोरी सोर्स डेटासेट को "निर्दिष्ट" क्यों नहीं किया जा सकता है?
संपादित करें: यदि उपयोगी है तो यहां स्रोत कोड है gdalogr:gridinvdist
।