基于Python批量将HDF文件转为GeoTiff格式并进行拼接、投影转换和矢量裁剪
问题:通常使用的是MODIS的HDF格式数据,但是在近期使用GLASS产品(梁顺林团队)产品时,发现该HDF文件被GDAL库中函数读取后并无子数据集等信息,即包括的波段等等,中间有点麻烦,这篇文章主要记录基于Arcpy对于hdf产品批量的一条龙操作:
格式转换为TIF、拼接、投影转换、裁剪
注意:记录均设置为英文路径,以及不要以数字开头
ArcGIS也可以打开HDF影像
基于Python-GDAL将HDF文件转为GeoTiff格式
这里可能需要先手工转好一下以获取参数
https://www.jianshu.com/p/cd1e1080bd2b
基于Arcpy将HDF文件转为GeoTiff格式
import arcpy arcpy.CheckOutExtension("Spatial") arcpy.gp.overwriteOutput=1 inDir=r'H:\HDFFILES\ALLHDFS' #H:\HDFFILES\ALLHDFS outDir=r'H:\HDFFILES\ALLTIFS' arcpy.env.workspace=inDir rasters=arcpy.ListRasters("*","hdf") for raster in rasters: print(raster) outName=outDir+'\\'+raster[15:30]+'.tif' arcpy.ExtractSubDataset_management(raster,outName) print(outName)
基于Arcpy将Tiff文件进行批量拼接
import os import arcpy inDir=r'D:\HDFFILES\ALLTIFS' outDir=r'D:\HDFFILES\mosaic' #查找每个tile所对应的文件序列 for year in range(2006,2007):#对2006年数据进行拼接,主要也是找出天数命名规律进行文件名设置 print(year) for eday in range(1,362,8): filename1=inDir+'\\'+'A'+str(year)+str(eday).rjust(3,'0')+'.h27v05.tif'#影像tile1 filename2=inDir+'\\'+'A'+str(year)+str(eday).rjust(3,'0')+'.h26v05.tif'#影像tile2 expression=filename1+';'+filename2 outName=str(year)+str(eday).rjust(3,'0')+'_mosaic.tif' print(expression) arcpy.MosaicToNewRaster_management(expression,outDir,outName,"#","#", "#", "1", "#","#") print(outName)
基于Arcpy将GeoTiff格式文件进行批量投影转换
先手工导出一个reference tif文件,以建立一个投影转换关系,再应用到其他文件上
import arcpy inDir=r'H:\HDFFILES\ALLTIFS' outDir=r'H:\HDFFILES\reproj' originReferenceFile=r'H:\HDFFILES\ALLTIFS\A2006001.h26v05.tif' referenceFile=r'H:\HDFFILES\reference.tif' arcpy.CheckOutExtension("spatial") arcpy.gp.overwriteOutput=1 arcpy.env.workspace=inDir rasters=arcpy.ListRasters("*","tif") for raster in rasters: print(raster) outName=outDir+'\\'+raster[0:15]+'_Reproject.tif' print(outName) arcpy.ProjectRaster_management(raster, outName,referenceFile, "#",\ '#','#','#',originReferenceFile)
基于Arcpy批量裁剪GeoTiff格式数据
需要先准备好矢量边界shp数据
import arcpy arcpy.CheckOutExtension("spatial") inDir=r'D:\HDFFILES\reproj'#输入文件所在文件夹 outDir=r'D:\HDFFILES\Mask'#结果文件夹 arcpy.gp.overwriteOutput=1 arcpy.env.workspace = inDir #所有栅格影像所在文件夹 rasters = arcpy.ListRasters("*", "tif") mask= r'D:\00WORK\05QinlingProject\00DATA\QinlingBoundary\Dissolve.shp' #用于提取的矢量掩膜 for raster in rasters: print(raster) outName= outDir+'\\'+raster[0:7]+'.tif'#命名可适当更改 print(outName) arcpy.gp.ExtractByMask_sa(raster, mask, outName) print("OK")
经过以上步骤的处理后算是得到了研究区内的长时间序列影像,但是还是有一个问题,就是在HDF文件转为TIF格式时最大值发生了改变,不知道原因是什么,初步判断为重采样方法为最近邻采样,但是不是很确定
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
2020-03-22 Python基础入门——安装与运行