在pycharm中读取hdf,并基于pyqgis实现ArcGIS的栅格计算器功能
基于PyQGIS在pycharm中实现hdf文件的读取和栅格代数计算。
·
该代码存在bug,仅供参考,请谨慎使用。
说明
QgsRasterCalculator为该代码中的关键函数。与Arcpy不同的是,在pyqgis中只能在QgsRasterCalculator函数中通过字符串形式的公式,完成栅格图层的计算。该代码在最后会抛出代号为4的错误。
代码
from qgis.core import *
from qgis.analysis import *
hdfpath=r"G:\geodata\VIIRS\test1\GMODO-SVM15-SVM16_npp_d20221029_t1827323_e1833127_b57025_c20230125044727079083_oebc_ops.h5"
"""
## Open HDF file
hdflayer = gdal.Open(hdfpath, gdal.GA_ReadOnly)
# Open raster layer
rlayer = gdal.Open(hdflayer.GetSubDatasets()[0][0], gdal.GA_ReadOnly)
#rlayer1=rlayer+3
# Define output raster and warp-reproject
"""
outputName = 'test.tif'
outputRaster = 'G:\\geodata\\VIIRS\\test1\\'+ outputName
"""
gdal.Warp(outputRaster,rlayer,dstSRS='EPSG:4326')"""
resp = QgsRasterLayer(outputRaster)
rast1 = QgsRasterCalculatorEntry()
rast1.raster=resp
rast1.ref="rast1"
rast1.bandNumber=1
resp = QgsRectangle(100,36,146,61) #create a rectangle
formula="rast1+4"
context = QgsCoordinateTransformContext()
ref_crs = QgsCoordinateReferenceSystem("EPSG:4326")
dest_crs = QgsCoordinateReferenceSystem("EPSG:4258")
# According to the documentation, if the third element is void, it should use the default PROJ conversion string
context.addCoordinateOperation(ref_crs, dest_crs, "")
calc = QgsRasterCalculator(formula,outputRaster, 'GTiff', resp, int(resp.width()), int(resp.height()), [rast1],context)
print(calc.processCalculation())
print(outputRaster)
注:QgsRectangle函数中的参数格式为
QgsRectangle(xMin: float, yMin: float = 0, xMax: float = 0, yMax: float = 0)
参考
Using QgsRasterCalculator__gis.stackexchange
https://gis.stackexchange.com/questions/122581/using-qgsrastercalculatorClass: QgsRectangle¶ QGIS Python API
https://qgis.org/pyqgis/3.16/core/QgsRectangle.html#qgis.core.QgsRectangle
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)