ฉันกำลังสร้างปลั๊กอิน 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
แต่ไม่ยก):
ฉันพบปัญหาเดียวกันเมื่อใช้งานผ่าน QGIS GUI และใช้เมนูแบบเลื่อนลงเพื่อเลือกscratch
เลเยอร์ของฉันซึ่งอยู่ใน TOC สิ่งนี้เกิดขึ้นไม่ว่าฉันจะระบุเอาท์พุทแรสเตอร์เป็นในหน่วยความจำหรือระบุตำแหน่งบนดิสก์
คำถามนี้ดูเหมือนจะคล้ายกัน แต่วิธีแก้ปัญหาของพวกเขาคือการเพิ่มเลเยอร์หน่วยความจำใน TOC ก่อนที่จะใช้ ฉันได้ทำไปแล้วและยังมีข้อผิดพลาดอยู่
ฉันคิดว่านี่เป็นปัญหาทั่วไปของเลเยอร์หน่วยความจำและอัลกอริทึมการประมวลผลทางภูมิศาสตร์ของ QGIS แต่งานต่อไปนี้ไม่มีปัญหา:
processing.runandload("qgis:fixeddistancebuffer",self.vlayer, 500, 5, True, "output_buffer.shp")
ผมทำอะไรผิดหรือเปล่า? เหตุใดชุดข้อมูลแหล่งหน่วยความจำของฉันจึงไม่สามารถ "ระบุ" ในอัลกอริทึมการประมวลผลบางส่วนได้
แก้ไข: นี่คือซอร์สโค้ดของgdalogr:gridinvdist
หากมีประโยชน์