iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python如何实现批量读取HDF多波段栅格数据并绘制像元直方图
  • 241
分享到

Python如何实现批量读取HDF多波段栅格数据并绘制像元直方图

2023-07-05 07:07:07 241人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

本篇内容介绍了“python如何实现批量读取HDF多波段栅格数据并绘制像元直方图”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!首先将本文所需

本篇内容介绍了“python如何实现批量读取HDF多波段栅格数据并绘制像元直方图”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

首先将本文所需代码展示如下:

# -*- coding: utf-8 -*-"""Created on Tue Jul 20 11:05:31 2021@author: fkxxGIS"""import osimport numpy as npfrom osgeo import gdalimport matplotlib.pyplot as pltlai_file_path="G:/Postgraduate/LAI_Glass_RTlab/Test_DRT/h30v09.tif"mcd_file_path="G:/Postgraduate/LAI_Glass_RTlab/Test_DRT/MCD12Q1.A2018001.h30v09.006.2019199233851.hdf"pic_save_path="G:/Postgraduate/LAI_Glass_RTlab/Test_DRT/"for veg_type in range(9):    mcd_raster=gdal.Open(mcd_file_path)    mcd_sub_dataset=mcd_raster.GetSubDatasets()    hdf_band_num=len(mcd_sub_dataset)    # for sub_dataset in mcd_sub_dataset:    #     print(sub_dataset[1])    # print(mcd_sub_dataset[2][1])    mcd_sub_type=gdal.Open(mcd_sub_dataset[2][0])    mcd_raster_array=mcd_sub_type.ReadAsArray()        lai_raster=gdal.Open(lai_file_path)    lai_raster_array=lai_raster.ReadAsArray()    non_veg_type_lai_array=np.where(mcd_raster_array==veg_type+1,lai_raster_array,np.nan)    plt.hist(non_veg_type_lai_array)    plt.savefig(pic_save_path+"DRT_"+str(veg_type+1)+".png", dpi=300)    plt.clf()    plt.cla()

我们直接讲解多波段HDF栅格图像文件读取部分的代码:首先,多波段.hdf格式文件的读取在一开始与单波段.hdf格式文件或.tif格式文件的读取一致,即通过gdal.Open()函数实现;但随后,需要额外借助len()函数获取HDF文件对应的波段数量。

因为我们读取的HDF文件是多波段,因此hdf_band_num肯定是大于1的,那么刚刚读取进来的mcd_sub_dataset其实就是一个列表(List);其中,这个列表的元素个数就是对应的多波段HDF文件波段数,列表的每一个元素则都是一个元组(tuple);同时,每一个元组都有两个元素,其每一个元素都是一个字符串;其中第一个元素为当前HDF文件的当前波段对应的文件路径与部分提示信息,第二个元素作为当前HDF文件的当前波段对应的文件像素行列数、名称与数据类型。

这么说可能不太明白,我们用一个实例来讲解。例如,通过上述代码读取一景具有六个波段的MODIS LAI产品——MCD15A3H产品,其第一个波段为FPAR数据,第二个波段为LAI数据。那么读取其后,得到的mcd_sub_dataset长这个样子:

Python如何实现批量读取HDF多波段栅格数据并绘制像元直方图

可以看到,是一个具有6个元素的列表。

点开列表,可以看到6个元素每一个都是一个具有2个元素的元组:

Python如何实现批量读取HDF多波段栅格数据并绘制像元直方图

再点开第一个元组,可以看到其具有2个字符串格式的元素:

Python如何实现批量读取HDF多波段栅格数据并绘制像元直方图

其第二个元素包含了该波段对应的数据行数与列数(即[2400×2400])、数据名称(即Fpar)、数据空间分辨率(即500m)、数据产品简称(即MOD_Grid_MCD15A3H),以及数据格式(即8-bit unsigned integer);而第一个字符串没有显示完毕,我们可以点击打开看看:

Python如何实现批量读取HDF多波段栅格数据并绘制像元直方图

可以看到第一个元素则包含了该波段对应的数据路径、文件全称,以及部分与第二个元素重复的几个数据信息参数。

有了上面的分析就比较清楚了,接下来再一次利用gdal.Open()函数读取我们需要的波段,mcd_sub_dataset[2][0]表示第三个波段;其中,第三个波段却用[2]来表示,是因为波段数量(也就是mcd_sub_datasetIndex)是从0开始计算的;而后面的[0]则表示元组中的第一个参数,也就是上面一幅图中显示的该波段对应的数据路径。

随后,再利用.ReadAsArray()函数将其读取为Array即可。接下来的操作与本文开头提及的那两篇博客就一致,这里不再赘述~

Python如何实现批量读取HDF多波段栅格数据并绘制像元直方图”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: Python如何实现批量读取HDF多波段栅格数据并绘制像元直方图

本文链接: https://www.lsjlt.com/news/350449.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作