乐于分享
好东西不私藏

USGS官网批量下载Landsat 8/9 多光谱数据(方法2)

USGS官网批量下载Landsat 8/9 多光谱数据(方法2)

在海量遥感数据处理的日常中,传统的网页端点击下载不仅繁琐,而且容易因网络波动前功尽弃。为了实现真正的无人值守高效下载,USGS/EROS 官方提供了机器对机器 (M2M) 应用程序编程接口 (API)。M2M API 提供了与 EarthExplorer (EE) 完全相同的功能,不仅支持跨数据集的元数据检索,还能直接获取适用于脚本(如 wget、cURL 等)的数据下载链接 。该接口采用 RESTful JSON 规范,标准化访问多个独特的数据集 

PART 01

准备工作:申请M2M令牌与数据权限
1.1申请账号登录令牌
在USGS 官网的数据下载主页中,点击【User settings  】,进入“Profile Overview”,如下所示: 
点击【Go to Profile】,进入账号管理页面,如下所示:
点击【Create Application Token】,申请账号登录token
只需要输入token name和勾选M2M API即可,过期年份不用管(可以是永不过期)。

注意:点击【Create Application Token】后,会有一串随机字母+数字,要记录下来,只要关闭页面后就永远不会再显示,这样你只能删掉这个token重新创建。

1.2申请API的数据访问权限

申请了账户token后,只能在(M2M)应用程序编程接口系统中登录,无法访问landsat系列数据集,还需要申请这个数据集权限,申请后大概需要10个小时左右能通过。(请注意,教育邮箱是在垃圾邮件里找到这个通过说明)。

申请步骤如下:

在账号页面点击Access Request】,然后点击【Request Access】。

在弹出的页面中下拉选择(M2M)应用程序编程接口API,由于已经申请过一次,无法再次申请,没有相关的页面截图。之后填写使用用途和数据集等内容,本人填写的数据集是Landsat,产品范围是Landsat Collection 2 Level-2  Landsat Collection 2 Level-1,其他的用途随便填写即可,具体可以参考如下所示的https://earthexplorer.usgs.gov/中的数据集名称。等收到同意邮件即可,不需要后续操作。

PART 02

Python 脚本批量自动化下载
提示 :无需开启网络加速器(科学上网)

该脚本一共包含有四个py文件,

其中:

  • download_scenes.py:为下载程序的主函数。

  • downloader.py:作为下载核心模块,实现文件下载任务,包括多线程或异步下载,支持断点续传、进度显示和下载重试,可能处理本地存储路径、文件命名和格式问题。

  • api.py:为实现M2M的封装与远程 API交互模块,提供统一的请求方法(GETPOST 等),管理认证、会话和错误处理,返回结构化的数据供其他模块使用。

  • filters.py:提供场景数据过滤工具。

2.1 主要参数说明

参数

类型

描述

示例

datasetName

字符串

USGS 数据集名称。要查询可用的数据集,请参考前文。

“landsat_ot_c2_l1”

startDate

ISO 8601 格式日期

数据采集开始日期,默认值为   “2000-01-01”

“2020-08-01”

endDate

ISO 8601 格式日期

数据采集结束日期,默认值为当前时间。

“2020-08-31”

maxResults

整数

返回的最大场景数量,默认值为 100

10000

boundingBox

长度为 4 的元组

空间边界框,格式为 (min_lon, max_lon,   min_lat, max_lat),使用 EPSG:4326 坐标系。

(-126.471753, -112.426439, 32.135664, 42.399335)

geoJsonType

字符串

GeoJson 支持的几何类型。

“Polygon”

geoJsonCoords

列表的列表

GeoJson 的坐标,格式为 [lon, lat],使用 EPSG:4326 坐标系。

[[[-126.471753,32.135664], [-126.471753,42.399335],   [-112.426439,42.399335], [-112.426439,32.135664], [-126.471753,32.135664]]]

geoJsonPath

字符串

GeoJson 文件路径。

“geojson/california.geojson”

minCC

整数

用于限制最小云量(适用于支持的 dataset)。默认值为 0

10

maxCC

整数

用于限制最大云量(适用于支持的 dataset)。默认值为 100

90

includeUnknownCC

布尔值

是否包含云量未知的场景,默认值为 True

False

metadataInfo

字典

包含用于元数据过滤的信息字典。

“and”: [(‘WRS Path’, ‘value’, ‘123’),示例:增加 Path 筛选(‘WRS Row’, ‘value’, ‘039’),示例:增加 Row 筛选(‘Collection Category’, ‘value’, ‘T1’)   ]

参考:https://github.com/Fergui/m2m-api 进行优化。

2.2 必要的说明

1运行前在downloader.py文件中修改数据保存路径

如:

ACQ_PATH = ‘E:/LandsatDataDownLoad/Landsat_OLI/2024/02’想要保存的路径

sleep_seconds:脚本在某些操作前或循环中等待的时间,秒

total_max_retries:最大重试次数

download_sleep_seconds:每次下载之间的等待时间,秒

max_threads:最大并发线程数

2)第一次运行时需要输入用户名与token,每次输入后回车即可,如下所示:

运行之后,如下所示成功请求到数据,并开始下载。

下载成功之后的数据内容如下所示:

2.3 注意事项

  • 尽量多申请账号,更换token后再去批量下载(目前还没测试每个账号的下载极限)

  • 目前测试了edu邮箱、gmail邮箱注册账号,其他邮箱未测试。

  • 申请API的数据访问权限只能申请一次,千万别随意取消,等待收到邮件即可,大概10个小时可通过,在垃圾邮件里面找。

  • 下载数据时不需要梯子!!!,且压缩包大小不等

  • 若发现下载错误而强行停止下载时,需要手动到官网的数量列表中删除上一个查询的数据,如下所示:地址:https://earthexplorer.usgs.gov/settings?page=scenelist,直接点击删除按钮然后再重新进行新的任务。不然的话会将旧的任务再下载一遍。

上述代码分享如下:

通过网盘分享的文件:20260507

链接: https://pan.baidu.com/s/1m2dDKmehkm45NjUjkKb3xg 

提取码: vg8y