python gdal:hdf转tif

HDF转CSV CSV转tif HDF转CSV CSV转tif 以温室气体CO2为例 阅读详情

比较多的人用arcpy转换hdf文件(https://blog.youkuaiyun.com/Orange_GISer/article/details/122978951?spm=1001.2101.3001.6650.5&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-5.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-5.pc_relevant_default&utm_relevant_index=7),但是感觉一直有点问题,本文参考:https://zhuanlan.zhihu.com/p/133226223,但是这个代码的GeoTransform的计算应该是有问题的。

步骤主要是读取属性值/经纬度
保存为tif时,最重要的是 GeoTransform的构建

注意GeoTransform是一个含有6个参数的array,六个参数分别是:
GeoTransform[0] top left x 左上角x坐标
GeoTransform[1] w-e pixel resolution 东西方向像素分辨率
GeoTransform[2] rotation, 0 if image is “north up” 旋转角度,正北向上时为0
GeoTransform[3] top left y 左上角y坐标
GeoTransform[4] rotation, 0 if image is “north up” 旋转角度,正北向上时为0
GeoTransform[5] n-s pixel resolution 南北向像素分辨率
x/y为图像的x/y坐标,geox/geoy为对应的投影坐标

比如,对没有旋转的栅格数据,参数2 4均可直接设置为0。

PS. 为防止参考文章丢失,贴出一份代码,希望大家还是去原链学习,博主写的非常详细

import gdal, osr
import numpy as np
import os

#  数组保存为tif
def array2raster(TifName, GeoTransform, array):
    cols = array.shape[1]  # 矩阵列数
    rows = array.shape[0]  # 矩阵行数
    driver = gdal.GetDriverByName('GTiff')
    outRaster = driver.Create(TifName, cols, rows, 1, gdal.GDT_Float32)
    # 括号中两个0表示起始像元的行列号从(0,0)开始
    outRaster.SetGeoTransform(tuple(GeoTransform))
    # 获取数据集第一个波段,是从1开始,不是从0开始
    outband = outRaster.GetRasterBand(1)
    outband.WriteArray(array)
    outRasterSRS = osr.SpatialReference()
    # 代码4326表示WGS84坐标
    outRasterSRS.ImportFromEPSG(4326)
    outRaster.SetProjection(outRasterSRS.ExportToWkt())
    outband.FlushCache()
    
#  hdf批量转tif
def hdf2tif_batch(hdfFolder):
    #  获取文件夹内的文件名
    hdfNameList = os.listdir(hdfFolder)
    for i in range(len(hdfNameList)):
        #  判断当前文件是否为HDF文件
        if(os.path.splitext(hdfNameList[i])[1] == ".hdf"):
            hdfPath = hdfFolder+"/"+hdfNameList[i]
            #  gdal打开hdf数据集
            datasets = gdal.Open(hdfPath)
            
            #  获取hdf中的元数据
            Metadata = datasets.GetMetadata()
            #  获取四个角的维度
            Latitudes = Metadata["GRINGPOINTLATITUDE.1"]
            #  采用", "进行分割
            LatitudesList = Latitudes.split(", ")
            #  获取四个角的经度
            Longitude = Metadata["GRINGPOINTLONGITUDE.1"]
            #  采用", "进行分割
            LongitudeList = Longitude.split(", ")

            # 图像四个角的地理坐标
            GeoCoordinates = np.zeros((4, 2), dtype = "float32")
            GeoCoordinates[0] = np.array([float(LongitudeList[0]),float(LatitudesList[0])])
            GeoCoordinates[1] = np.array([float(LongitudeList[1]),float(LatitudesList[1])])
            GeoCoordinates[2] = np.array([float(LongitudeList[2]),float(LatitudesList[2])])
            GeoCoordinates[3] = np.array([float(LongitudeList[3]),float(LatitudesList[3])])

            #  列数
            Columns = float(Metadata["DATACOLUMNS"])
            #  行数
            Rows = float(Metadata["DATAROWS"])
            #  图像四个角的图像坐标
            PixelCoordinates = np.array([[0, 0],
                                         [Columns - 1, 0],
                                         [Columns - 1, Rows - 1],
                                         [0, Rows - 1]], dtype = "float32")
    
            #  计算仿射变换矩阵
            from scipy.optimize import leastsq
            def func(i):
                Transform0, Transform1, Transform2, Transform3, Transform4, Transform5 = i[0], i[1], i[2], i[3], i[4], i[5]
                return [Transform0 + PixelCoordinates[0][0] * Transform1 + PixelCoordinates[0][1] * Transform2 - GeoCoordinates[0][0],
                        Transform3 + PixelCoordinates[0][0] * Transform4 + PixelCoordinates[0][1] * Transform5 - GeoCoordinates[0][1],
                        Transform0 + PixelCoordinates[1][0] * Transform1 + PixelCoordinates[1][1] * Transform2 - GeoCoordinates[1][0],
                        Transform3 + PixelCoordinates[1][0] * Transform4 + PixelCoordinates[1][1] * Transform5 - GeoCoordinates[1][1],
                        Transform0 + PixelCoordinates[2][0] * Transform1 + PixelCoordinates[2][1] * Transform2 - GeoCoordinates[2][0],
                        Transform3 + PixelCoordinates[2][0] * Transform4 + PixelCoordinates[2][1] * Transform5 - GeoCoordinates[2][1],
                        Transform0 + PixelCoordinates[3][0] * Transform1 + PixelCoordinates[3][1] * Transform2 - GeoCoordinates[3][0],
                        Transform3 + PixelCoordinates[3][0] * Transform4 + PixelCoordinates[3][1] * Transform5 - GeoCoordinates[3][1]]
            #  最小二乘法求解
            GeoTransform = leastsq(func,np.asarray((1,1,1,1,1,1)))

            #  获取数据时间
            date = Metadata["RANGEBEGINNINGDATE"]

            #  第一个子数据集合,也就是NDVI数据
            DatasetNDVI = datasets.GetSubDatasets()[0][0]
            RasterNDVI = gdal.Open(DatasetNDVI)
            NDVI = RasterNDVI.ReadAsArray()
            
            TifName = date + ".tif"
            array2raster(TifName, GeoTransform[0], NDVI)
            print(TifName,"Saved successfully!")
            
hdf2tif_batch(r"E:\Remote_Sensing_Data\TVDI\MOD13A3\2012")
HDF文件转Tif 温室气体 python代码 HDF文件转Tif 温室气体CO2 python代码 阅读详情

相关推荐

python读取hdf文件 高效_命令行记录-python读取hdf图层,转成tif文件

主体内容来自 https://www.cnblogs.com/ninicwang/p/11535170.html1、安装pyhdf包2、读hdf4文件#导入包from pyhdf.SD import *from osgeo import osrimport numpy as np(1) #读取文件file='3B43.20100501.7.HDF'hdf=SD(file)#可查看hdf的函数&gt...

weixin_39621060的博客 573

Python地学分析 — GDAL读取HDF数据并保存为TIF图像

欢迎关注博主的微信公众号:“智能遥感”。 该公众号将为您奉上Python地学分析、爬虫、数据分析、Web开发、机器学习、深度学习等热门源代码。 本人的GitHub代码资料主页(持续更新中,多给Star,多Fork): https://github.com/xbr2017 优快云也在同步更新: https://blog.youkuaiyun.com/XBR_2014   “ 本节通过Pyth...

一叶知秋的博客 1万+

HDF转GeoTIFF全攻略:GDAL与Python批量处理遥感数据

遥感影像处理中,HDF作为科学数据集的标准容器,存储了丰富的多波段信息,但直接用于GIS分析和深度学习却存在格式壁垒。理解HDF的分层结构、投影与地理变换机制,是高效提取栅格价值的前提。通过GDAL库与Python脚本的配合,可将复杂的HDF产品批量转换为通用性更强的GeoTIFF格式,同时解决坐标系纠偏、多波段配准与性能优化等工程难题。这类自动化流程在国土监测、植被指数反演及时序分析等场景中极具实用价值,能显著提升数据预处理效率。ENVI界面操作与命令行转换互为补充,兼顾可视化验证与规模化生产。围绕HDF

weixin_31364787的博客 206

HDF4文件转TIF格式

取值范围为0-250,比例系数为0.004,实际FVC取值需要乘以0.004,所以波段的每个值需要乘以0.004得到实际的FVC值。如果想排除海洋部分,可能需要做一个陆地掩膜的tif,陆地部分为1,海洋部分为nodata,然后两个tif做光栅运算,这样就可以只关心陆地部分。然后准备用python转换,发现需要使用pyhdf包,安装有点麻烦,解决老版本的HDF文件转换问题也有点麻烦。打开ENVI软件,选择文件,选择打开为,选择通用格式,选择HDF4可以直接导入HDF4文件。我使用的ENVI版本是5.3。

pengbr的博客 1802

Python实现HDF转TIFF文件格式转换工具实战

Geospatial Data Abstraction Library(GDAL)是处理GeoTIFF事实上的标准工具。其GTiff驱动全面支持读写GeoTIFF元数据。# 创建带投影的GeoTIFF# 设置仿射变换(左上角坐标与像素大小)# 定义空间参考系统(UTM Zone 10N)# 写入数据# 清理参数说明:Create()参数控制输出格式;接受六参数仿射变换;接收WKT格式的空间参考描述。

weixin_36184718的博客 971

单细胞实战之亚细胞分群从T/NK至CD4+T细胞——从入门到进阶(中级篇1)

亚细胞分群从T/NK至CD4+T细胞

zfyyzhys的博客 6392

(Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息

中国1千米分辨率逐日全天候地表土壤水分数据集(2003-2022)hdf5文件预处理python编程

一点记录 3548

.ipynb文件深度解析:从JSON结构到Jupyter Notebook高效使用指南

在Python开发与数据处理领域,交互式编程正成为探索数据与验证思路的高效方式。Jupyter Notebook作为最流行的交互式环境之一,其默认文件格式.ipynb本质是一个基于JSON的文本文件,内部通过单元格组织代码、说明文字与运行结果。理解其JSON结构,不仅有助于掌握Notebook的存储原理,更能为文件损坏修复、版本控制与自动化转换提供基础。依托对单元格类型、魔法命令及输出可视化的熟练运用,数据分析和数据可视化流程可以变得更为流畅。同时,借助VS Code、nbconvert等工具,开发者能将.

weixin_28839629的博客 350

HDF文件转TIF

HDF转TIF的方法

zhanglucia的博客 4527

STK中的传感器、雷达、发射机、接收机、天线

本文根据STK手册介绍了传感器、雷达、发射机、接收机、天线等对象的基本属性,简略分析了它们的不同之处。

wangyulj的专栏 1万+

Abaqus小白必看:用Micromechanics Plugin轻松搞定RVE周期性边界条件(附避坑指南)

本文为Abaqus初学者提供了使用官方Micromechanics Plugin插件高效实现复合材料代表性体积单元分析的完整指南。文章详细讲解了从插件安装、模型准备、周期性边界条件自动设置到结果验证的全流程,并重点分享了处理复杂模型和避免常见错误的实用技巧,帮助用户大幅提升RVE分析效率与准确性。

weixin_28363123的博客 801

Python HDF_TIFF及投影转换

Python将hdf文件中的某个图层转换成Tiff输出 以MODIS数据为例,选择其中一个图层输出,并进行投影转换,将MODIS的正弦曲线投影转换为特定投影坐标系(UTM)。 from osgeo import gdal # 输入文件路径(HDF 文件) input_hdf = 'MCD.hdf' # 输出文件路径(TIFF 文件) output_tiff = 'MCD43A3.tif' # 要提取的图层名称 layer_name = "要输出的图层" # 投影转换参数 target_projection

qq_44485671的博客 906

AD创建属于自己的元件库(详细)

我今天开始学习AD2022,但是我想自己创建属于自己的元件库,但是奈何找了好多教程就是随便几句话就把我打发走了,弄了一天都没搞定(也许是我比较菜),所以现在乱懂了,自己写一个属于我们自己小白的教程,希望有用吧哈哈我比较偷懒,直接使用嘉立创上画好的元件导入,和我们自己创建自己画的步骤其实都一样。

qq_33591173的博客 2万+

python把hdf转为tif_【亲测】Python-GDAL 把MODIS HDF影像写入并导出为GeoTiff

写在前边,昨日鏖战许久未能在Windows平台上搞定基于R语言(主要是rgdal 与gdalUtils)的HDF文件的预处理,主要报错为:Error in gdal_chooseInstallation(hasDrivers = of) :No installations match.然后,夜以继日地在网上找解决方案,发现只有问题,没有方案。。。内心崩溃之余,顺手换了平台与语言,以下是比较成功的完...

weixin_39571403的博客 1248

化工设备设计软件:PVELITE二次开发_(12).数据导入导出与兼容性

在数据导入之前,需要定义数据在PVELITE中的结构。可以通过编程接口定义字段名称和数据类型。# 导入必要的库 import pvelite # 创建PVELITE实例 pve = pvelite . PVELITE() # 定义CSV数据结构 csv_structure = {

kkchenjj的博客 1216

[毕设项目-MCP+ENSP]一句话搞定ENSP自动化:MCP + LLM实战(架构图、工具清单、踩坑全解)

用 MCP + LLM 把“人话”变成对华为 ENSP 的安全自动化操作,三款工具覆盖配置/查询/落盘,配套架构、实战与排坑清单。

逐梦苍穹的博客 2545

python批量读取tiff文件_python+gdal实现MODIS_HDF文件转TIF(可批量)

准备安装python以及gdal馨意:基于python的遥感图像处理(1.1)--Anaconda安装步骤​zhuanlan.zhihu.com正文本文以提取MODIS植被指数产品MOD13A3的NDVI数据为例:首先打开hdf数据集并查看子数据集和元数据:# gdal打开hdf数据集datasets = gdal.Open(r"E:\Remote_Sensing_Data\TVDI\MOD13...

weixin_39568706的博客 1698

【PointNet++】使用Open3D将ShapeNet数据集txt文件保存为ply

ShapeNet数据集的txt格式为xyzrgb+label,为了可视化点云,将txt文件保存为pcd或ply。

纵马踏花向自由 752

python读取hdf文件 高效_python 读hdf4文件,再转写成一个tif文件

1.安装pyhdf包(2)在dos命令行下切换到包所在的文件夹,并运行pip install 包名进行安装。2.读hdf4文件#导入包from pyhdf.SD import *from osgeo import osrimport numpy as np(1)#读取文件file="3B43.20100501.7.HDF"hdf=SD(file)#获取hdf文件的属性信息attr=hdf.attr...

weixin_39623271的博客 1283

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

python把hdf转为tif_[转载]在IDL下hdf(4)批量转tif,hdf(4)指modis m

以下文字转自李旭科学网博客,文件和代码请在原网址查看http://blog.sciencenet.cn/blog-1148346-841353.htmlMODIS数据通常是HDF-EOS(H4)文件,文件包含有多个数据集,如图1。已知MOD13A3.hdf,提取其中的NDVI数据集,并以GeoTiff格式存储。参考GDAL方法,但没有找到Python+GDAL代码实例,所以网上介绍的方法没有测试成...

weixin_35578381的博客 582

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

python 黑白tif提取边界像素坐标_python+gdal实现MODIS_HDF文件转TIF(可批量)

准备安装python以及gdal馨意:基于python的遥感图像处理(1.1)--Anaconda安装步骤​zhuanlan.zhihu.com正文本文以提取MODIS植被指数产品MOD13A3的NDVI数据为例:首先打开hdf数据集并查看子数据集和元数据:# gdal打开hdf数据集 datasets = gdal.Open(r"E:Remote_Sensing_DataTVDIMOD13A3...

weixin_39751871的博客 515

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

python把hdf转为tif_python 读hdf4文件,再转写成一个tif文件

1.安装pyhdf包(2)在dos命令行下切换到包所在的文件夹,并运行pip install 包名进行安装。2.读hdf4文件#导入包from pyhdf.SD import *from osgeo import osrimport numpy as np(1)#读取文件file="3B43.20100501.7.HDF"hdf=SD(file)#获取hdf文件的属性信息attr=hdf.attr...

weixin_39990660的博客 256

【python+GIS】读取多波段hdf影像并将其中的波段转为tif

【代码】【python+GIS】读取多波段hdf影像并将其中一个波段转为tif。

kkkyyyxxx的博客 1145

python把hdf转为tif_在IDL下hdf(4)批量转tif,hdf(4)指modis mod10、mod13...

以下文字转自李旭科学网博客,文件和代码请在原网址查看http://blog.sciencenet.cn/blog-1148346-841353.htmlMODIS数据通常是HDF-EOS(H4)文件,文件包含有多个数据集,如图1。已知MOD13A3.hdf,提取其中的NDVI数据集,并以GeoTiff格式存储。参考GDAL方法,但没有找到Python+GDAL代码实例,所以网上介绍的方法没有测试成...

weixin_39831104的博客 540

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

HDF 是用于存储和分发科学数据的一种自我描述、多对象文件格式。HDF 是由美国国家超级计算应用中心(NCSA)创建的,以满足不同群体的科学家在不同工程项目领域之需要。HDF 可以表示出科学数据存储和分布的许多必要条件。...

amyniez的博客,欢迎交流讨论 6427

python把hdf转为tif_命令行记录-python读取hdf图层,转成tif文件

主体内容来自 https://www.cnblogs.com/ninicwang/p/11535170.html1、安装pyhdf包2、读hdf4文件#导入包from pyhdf.SD import *from osgeo import osrimport numpy as np(1) #读取文件file='3B43.20100501.7.HDF'hdf=SD(file)#可查看hdf的函数&gt...

weixin_39626237的博客 627
上一篇: python ogr osr库引用失败
yes哥
博客等级 码龄10年 1粉丝 32原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值