Python读取hdf文件并转化为tiff格式输出

15 篇文章 4 订阅

1.Python3读取hdf文件

 最开始使用Python导入pyhdf包的时候是可以的,但是当导入pyhdf.SD
的时候就出现了以下问题:

在这里插入图片描述
 我查询了很多的相关问题,但是都不能解决我的问题。
 网络上解释,这种原因是由于 numpypyhdf 的版本号不对应所造成的,而我用的是Python3.9版本,确实找不到哪一个版本的numpy与之对应。
 但是网上有人说是因为pyhdf只能在Python2中才能运行,于是我又下载了Python2.7,但其实pyhdf在Python2、3上都能运行:

在这里插入图片描述

2.使用Python2读取hdf文件

 我在官网上下载了最新的Python2.7.18版本(目前已停止更新),并进行安装。
 安装好Python2.7之后,需要重新配置环境变量:此电脑(右击)——属性——高级系统设置——环境变量(高级)——在系统变量(s)的path中添加Python2.7的路径:
在这里插入图片描述
 配置好之后,可以在CMD命令窗口中输入python查看,是否成功。

在这里插入图片描述
配置成功!

3. 如何使Python2和3兼容

 因为我电脑里面原本装有Python3.9,此时又装入了Python2.7,某些命令难免会冲突,比如,pip下载whl时,不知道是下载到那个版本中,所以这里需要使两个版本区别开来。

3.1 修改Python2.7的名字

 修改 python.exe 名字为 python2.exepython3.exe
在这里插入图片描述
在这里插入图片描述
 之后再在CMD窗口中运行Python:

在这里插入图片描述
python版本号查看:

在这里插入图片描述

配置成功!

3.2 pip更新

 Python 安装包需要用到包管理工具pip,但是当同时安装python2和python3的时候,pip只是其中一个版本,以下将提供一个修改方式,即重新安装两个版本的pip,使得两个python版本的pip能够共存。
在DOS命令框输入命令:
1. pip3:

python3 -m pip install --upgrade pip --force-reinstall

在这里插入图片描述
2. pip2

python2 -m pip install --upgrade pip --force-reinstall

在这里插入图片描述
以上配置完成!

3.2 使用pip2下载python2.7对应的包

 这里简单下载了numpy、GDAL、hypdf,其中GDAL和pyhdf只在官网下载的:
在这里插入图片描述在这里插入图片描述

pip install GDAL-2.2.4-cp27-cp27m-win_amd64.whl

**注意:**要切换到文件所在文件夹,才能完成安装!

在这里插入图片描述
pyhdf.SD成功导入,问题解决:

在这里插入图片描述

4. 使用python2.7.18读取hdf文件并输出为TIFF格式

# -*- coding : utf-8 -*-
# C:/python2.7

from osgeo import gdal, ogr, osr
import warnings
warnings.simplefilter ("ignore")
from osgeo import gdal
from pyhdf.SD import SD, SDC, SDim


'''File path'''
filepath = r'D:\Datasets\NIEER_CGF-MODIS_SCE_DAILY.hdf'
'''Data'''
filename = filepath.split('\\')[-1].split('.')[0]
hdf = SD(filepath)
snow = hdf.select('Day_Snow_Cover_Area').get()

'''Spatial Reference'''
sr = osr.SpatialReference()
sr.ImportFromEPSG(4326)
s=sr.ExportToWkt()
driver=gdal.GetDriverByName("GTiff")
dataset=driver.Create(filename+'.tif',14000,8000,1,gdal.GDT_Int16, ["TILED=YES", "COMPRESS=LZW"])
im_geotrans=(72,0.005,0.0,56,0.0,-0.005)
dataset.SetGeoTransform(im_geotrans)
dataset.SetProjection(s)
dataset.GetRasterBand(1).WriteArray(snow)

文件展示:

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
读取并转换成功!

4.1 补充:批量处理.hdf数据

# -*- coding: cp936 -*-
# -*- coding : utf-8 -*-
# C:/python2.7
# @time:2023/3/27 21:38:54

from osgeo import gdal, ogr, osr
import os
import warnings
warnings.simplefilter("ignore")
from osgeo import gdal
from pyhdf.SD import SD, SDC, SDim

'''File path'''
data_dir = r'D:\Datasets'
for filename in os.listdir(data_dir):
    if filename.endswith('.hdf'):
        filepath = os.path.join(data_dir, filename)

        '''Data'''
        filename = filename.split('.')[0]
        hdf = SD(filepath)
        snow = hdf.select('Day_Snow_Cover_Area').get()

        '''Spatial Reference'''
        sr = osr.SpatialReference()
        sr.ImportFromEPSG(4326)
        s=sr.ExportToWkt()
        driver=gdal.GetDriverByName("GTiff")
        dataset=driver.Create(filename+'.tif',14000,8000,1,gdal.GDT_Int16, ["TILED=YES", "COMPRESS=LZW"])
        im_geotrans=(72,0.005,0.0,56,0.0,-0.005)
        dataset.SetGeoTransform(im_geotrans)
        dataset.SetProjection(s)
        dataset.GetRasterBand(1).WriteArray(snow)

2. 补充

仿射变换的参数设置,如 im_geotrans=(72,0.005,0.0,56,0.0,-0.005):

  • 7
    点赞
  • 65
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 23
    评论
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jackson的生态模型

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值