• python 读hdf4文件,再转写成一个tif文件


    1.安装pyhdf包

    (1)通过此链接查找并下载pyhdf包:https://www.lfd.uci.edu/~gohlke/pythonlibs/#pygame(根据自己的系统及python版本选择对应的pyhdf包)

    (2)在dos命令行下切换到包所在的文件夹,并运行pip install 包名进行安装。

    2.读hdf4文件

    #导入包

    from pyhdf.SD import *

    from osgeo import osr

    import numpy as np

    (1)#读取文件

    file="3B43.20100501.7.HDF"

    hdf=SD(file)

    #获取hdf文件的属性信息

    attr=hdf.attributes()

    #获取hdf文件的图层以及每个图层所对应的行与列等信息,datasets是一个字典

    datasets=hdf.datasets()

    #读某一图层(我这里的图层是降雨图层),图层名可通过datasets看到。并获取图层数据

    rainfall_array=hdf.select("precipitation").get()

    #图层的旋转与转置(这里我要做旋转转置是由于我的图层需求,可通过查看自己的图层是否需要做这一步)

    #对矩阵进行左右翻转

    data=np.fliplr(rainfall_array)

    #对矩阵进行转置

    data=np.transpose(data)

    #从图层中读取到的数据是5月份逐小时数据,我们这里转换成逐月数据

    data=data*24*31

    #将数据转换成两个字节的整型数据

    d=data.astype(np.uint16)

    (2)转tif文件

    #创建一个空的投影对象,实例化

    ref=osr.SpatialReference()

    #定义投影(导入投影参数)

    #设置坐标系统为wgs84

    ref.ImportFromEPSG(4326)

    #查看参考系信息

    s=ref.ExportToWkt()

    #与上一篇讲的gdal写tif文件相似,这里不做过多描述(我这里的Create参数主要来自上面读取的图层信息)

    driver = gdal.GetDriverByName("GTiff")

    dataset = driver.Create("prec_self.tif", 1440, 400, 1, gdal.GDT_UInt16)

    #这里的仿射变换参数主要是从上面的图层中读取到的。可自行查看自己所获取的图层

     im_geotrans=(-180,0.25,0.0,50,0.0,-0.25)

    dataset.SetGeoTransform(im_geotrans)

    dataset.SetProjection(s)

    dataset.GetRasterBand(1).WriteArray(d)

    del dataset

  • 相关阅读:
    java 泛型
    数据结构与算法分析java——线性表1
    常见链表题
    网络面试题集锦
    java 网络流 TCP/UDP
    java文件
    java IO流——字节流
    java IO流——字符流
    java集合框架——工具类
    java集合框架——Map
  • 原文地址:https://www.cnblogs.com/ninicwang/p/11535170.html
Copyright © 2020-2023  润新知