读取HDF或者NetCDF格式的栅格数据

作者:阿振

邮箱:tanzhenyugis@163.com

博客:https://blog.csdn.net/theonegis/article/details/80089375

修改时间:2018-05-25

声明:本文为博主原创文章,转载请注明原文出处


HDF和NetCDF简介

HDF

HDF(Hierarchical Data Format)由NCSA(National Center for Supercomputing Applications)设计提出,官方对其定义是:HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.

HDF supports n-dimensional datasets and each element in the dataset may itself be a complex object.

HDF是对HDF数据模型,数据格式以及HDF库API等一系列技术的总称. HDF的最新版本是HDF5.

HDF数据模型基于组(groups)和数据集(datasets)概念:如果把HDF数据比作磁盘,那么组相当于文件夹,数据集相当于文件。组和数据集都有用户自定义的属性(attributes).

MODIS影像,以及我国的风云卫星数据都适用HDF格式进行存储.

NetCDF

NetCDF(Network Common Data Format)由UCAR(University Corporation for Atmospheric Research)设计提出,其官方的定义是:NetCDF is a set of software libraries and self-describing, machine-independent data formats that support the creation, access, and sharing of array-oriented scientific data.

NetCDF是面向多维数组的数据集,一个NetCDF文件主要是Dimensions, Variables, Attributes, Data 四个部分组成的:

  • Dimension主要是对维度的定义说明,例如:经度,维度,时间等;
  • Variables是对数据表示的现象的说明,例如:温度,湿度,高程等;
  • Attributes是一些辅助的元信息说明,例如变量的单位等;
  • Data是主要对现象的观测数据集。

NetCDF有两个数据模型:经典模型(NetCDF3之前模型)和增强模型(NetCDF4)

NetCDF最新版本是NetCDF4,NetCDF4的API接口建立在HDF5之上,和HDF5是兼容的.

如果搞大气研究的同学一定对NetCDF格式不陌生,接触到的大部分数据都是这种格式.

HDF和NetCDF栅格数据集特点

HDF和NetCDF数据都可能包含数据子集(一个文件中包含多个子文件),我们需要找出需要的子集数据,然后就可以像普通的GeoTIFF影像那样进行读写和操作了.

GDAL读取实例

下面的例子读取MODIS地标反射率(Surface Reflectance)数据中的第一波段,然后转为GeoTIFF进行存储.

我们首先使用gdal.Open()函数读取HDF数据,然后使用GetSubDatasets()方法取出HDF数据中存储的子数据集信息,该方法返回的结果是一个listlist的每个元素是一个tuple,每个tuple中包含了对子数据集的表述信息.

对于MODIS数据,tuple的第一个元素是子数据集的完整路径,所以我们取出该路径,然后使用gdal.Open()函数读取该子数据集.

最后我们使用CreateCopy()方法将该子数据集存储为GeoTIFF格式的数据。

所以,总结一下,我们读取HDF或者NetCDF数据子集的时候,最主要的是取出想要处理的子数据集的完整路径。然后就像读取普通GeoTIFF影像那样对子数据集进行读取就OK了.

from osgeo import gdalroot_ds = gdal.Open('example.hdf')
# 返回结果是一个list,list中的每个元素是一个tuple,每个tuple中包含了对数据集的路径,元数据等的描述信息
# tuple中的第一个元素描述的是数据子集的全路径
ds_list = root_ds.GetSubDatasets()band_1 = gdal.Open(ds_list[11][0])  # 取出第12个数据子集(MODIS反射率产品的第一个波段)
arr_bnd1 = band_1.ReadAsArray()  # 将数据集中的数据转为ndarray# 创建输出数据集,转为GeoTIFF进行写入
out_file = 'sr_band1.tif'
driver = gdal.GetDriverByName('GTiff')
out_ds = driver.CreateCopy(out_file, band_1)
out_ds.GetRasterBand(1).WriteArray(arr_bnd1)
out_ds.FlushCache()# 关闭数据集
out_ds = None
root_ds = None

读取HDF或者NetCDF格式的栅格数据相关推荐

  1. matlab读取hdf和hdf5格式文件

    读取hdf文件 data = h5read('文件名.hdf', '数据集名'); 注意,有些版本是 data = hdfread('文件名.hdf', '数据集名'); 结果都是一样的,可能是版本的 ...

  2. MATLAB读取HDF格式的SST数据

    利用MATLAB读取HDF格式的SST数据是比较简单的,MATLAB中有专门用于读取HDF的函数hdfread()与hdfinfo()就能很好的读取HDF文件.我们可以在读取文件的时候,通过显示文件中 ...

  3. Matlab之netCDF格式文件读取方法

    Matlab之netCDF格式文件读取方法 目录 一.netCDF格式文件 1.简介 2.NetCDF的数据结构 二.Matlab读取netCDF使用到的函数 1.ncdisp() 2.ncinfo( ...

  4. arcgis风向_ArcGIS10.2读取NetCDF格式的气象数据含风向

    ArcGIS读取NetCDF格式的气象数据 尝试使用Make netCDF File的Tool 参数设置: 变量:PM2_5DRY X维度:XLONG Y维度:XLAT Dimension:南北+东西 ...

  5. 后缀为.adf 文件读取,转化为tiff(shp)格式,并输出netcdf格式的数据

    .adf文件读取,转化为shp或者tif格式,并输出Netcdf格式的数据文件 使用工具为arcgis,本人安装的是arcgis10.8,安装包可自行下载,或者私信我. 以海报高度地形数据的读取为例 ...

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

    目录 1.Python3读取hdf文件 2.使用Python2读取hdf文件 3. 如何使Python2和3兼容 3.1 修改Python2.7的名字 3.2 pip更新 3.2 使用pip2下载py ...

  7. python 创建netcdf_python读取与处理netcdf数据方式

    netcdf是气候数据中的主流格式,当涉及到大范围的全球数万个格网点数据时,使用python脚本可以较快地读取与处理. import netCDF4 from netCDF4 import Datas ...

  8. python处理netcdf_使用Python处理NetCDF格式文件

    NetCDF(Network Common Data Form)是一种科学二进制数据格式,由UCAR负责开发和维护netCDF软件,主要用于存储多维科学数据.在地球科学领域使用较为广泛,大多数数值模式 ...

  9. python读取hdf文件 高效_Python解析HDF文件

    前段时间因为一个业务的需求需要解析一个HDF格式的文件.在这之前也不知道到底什么是HDF文件.百度百科的解释如下: HDF是用于存储和分发科学数据的一种自我描述.多对象文件格式.HDF是由美国国家超级 ...

  10. 【Python学习】——读取HDF数据

    Hierarchical Data Format (HDF)--分层数据格式,通常包含多维数据,许多水文气象相关的数 据格式都是HDF.本文旨在利用python语言实现数据的快速读取,数据来自GLAS ...

最新文章

  1. archlinux cn源
  2. 升降压斩波电路matlab,升降压斩波电路matlab仿真.doc
  3. Sqlite表的结构修改
  4. Spring 梳理 - ContentNegotiatingViewResolver
  5. mysql+xml+注释,springboot整合mybatis完整示例, mapper注解方式和xml配置文件方式实现(我们要优雅地编程)...
  6. Spark 分析网站排名热度
  7. java webservice用户验证_使用java webservice的.net4.0 web app需要Usernametoken身份验证
  8. VUE:解决 [Vue warn]: Error in render: “TypeError: item.slice is not a function“ (取部分数据)
  9. 第2次预习课-0704
  10. php商品评价代码,php商品对比功能代码分享
  11. [Java] lomboz开发插件 (对于J2EE)
  12. handsontable+vue+ 自定义多选
  13. vue-cli项目代理proxyTable配置exclude的方法
  14. web前端开发主要做什么?应该学些什么?
  15. c语言直线插补原理程序,直线插补算法
  16. powerdesigner设置 name to comment
  17. Ubuntu 16.04 LTS 初体验 (转载)
  18. android 自动设置时区,Android Things入门-设置本地时区
  19. ERP生产管理系统,如何解决机械制造企业生产管理难题?
  20. 【Golang】欲入此Go先看Go的基本语法

热门文章

  1. 360度评估前HR必须掌握的优劣势
  2. 一、计算机网络的作用和认识互联网
  3. 利用Cytoscape进行生物相互作用网络可视化及拓扑分析
  4. 微信里iphone后退不刷新问题解决方案,真实有效
  5. abandon_mysql_【linux】使用Druid报错abandon connection, open stackTrace
  6. mysql lang_dlang操作mysql
  7. 论坛看到的很有感触的问答
  8. 【记录】数字逻辑知识点总结
  9. 量子计算 17 量子算法2 (量子Simon算法)
  10. 定位技术--蜂窝基站