本站消息

站长简介/公众号


站长简介:逗比程序员,理工宅男,前每日优鲜python全栈开发工程师,利用周末时间开发出本站,欢迎关注我的微信公众号:程序员总部,程序员的家,探索程序员的人生之路!分享IT最新技术,关注行业最新动向,让你永不落伍。了解同行们的工资,生活工作中的酸甜苦辣,谋求程序员的最终出路!

  价值13000svip视频教程,python大神匠心打造,零基础python开发工程师视频教程全套,基础+进阶+项目实战,包含课件和源码

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

QGIS/GDAL/Python:QgsVectorLayer 光栅化期间的类型错误

发布于2021-09-23 06:31     阅读(400)     评论(0)     点赞(17)     收藏(5)



我正在 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"})

希望能帮助遇到同样问题的人。干杯!







所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:https://www.pythonheidong.com/blog/article/1046139/d2f226c35e4a9038e584/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

17 0
收藏该文
已收藏

评论内容:(最多支持255个字符)