1.登录NASA官网下载MOD13Q1数据,红框标出来的是筛选条件,我的筛选条件列出符合要求的文件如下:

NASA官网:https://ladsweb.modaps.eosdis.nasa.gov/

MODIS数据的介绍:https://www.cnblogs.com/cuteshongshong/articles/3622855.html

2.利用指定的MRT工具对MODIS数据进行批处理

MRT下载地址:链接:https://pan.baidu.com/s/1aqD4UAhPQAWq83zqsR3_2w 
提取码:uv43 
复制这段内容后打开百度网盘手机App,操作更方便哦

MRT安装见:https://blog.csdn.net/gisboygogogo/article/details/75784080

(1)数据准备

安装在 E:\r_MRT\bin目录下,运行E:\r_MRT\bin\Modistool.bat 进入MRT GUI界面,选择一副影像制作批量处理需要的*.prm文件。

影像中参数设置如图,需要注意的是,在设置输出影像时需要确定输出影像的格式如D:\ProfessionalProfile\MODISrelevant\pro\A2020161.tif , 最重要的是要点saveparameter file 保存A2020161.prm文件,保存后不需要run,直接退出MRT GUI即可。

将保存的A2000049.prm文件放到需要处理的MODIS *.hdf格式的影像数据的文件目录中,如D:\ProfessionalProfile\MODISrelevant\pro中。

我选择的是两景影像,MRT可以将其进行图像拼接、图像投影格式转换等多种操作。

上图中的各项参数都可以自己选择,包括输出类型、重采样类型、输出投影类型;输出的像素可写可不写,都是输出默认的。

有一个问题:每次选取某一个或者某几个波段处理的时候,总是会处理全部。(希望大神可以不吝赐教~)

(2)CMD命令实现对数据的批处理

运行cmd 命令,将工作目录设置到 E:\r_MRT\bin 中,即MRT安装目录中的 bin 文件夹中。

输入 java -jar MRTBatch.jar -d D:\ProfessionalProfile\MODISrelevant\pro -p D:\ProfessionalProfile\MODISrelevant\pro\A2020161.prm -o D:\ProfessionalProfile\MODISrelevant\pro 其中,-d 表示的是影像数据存储的目录,-p 表示经过MRT GUI处理的prm文件路径,-o 表示输出路径。这串命令表示的是对所有的影像数据批处理得到每个影像的拼接和重采样的 prm 文件。 运行成功并得到所有影像的 prm 文件后,继续在输入 MRTBatch.bat(进行批处理) 命令,执行这个bat文件,即进行影像的批处理。

在ENVI中打开,显示如下:

这是两景影像拼接在一起的,这样就和在NASA网站看到的“瓦片TILE”似的(下下图)呈现方式差不多,刚才处理的时候选择的投影方式是UTM-47,原始数据使用“sinusoidal 正弦曲线投影”。

3.Python计算NDVI

我们刚才处理的影像输出很多文件,有NDVI也是NIR和RED,正好可以对比一下Python计算的NDVI是否和MRT软件输出的有差异。

得到NIR和RED文件:

代码:


import numpy as np
from osgeo import gdal
import glob# 出错:SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 36-37: malformed \N character escape
# 出错原因:没有在目录位置之前加r
# glob函数参考:https://blog.csdn.net/wc781708249/article/details/78185839
list_tif = glob.glob(r'D:\ProfessionalProfile\MODISrelevant\NIRandRED\*.tif')
out_path = r'D:\ProfessionalProfile\MODISrelevant\file'for i in range(0,len(list_tif),2):NIR = gdal.Open(list_tif[i+1])RED = gdal.Open(list_tif[i])# (filepath, fullname) = os.path.split(NIR)# (prename, suffix) = os.path.splitext(fullname)red = NIR.ReadAsArray() * 0.0001nir = RED.ReadAsArray() * 0.0001# https://www.cnblogs.com/beile/p/10789333.htmltry:#   ndvi = (nir - red) / (nir + red+0.000000000001)加一个小的数能避免被0除的问题ndvi = (nir - red) / (nir + red)# ImportError: No module named XXX,捕获该类错误。except ZeroDivisionError:print('ZeroDivisionError has be found!')# 将NAN转化为0值nan_index = np.isnan(ndvi)ndvi[nan_index] = 0ndvi = ndvi.astype(np.float32)# 将计算好的NDVI保存为GeoTiff文件gtiff_driver = gdal.GetDriverByName('GTiff')# 批量处理需要注意文件名是变量,这里截取对应原始文件的不带后缀的文件名out_ds = gtiff_driver.Create(out_path + 'MOD13Q1A2020'+ str(i) + '.tif',ndvi.shape[1], ndvi.shape[0], 1, gdal.GDT_Float32)#  将NDVI数据坐标投影设置为原始坐标投影out_ds.SetProjection(NIR.GetProjection())out_ds.SetGeoTransform(NIR.GetGeoTransform())out_band = out_ds.GetRasterBand(1)out_band.WriteArray(ndvi)out_band.FlushCache()

运行结果:

下图是MRT处理的NDVI影像:

4.遇到的问题

(1)RuntimeWarning: divide by zero encountered in true_divide

将 ndvi = (nir - red) / (nir + red) 改为:ndvi = (nir - red) / (nir + red+0.000000001),加一个很小的数就能避免,但是这样容易造成误差。

(2)MOD13Q1.A2020241.250m_16_days_red_reflectance,第241天的NDVI图出不来。

单独读取试了一下,同样的代码,第一次运行就出来下图结果,第二次就还是无法写入ndvi值。搞不懂,有知道的大神,希望多指点。

5.参考

(1)https://blog.csdn.net/qq_43177210/article/details/107283776

(2)https://blog.csdn.net/XBR_2014/article/details/85041757?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.control&dist_request_id=&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.control

Python批处理MODIS数据并计算NDVI相关推荐

  1. 基于MOD09Q1数据批量计算NDVI

    基于MOD09Q1数据批量计算NDVI 通过MRT处理好b01和b02波段后,分别存储至两个不同的文件夹(b01和b02). 接下来打开在arcgis自带的python2.7中键入以下代码:(如果用p ...

  2. 【MODIS合集】MRT批处理MODIS数据

    [MODIS合集]MRT批处理MODIS数据 针对MODIS数据的处理,NASA提供了modis tool软件,方便我们对数据进行处理,包括数据格式的转换,坐标系转换.镶嵌以及重采样等. 单个文件的处 ...

  3. Python应用实战案例-Python使用MODIS数据实现温度植被干旱指数TVDI的计算

    1.数据下载 数据及代码参见温度植被干旱指数TVDI 采用的数据为MODIS植被指数产品MOD13A3.地表温度产品MOD11A2以及SRTM DEM产品. MODIS数据来源于美国航空航天局(Nat ...

  4. 基于python的MODIS数据质量控制------以MOD11A1为例

    MODIS质量控制文件,对MODIS产品进行提取 MODIS数据简介 我们拿到的MODIS数据,多数人认为只要有值的地方,就是准确数据,我们直接就可以拿来使用,只有空值的区域,数据才会异常(多数本科生 ...

  5. Python处理exal数据,计算年月日之间时间间隔

    问题 最近学习python处理exal数据,自己标注的十分详细,包括读取exalt文件,读取其中的某一行,定义新的list存放结果,将结果以exal 文件导出等:然后计算不同年月日之间的时间间隔,本文 ...

  6. python调用mysql数据进行计算_python使用peewee实现mysql数据操作

    peewee可用class来创建表,增删改查,应该是相对余单表(本人几乎没用过,自以为如此) 想实现sql查询,得到list,比如这样的结果[{'user_name':'名字'},{'user_nam ...

  7. python批处理工具_python调用HEG工具批量处理MODIS数据的方法及注意事项

    下面的代码主要用于使用python语言调用NASA官方的MODIS处理工具HEG进行投影坐标转换与重采样批量处理 主要参考 HEG的用户手册:https://newsroom.gsfc.nasa.go ...

  8. python modis数据拼接_python调用HEG工具批量处理MODIS数据的方法及注意事项

    下面的代码主要用于使用python语言调用NASA官方的MODIS处理工具HEG进行投影坐标转换与重采样批量处理 主要参考 HEG的用户手册:https://newsroom.gsfc.nasa.go ...

  9. python获取股票数据,并计算技术指标

    python获取stock数据. 计算技术指标使用talib库. 方法一:使用 pandas_datareader.data 库,该库获取的历史数据更多一些.上证股票在股票代码后面加上".S ...

  10. hdf heg 批量拼接_python调用HEG工具批量处理MODIS数据

    下面的代码主要用于使用python语言调用NASA官方的MODIS处理工具HEG进行投影坐标转换与重采样批量处理 主要参考 主要的注意事项如下: 根据HEG用户手册批量生成批处理参数文件,可以在HEG ...

最新文章

  1. Java高级工程师实战经验图谱
  2. 自制“低奢内”CSS3登入表单,包含JS验证,请别嫌弃哦。
  3. laravel 内部验证码
  4. 今日恐慌与贪婪指数为74 等级转为贪婪
  5. linux删除目录下文件的几种方法
  6. Java多线程之JUC包:CountDownLatch源码学习笔记
  7. Mybatis接口方式
  8. 搭建SpringMVC详解
  9. 盘点开发者喜欢用的浏览器,最后这一款值得拥有
  10. 人生就是一个领域,一份爱,一杯茶
  11. TeamViewer由商业用途改为个人用途
  12. 微信小程序---目录结构
  13. 华为数字化转型之道 结语 数字化转型的8个成功要素
  14. 云手机互联网点评系列-华为云手机云服务cloud+初评
  15. 纽约时报:雅虎财经远远超越 Google 财经
  16. 二分查找,返回第一次出现的位置
  17. 2022-2028年中国仓储管理系统行业市场深度分析及投资前景展望报告
  18. 层次分析法【AHP】
  19. 小米MiFlash报错error:FAILED(remote:updatesparsecrclistfailed)
  20. win7下QQ2011隐藏后,鼠标移桌面边缘 QQ滑出来后又自动收进去了解决方法

热门文章

  1. python适用于哪些芯片_这些鲜为人知的Python功能,你值得拥有!
  2. 计算机应用的核心能力,应用能力为核心的高职计算机应用分析
  3. html表单-在线留言,aspcms自定义表单 在线留言修改
  4. html5 textarea 限制字数,如何限制textarea的字符数为225?
  5. php选择版本,怎样选择PHP的版本
  6. java protected类_关于JAVA的protected类型
  7. pandas nat_利用pandas爬取研招网信息
  8. cedit多行文本设置透明背景会重叠_python:电商用户评价文本分析(wordcloud+jieba)...
  9. 重置mysql8.0.16的root密码
  10. Vue:Vue项目中引入第三方库报错Unexpected token ‘<‘