Python 使用PyQGIS从QgsVectorLayer的光栅化创建内存QgsRasterlayer?

Python 使用PyQGIS从QgsVectorLayer的光栅化创建内存QgsRasterlayer?,python,gdal,qgis,Python,Gdal,Qgis,我目前正在构建一个QGIS插件,我需要栅格化一个向量层,输出将存储在内存中 为了做到这一点,我尝试了以下方法(来自以下方面的答案): 问题是它不起作用:任何输出都不能被识别为有效输出。我还尝试了“输出”:“内存”但它也不工作。。。所以我想知道我在上面的链接中找到的答案是否正确 注意:QGIS版本:3.4.7与Python3.7一起使用时,我通过以下方式使用“tempfile.TemporaryDirectory()”找到了问题的答案: tf = tempfile.TemporaryDirecto

我目前正在构建一个QGIS插件,我需要栅格化一个向量层,输出将存储在内存中

为了做到这一点,我尝试了以下方法(来自以下方面的答案):

问题是它不起作用:任何输出都不能被识别为有效输出。我还尝试了“输出”:“内存”但它也不工作。。。所以我想知道我在上面的链接中找到的答案是否正确


注意:QGIS版本:3.4.7与Python3.7一起使用时,我通过以下方式使用“tempfile.TemporaryDirectory()”找到了问题的答案:

tf = tempfile.TemporaryDirectory()
tfolder = tf.name + "\\rasterisation.tif"
temp = processing.run("gdal:rasterize",
                       {"INPUT": input_shapefile,
                        "FIELD": "OBJECTID",
                        "UNITS": 1,
                        "WIDTH": resolution,
                        "HEIGHT": resolution,
                        "EXTENT": "%f,%f,%f,%f" % (xmin, xmax, ymin, ymax),
                        "NODATA": -99,
                        "OUTPUT": tfolder})
 rlayer = self.iface.addRasterLayer(tfolder, "Rasterisation")

有关此模块的更多信息,请参阅。

我通过以下方式使用“tempfile.TemporaryDirectory()”找到了问题的答案:

tf = tempfile.TemporaryDirectory()
tfolder = tf.name + "\\rasterisation.tif"
temp = processing.run("gdal:rasterize",
                       {"INPUT": input_shapefile,
                        "FIELD": "OBJECTID",
                        "UNITS": 1,
                        "WIDTH": resolution,
                        "HEIGHT": resolution,
                        "EXTENT": "%f,%f,%f,%f" % (xmin, xmax, ymin, ymax),
                        "NODATA": -99,
                        "OUTPUT": tfolder})
 rlayer = self.iface.addRasterLayer(tfolder, "Rasterisation")

有关此模块的更多信息,请参阅。

您是否也尝试了“输出”:“无”?其中一个是正确的,
None
“None”
,因此您的问题可能与输出无关。谢谢您的回答,@lusitanica。我不再使用“none”来获取错误消息,但我无法在代码中使用它,因为我通过执行“''rlayer=self.iface.addRasterLayer(temp[“OUTPUT”],“光栅化”)””来获取“none:没有这样的文件或目录”,这似乎是合乎逻辑的。。。你知道如何解决这个问题吗?实际上,使用它需要执行“result=processing.getObject(temp[“OUTPUT”]),但是这个模块在QGIS中似乎不再可用(请参见(此链接)[)。显然,你必须使用
QgsProcessingUtils.mapLayerFromString()
,因为
getObject()
被替换为
getLayerFromString()
方法,并移动到
QgsProcessingUtils
命名空间。是的,我已经尝试过了,但我收到了消息“AttributeError:type object'QgsProcessingUtils'没有属性'getLayerFromString'…您是否也尝试过“输出”:“无”其中一个是正确的,
None
“None”
,因此您的问题可能与输出无关。感谢您的回答,@lusitanica。我不再收到“None”的错误消息,但我不能在代码中使用它,因为我通过执行“''rlayer=self.iface.addRasterLayer(temp[“output”])得到“None:没有这样的文件或目录”,“光栅化”)“”,这似乎是合乎逻辑的…你知道我如何解决这个问题吗?实际上,它需要执行“result=processing.getObject(temp[“OUTPUT”])”才能使用它,但这个模块似乎在QGIS中不再可用(请参阅(此链接)[)。显然,你必须使用
QgsProcessingUtils.mapLayerFromString()
取而代之,因为
getObject()
被替换为
getLayerFromString()
方法,并移动到
QgsProcessingUtils
命名空间。是的,我已经尝试过了,但我收到了消息“AttributeError:type object'QgsProcessingUtils'没有属性'getLayerFromString'”。。。