简介:这是一份面向遥感学习者与GIS初学者的MODIS数据入门指南,系统梳理了中分辨率成像光谱仪(MODIS)的卫星背景、技术指标与应用领域,并给出从NASA官网获取数据、以HDF格式保存到ENVI/ArcGIS等软件处理的完整路径,帮助读者从零建立对MODIS数据获取与基本加工流程的整体认知。资源共1个doc文档,压缩包约503KB,当前已有304人浏览学习。文档围绕Terra与Aqua双星协同观测机制展开,详细说明36个波段的光谱范围与主要应用目标、250m至1000m的多级空间分辨率,并覆盖数据预处理、校正、合成与分析等关键环节,还列举了农业、林业、水资源管理等典型应用场景,适合高校学生、科研助理及环境监测从业者快速掌握MODIS数据下载与基础处理方法。
1. MODIS 数据为什么值得下载:免费、连续、36 个波段的地表观测源
MODIS 数据大概是遥感圈子里最不愁数据源的免费数据之一。从 2000 年正式发布算起,搭载在 Terra 和 Aqua 两颗太阳同步极轨卫星上的中分辨率成像光谱仪,每 1 到 2 天就把整个地球表面完整扫一遍,36 个波段从可见光一路覆盖到热红外,250 米、500 米、1000 米三档空间分辨率对应不同的地表过程。做长时序土地覆被、植被指数、地表温度、火点与雪盖监测的从业者,大概率都绕不开它。这篇文章把下载流程、产品命名、分级体系、HDF 格式和 MRT 投影处理参数完整拆一遍,重点放在容易翻车的环节上,照着走基本能顺利拿到并处理出一份能直接用的数据。
2. 认识 MODIS 产品家族:命名规则、分级体系与产品选型
2.1 一个文件名读懂一切:MOD/MYD/MCD 与时间编码
第一次接触 MODIS HDF 文件的人,很容易被一长串文件名劝退。拿文档里的例子来看:
MOD01.A2002032.1015.003.2002034184356.hdf这串字符按规则拆开是这么几段:
| 字段 | 示例 | 含义 |
|---|---|---|
| aaaaa | MOD01 | 产品短名,MOD 表示 Terra 星,MYD 表示 Aqua 星,MCD 表示双星合成 |
| bbbb | A2002032 | A 代表采集时间,2002 是年份,032 是积日(Day of Year),即 2 月 1 日 |
| ccc | 1015 | 卫星过境时刻,UTC 时间的时和分,这里是 10:15 |
| eee | 003 | Collection 版本号,也就是算法版本,不同版本之间数值不可直接混用 |
| fffffffffffff | 2002034184356 | 生产日期和时间,2002 年第 034 天 18:43:56 |
| ggg | hdf | 文件格式,MODIS 标准产品都是 HDF4-EOS 格式 |
这套命名规则我建议直接背下来。原因很实在:你在做时间序列分析时,经常要从几百个文件名里批量提取日期和版本信息,如果命名规则不熟,写脚本时第一个坑就是日期字段取错位置。文档里单独强调过,Terra 星产品缩写 MOD,Aqua 星产品缩写 MYD,联合产品缩写 MCD,这个前缀决定了你下载的是上午星还是下午星的观测,后续做日尺度合成分析时,两颗星的数据一般不建议直接混在一个时间序列里用,除非做的是 MCD 开头的合成品。
还有一个容易看漏的地方:文件名里的时间是 UTC,不是东八区时间。2002032 这个积日对应的是 UTC 日期,如果你在国内做研究,要把本地时间先换算成 UTC 再对文件名,否则你很可能以为某天数据缺失,其实是日期窗口选错了。
2.2 从 0 级到 4 级:数据产品的分级逻辑
MODIS 标准数据产品分了 0 到 4 共五级,这个分级不是行政划分,而是数据处理深度的递进:
- 0 级数据:卫星地面站直接收到的原始数据流,没做过任何处理,包含全部探测信息,一般不直接面向普通用户。
- 1 级数据:对 0 级数据做时间配准、辅助数据注解和重建,也就是 L1A 数据;L1B 则是经过辐射校正后的标准数据产品。
- 2 级数据:在 1B 基础上衍生的、与 L1B 具有相同空间分辨率和覆盖区域的产品,比如 MOD09 表面反射率。
- 3 级数据:把 2 级数据投影到统一的时间-空间栅格上,形成完整性和一致性更好的产品,适合做时间序列和区域分析。
- 4 级数据:通过分析模型对 3 级及以下数据进行综合模拟得到的成果,比如 MOD17 的 GPP/NPP。
分级的意义在选型。如果你是做单景影像目视解译,1B 数据配合真彩色合成就够了;但如果你做的是区域植被长时序变化,直接选 3 级合成产品,省去自己处理云掩膜和大气校正的功夫。文档里点得很清楚,2 级和 3 级产品的差别不只是处理深度,还涉及时间粒度,比如 MOD11 地表温度,每日数据是 2 级,每旬、每月合成数据是 3 级。时间粒度和空间分辨率这两个参数直接决定你能不能回答自己的研究问题。
2.3 常用的陆地产品怎么选:分辨率、时间粒度与用途对照
MODIS 标准产品从 MOD01 到 MOD44 一共四十多种,按大气、陆地、海洋三大类划分。日常做陆地遥感用得最多的是下面这几个:
| 产品短名 | 内容 | 空间分辨率 | 时间粒度 | 典型用途 |
|---|---|---|---|---|
| MOD09 | 表面反射率 | 250 m / 500 m | 每日 | 地表反射率重建、水体识别 |
| MOD11 | 地表温度与发射率 | 1000 m | 每日 / 8 天 / 月 | 热岛效应、干旱监测 |
| MOD12 | 土地覆盖类型 | 500 m / 1000 m | 年度 | 土地利用变化、生态评估 |
| MOD13 | NDVI / EVI 植被指数 | 250 m | 16 天 | 植被长势、物候提取 |
| MOD15 | 叶面积指数 LAI | 1000 m | 8 天 | 光合作用模型、碳循环 |
| MOD17 | GPP / NPP 植被生产力 | 500 m / 1000 m | 8 天 / 年度 | 碳汇估算、生态系统模型 |
选产品时我一般先问三个问题:研究区范围多大,需要的空间细节到什么程度,时间上要做日尺度还是季节尺度。250 米分辨率的 MOD13 适合省级以下区域的植被监测,但到了全国尺度,数据量会非常可观,这时候反而建议直接选 1 公里或 5.6 公里的 CMG 栅格产品。文档里特别提过 MCD12Q1 这类产品,MCD 前缀意味着它融合了 Terra 和 Aqua 两颗星的数据,时间覆盖更完整。
还有一个被忽略的产品是 MOD03,地理定位文件。做 MOD021KM 这类 1B 数据的几何纠正时必须搭配它,文档里用了加粗级别的语气提醒别忘记下载,实际操作中我见过不止一次因为漏了 MOD03 导致批量处理中断的情况,后面下载章节会专门展开。
3. 从 LAADS 到本地:MODIS 数据下载完整流程
3.1 下载前的三件事:产品短名、日期窗口、空间范围
下载 MODIS 数据看起来是网页操作,实际上真正的功夫在下载之前。我见过不少新手直接打开检索页面,选了半天发现结果要么为空、要么数据量爆炸,根源就是没把三个参数想清楚。
第一件是确认产品短名。你要下载的是 MOD13Q1、MOD11A2 还是 MOD021KM,这决定了后续所有检索条件。产品短名里的后缀也有讲究,Q1 代表 250 米分辨率,A2 代表 1000 米分辨率,A1 代表 500 米分辨率,这个约定在陆地产品里基本通用。
第二件是确认时间窗口。MODIS 产品的时间检索用的是 UTC 时间,如果你要的是某个东八区日期的数据,必须做换算。文档里给出的规则是:
UTC 时间 = 东八区时间 - 8 小时举个例子,要获取东八区 1 月 16 日全天的数据,检索范围应该是 1 月 15 日 16:00:00 到 1 月 16 日 16:00:00。这个换算看似简单,实际经常出错,尤其是跨月、跨年的时候,比如 1 月 1 日的数据要回推到前一年 12 月 31 日 16:00,年份一变,积日和年份字段都要同步调整。
第三件是确认空间范围。在 LAADS 的 spatial selection 里选择 latitude/longitude 模式,按经纬度框选研究区。注意这里用的是经纬度坐标,不是投影坐标,别把公里数当经纬度填进去。
3.2 经纬度检索与时间窗口换算:一个能直接用的脚本
时间窗口换算这件事,与其每次手动算,不如写个小函数一次解决。下面这段 Python 代码我从项目里摘出来的核心部分,能完成积日转日期和东八区转 UTC 两件事:
from datetime import datetime, timedelta def doy_to_date(year: int, doy: int) -> datetime: """把年份+积日转换为日期,MODIS 文件名里的 bbb 字段用""" return datetime(year, 1, 1) + timedelta(days=doy - 1) def local_to_utc(dt: datetime, offset_hours: int = 8) -> datetime: """东八区时间转 UTC,检索 LAADS 时间窗口前先跑这个函数""" return dt - timedelta(hours=offset_hours) # 示例:2002 年第 32 天对应 2002-02-01 print(doy_to_date(2002, 32)) # 示例:东八区 1 月 16 日 00:00 对应 UTC 1 月 15 日 16:00 print(local_to_utc(datetime(2003, 1, 16, 0, 0)))这段代码里 doy_to_date 解决的是文件名字段解读问题,local_to_utc 解决的是检索窗口换算问题。offset_hours 默认按东八区 8 小时算,如果你处理的是其他时区的项目,改这个参数就行。跨年检索时,我习惯把起止时间都先转成 UTC datetime 再格式化,避免手写字符串出错。
3.3 下单与订单状态:从购物车到 FTP 下载
检索到目标文件后,勾选需要的影像,点击 order 按钮,填入接收数据的邮箱,系统会生成一个订单。LAADS 支持把多次搜索结果放进购物车,这对下载多天数据很管用,不用反复检索。
订单提交后在 Data 菜单下的 Track Orders 页面查看状态,state 字段显示 available 时才能开始下载。这里有个经验,数据刚处理完生成链接可能需要几十分钟到几小时,尤其是大批量订单,不必频繁刷新。状态变为 available 后,官方会提供 FTP 下载方式,主机是 ladsweb.nascom.nasa.gov,用户名 anonymous,密码填你申请数据时用的邮箱。用支持 FTP 的客户端连接后,在远端目录里找到自己的订单文件夹,拖到本地即可。
我习惯在下载完成后做一步完整性检查,每个文件大小非零、能正常被 HDF 读取工具打开,再删掉临时下载列表。这一步能避免后面处理到一半发现文件损坏,回头重新下载的尴尬。
3.4 别漏掉 MOD03:几何纠正的必需品
前面提过 MOD03 是地理定位文件,文档里在 1B 数据下载部分特意强调:MOD03 数据是用于对 1KM、QKM、HKM 数据进行几何纠正所用的,别忘记下载。
这里展开说一下原因。MODIS 1B 数据(MOD021KM、MOD02QKM、MOD02HKM)最初是 L1A 数据经过辐射校正得到的,但影像本身没有做几何校正,像素和地理坐标之间没有直接的对应关系。MOD03 记录的是每个扫描行对应的经纬度和卫星观测几何信息,做几何精纠正时必须用它作为辅助数据。
下载时最容易犯的错是只勾选影像文件而漏了同时间的 MOD03。你搜索某天的数据,结果列表里通常会有多个文件,其中 MOD021KM 是影像,MOD03 是定位文件,两个都要下。后续用 MODIS Swath Tool 做纠正时,软件会同时读取这两个文件,少了哪一个都会报错中断。而且 MOD03 的文件名里同样包含日期和时间信息,要与影像文件严格匹配,不同日期的 MOD03 不能混用。
4. 数据处理的四个环节:HDF 解读、几何纠正、重投影与拼接
4.1 HDF 文件结构:为什么不能直接扔进 ArcGIS 或 ENVI
MODIS 产品统一采用 HDF 格式,早期产品基本是 HDF4-EOS,后期部分产品转向了 HDF5。这里先说一个必须记住的结论:HDF4 和 HDF5 是两种完全不同的格式,互不兼容,拿 HDF5 的工具读 HDF4 文件大概率会报错。
HDF 的层次数据结构里,一个文件相当于一个容器,里面可以有栅格图像、科学数据集(SDS)、属性数据、Vgroup 等多种对象。MODIS 产品的每个波段通常对应一个 SDS 数据集,比如 MOD09 的表面反射率产品里,除了各波段反射率外,还附带观测几何、云掩膜、质量标记等辅助 SDS。你在 ENVI 里打开一个 MODIS HDF 文件时看到的多个图层,本质上就是这些 SDS 数据集。
处理前建议先用专用工具看一眼数据集的完整列表。文档里提到可以用 MODIS Explorer 或 HDF Explorer 查看 HDF 文件的元数据和信息,这个步骤相当于打开黑匣子确认里面装了什么。跳过这一步直接处理,很可能把反射率波段和质量波段搞混,后面的分析全错。
4.2 用 MODIS Swath Tool 做几何精纠正
MODIS 1B 数据属于扫描条带数据,像素排列是扫描线结构,不做几何纠正直接投影,影像会呈现明显的“鱼骨”变形。处理这类数据的常见做法是用 NASA 提供的 MODIS Swath Tool,它读入 MOD021KM 和 MOD03,利用 MOD03 里的地理定位信息把每个扫描像素映射到地理坐标上。
流程上,打开 Swath Tool 后加载影像文件和对应的 MOD03 文件,设定输出投影参数和空间分辨率,导出为 GeoTIFF 或直接写成 ENVI 格式。处理速度很快,比直接在 ENVI 里做 Georeference 更省心,文档里的原话是“处理速度快且使用简单方便”。这条我认同,Swath Tool 对内存占用控制得不错,一条轨道的数据几分钟内能跑完。
顺带提一句,Swath Tool 也支持对同一轨道内的相邻条带做拼接,如果你下载的是一条轨道拆成几段的文件,可以先在这里拼起来再输出,省得后面在 MRT 里处理条带边界。
4.3 MRT 重投影参数:Albers 等积投影的设置
MODIS 标准产品的官方投影是正弦投影,分幅方式是 10° x 10° 的瓦片网格,赤道处格网从左上角 (0,0) 到右下角 (35,17)。研究区跨多个瓦片时,需要先用 MRT(MODIS Reprojection Tool)把瓦片拼接并重投影到目标坐标系。
国内做中低尺度遥感制图,最常用的投影是 Albers 等积双标准纬线割圆锥投影。MRT 里面对应的参数设置如下:
| 参数缩写 | 含义 | 全国常用值 | 某西北省份示例 |
|---|---|---|---|
| SMajor | 椭球长半轴 | 0(表示采用 WGS84 默认值) | 0 |
| SMinor | 椭球短半轴 | 0(表示采用 WGS84 默认值) | 0 |
| STDPR1 | 第一标准纬线 | 25.0 | 34.0 |
| STDPR2 | 第二标准纬线 | 47.0 | 41.0 |
| CenMer | 中央经线 | 105.0 | 101.0 |
| OriginLat | 投影原点纬度 | 0.0 | 0.0 |
MRT 会把文件名自动追加到输出文件名后面,实际输出的 GeoTIFF 名称会变成类似 output_MOD13Q1.A2020001.250m_NDVI.tif 的样子。处理多幅影像时,MRT 会先按原正弦投影拼接,再做投影转换,这个顺序是固定的,不需要你在界面里额外设置。
SMajor 和 SMinor 都填 0 时,MRT 会按 WGS84 椭球参数运行,长半轴 6378137 米,短半轴 6356752.314245 米。如果你不确定研究区适合什么椭球,直接用 WGS84 一般不会出大问题。
4.4 重采样方式:Bilinear 为什么是首选
MRT 里重采样方式有最近邻、双线性、三次卷积几种选项,文档明确推荐选 Bilinear。原因在于,MODIS 产品尤其是植被指数和地表温度产品,栅格值本身代表的是连续地表参数,双线性插值能保留空间渐变特征,不像最近邻那样产生明显的锯齿边界。
但这里有一个例外需要注意:如果处理的是土地覆盖类型这类类别型产品,比如 MOD12Q1,重采样应该选最近邻,因为双线性插值会在类别边界上插出并不存在的过渡类别。我的习惯是普通参数产品一律 Bilinear,分类产品一律 Nearest Neighbor,并且每次处理前先看一眼产品属性,别默认套用上次的参数文件。
5. MRT 实操避坑:五个高频问题与排查记录
5.1 现象:拼接后的影像出现明显接缝或重叠错位
原因:同一时间段多幅影像输入 MRT 时,相邻瓦片的采集日期可能不同,尤其是云覆盖导致某天某块瓦片缺失,补下载了前后日期的数据来凑数。不同日期的数据在光照条件和大气状态下存在差异,拼接后边界自然突兀。
解决:优先选择同一时间段内多幅影像导入 MRT,用文档里的原话是“将同一时间段内获取的多幅影像导入 MRT,MRT 进行投影后,会自动拼接”。如果确实需要补日期,先将缺失区域的影像做直方图匹配再进行拼接。另外,检查所有输入文件的 Collection 版本是否一致,混合版本的数据拼接后数值系统可能不一致,这个坑比较隐蔽。
5.2 现象:投影后的影像被拉伸变形,经纬度对不上
原因:Albers 投影的两条标准纬线设置与目标区域不匹配。Albers 是等积圆锥投影,标准纬线决定了投影面与球面的切割位置,设置偏离目标区越远,变形越大。全国用 25 度和 47 度没问题,但研究区如果只在华南,这个组合就会产生明显东西向拉伸。
解决:先判断研究区的地理轮廓,再调整 STDPR1 和 STDPR2。文档给的例子是西北某省份采用 34 度和 41 度两条标准纬线、中央经线 101 度。我现在的习惯是,每个项目首次做投影前先查一下行政区中心经纬度,把中央经线设为研究区中心,两条标准纬线设为研究区南北边界内缩 1 到 2 度,效果比直接套全国参数好得多。这块参数不熟的话,真的需要翻一下 MRT 技术手册,文档备注里也强调了这一点。
5.3 现象:MRT 输出文件名自动带了一长串波段名
原因:这不是报错,是 MRT 的默认行为。文档明确写了“文件命名后,MRT 会自动将波段名称添加至客户命名后面”,如果不做波段选择,输出文件会按全部波段逐一追加名称,文件名变得特别长。
解决:在 MRT 界面的波段选择列表里,按需要勾选目标波段再执行处理。比如只想取 NDVI 波段,就没有必要把全部波段都输出,既能控制文件命名,也能显著减少输出文件体积和后续读取压力。
5.4 现象:运行时报错,提示椭球参数不合法
原因:SMajor 和 SMinor 两个参数一个填了数值、一个留了 0,MRT 判断椭球参数不一致而中断。真实项目中,手动编辑参数文件时很容易漏改其中一个。
解决:要么都填明确的长短半轴值,要么都填 0 交给 MRT 使用 WGS84 默认值。编辑参数文件后,先检查这两行,再检查 STDPR1、STDPR2、CenMer 是否为有效数值。这个检查动作十几秒,能省一次重跑时间。
5.5 现象:在 LAADS 检索不到任何数据,或下载的数据文件打不开
原因:时间窗口换算错误是检索为空的最常见原因,其次是空间范围设置与目标数据产品的覆盖范围不匹配。文件打不开则多为下载不完整,FTP 中途断线导致 HDF 文件结构损坏。
解决:先用 3.2 节的脚本把东八区时间转成 UTC,再核对检索窗口。文件下载完成后,检查文件大小与订单页面显示的一致,再用 HDF Explorer 打开确认 SDS 数据集列表完整。我有一个习惯,批量下载完成后用脚本扫描一遍所有文件的文件头,能打开的文件头会正常返回数据集名称,损坏文件会直接报错,这样能在处理前就把坏文件筛出来。
6. 一条能直接照抄的处理链路:从下单到出图的验证清单
前面几章把下载、纠正、投影、拼接的每个环节都拆开了,最后一章把这套流程串成一条完整链路,你可以直接对照检查自己的每一步。
第一步,确定产品短名和 Collection 版本。下载前确认你要的是 MOD13Q1 还是 MOD11A2,Collection 版本是 003 还是 005 或更新版本,不同版本数值不可直接混用。第二步,用 Python 脚本把研究时段从东八区转成 UTC,生成检索窗口。第三步,按经纬度框选研究区,在 LAADS 里检索,勾选目标文件,同时检查是否包含对应的 MOD03 文件,一并下单。第四步,等订单状态变为 available,用 FTP 客户端下载,下载后逐文件检查大小与完整性。
第五步,如果是 1B 数据,先用 MODIS Swath Tool 加载影像和 MOD03 做几何精纠正,输出为 GeoTIFF。如果是 tile 型产品,跳转到 MRT。第六步,在 MRT 里导入多幅瓦片,先确认投影参数:SMajor 和 SMinor 都填 0,或者都填显式椭球参数,STDPR1、STDPR2、CenMer 按研究区调整,重采样选 Bilinear,分类产品改为 Nearest Neighbor。第七步,执行拼接与重投影,输出后打开成果图,检查边界是否对齐、经纬度是否正确、数值范围是否符合产品预期。第八步,对照源文件删掉临时文件,保留参数文件备份。
这套验证清单看起来繁琐,但它是我踩过多次坑之后沉淀下来的固定动作。早先做某区域植被指数时序分析时,就是因为参数文件里 STDPR1 填错,整批 60 多景影像全部重投影变形,白跑了一下午。从那以后,我每次批量处理前都强制走一遍这个清单,尤其是投影参数和 MOD03 配对这两项,宁可多花十分钟确认,也不愿意回头重跑。希望这份拆解能帮你在 MODIS 数据这条路上少走几步弯路,顺利拿到并处理出可信的结果。
这份文档里还整理了完整的下载地址、44 种标准产品清单和 MRT 技术参数说明,处理时随手翻一翻,比临时上网找零散资料省事得多。
本文还有配套的精品资源,点击获取