python - QGIS / GDAL / Python:QgsVectorLayer光栅化期间的TypeError
问题描述
我正在使用 QGIS 中的 python 脚本,并试图栅格化包含单个多边形的矢量图层。我正在使用 QGIS 3.2 并遇到以下回溯,我无法处理:
File "C:\OSGEO4~1\apps\Python36\lib\code.py", line 91, in runcode
exec(code, self.locals)
File "<input>", line 1, in <module>
File "<string>", line 118, in <module>
File "C:\OSGEO4~1\apps\Python36\lib\site-packages\osgeo\gdal.py", line 2738, in RasterizeLayer
return _gdal.RasterizeLayer(*args, **kwargs)
TypeError: in method 'RasterizeLayer', argument 4 of type 'OGRLayerShadow *'
以下代码生成上述错误(第 118 行是最后一行):
# 5. rasterize vector layer and save as tiff
gdal.UseExceptions()
# a) define resolution and NoData value of new raster
x_res = 0.001 # degree per pixel
y_res = 0.001 # smaller value gives larger tiffs (higher resolution)
NoData_value = -9999
# b) filename for output
_out = r"D:/asdf23.tiff"
# c) get extent of layer
qgsRect = layer.extent()
x_min = qgsRect.xMinimum(); x_max = qgsRect.xMaximum()
y_min = qgsRect.yMinimum(); y_max = qgsRect.yMaximum()
# d) create target - TIFF
nbPixelX = int( (x_max - x_min) / x_res )
nbPixelY = int( (y_max - y_min) / y_res )
srs = layer.sourceCrs()
raster = gdal.GetDriverByName('GTiff').Create(_out, nbPixelX, nbPixelY, 1, gdal.GDT_Int32)
raster.SetProjection(srs.toWkt())
raster.SetGeoTransform((x_min, x_res, 0, y_max, 0, -y_res))
band = raster.GetRasterBand(1)
band.SetNoDataValue(NoData_value)
# e) Rasterize
err = gdal.RasterizeLayer(raster, [1], layer, burn_values=[102])
非常感谢任何提示和技巧,因为我的想法已经不多了。谢谢!
解决方案
最后通过处理模块解决了:
import processing
extent = layer.extent()
xmin = extent.xMinimum()
xmax = extent.xMaximum()
ymin = extent.yMinimum()
ymax = extent.yMaximum()
processing.run("gdal:rasterize",
{"INPUT":layer,
"FIELD":"myElev",
"UNITS":0,
"WIDTH":300,
"HEIGHT":300,
"EXTENT":"%f,%f,%f,%f"% (xmin, xmax, ymin, ymax),
"NODATA":0,
"DATA_TYPE":1,
"INVERT":0,
"OUTPUT":"D:/myPath/file.tif"})
希望能帮助遇到同样问题的人。干杯!
推荐阅读
- flutter - 如何在charts_flutter中更改条形图中条形的宽度?
- java - Spring Boot Admin - 持久化应用程序和事件
- azure - 如何在映射数据流的联接转换中写入 <= 条件
- java - 自定义测试结果监听器
- javascript - 添加具有相同类的新字段后验证输入字段
- swift - SwiftUI TupleView 和泛型,如何递归解析一些 View 和 Group 的元组
- python - 如何监控 SciPy.odeint 的进程?
- django - /admin 处的 ModuleNotFoundError 没有名为“winsound”的模块
- python - scrapy爬虫的请求被阻塞。使用requests库的请求可以正常访问。什么原因?
- node.js - 如何使用 Dialogflow 执行 Firebase 身份验证