1. 项目概述:ASF数据下载的痛点与解决方案
作为一名长期处理遥感数据的从业者,我深知从阿拉斯加卫星设施(ASF)下载大量SAR数据的痛苦。ASF Data Search虽然提供了丰富的卫星数据资源,但其下载界面每次只能单文件操作,当需要获取整个区域的时间序列数据时,手动点击下载简直是一场噩梦。这就是为什么我最终选择了aria2这个轻量级下载工具来实现批量自动化下载。
aria2是一个支持多协议、多线程的下载工具,特别适合处理ASF这种需要认证的https下载场景。它不仅能突破浏览器单线程下载的速度限制,更重要的是可以通过配置文件实现批量任务队列管理。配合简单的脚本,我们就能实现从数据搜索到下载完成的完整自动化流程。
注意:ASF数据下载需要提前注册Earthdata账号并获取API权限,这是使用本方法的前提条件。
2. 环境准备与工具配置
2.1 aria2的安装与基础配置
在Ubuntu/Debian系统上安装aria2只需一行命令:
bash复制sudo apt-get install aria2
对于Windows用户,推荐使用Scoop包管理器安装:
powershell复制scoop install aria2
基础配置文件(~/.aria2/aria2.conf)建议包含以下核心参数:
ini复制# 连接设置
max-connection-per-server=8
split=16
min-split-size=4M
# 下载目录
dir=~/asf_downloads
# 认证信息(需替换为你的Earthdata账号)
http-user=your_earthdata_username
http-passwd=your_earthdata_password
2.2 ASF API密钥的获取
- 登录Earthdata网站(https://urs.earthdata.nasa.gov)
- 在Profile页面生成API Bearer Token
- 将token保存到本地文件(如~/.netrc),格式如下:
code复制machine urs.earthdata.nasa.gov
login your_username
password your_token
3. 批量下载实现方案
3.1 从ASF获取下载链接列表
通过ASF API搜索数据后,我们可以用jq工具提取下载链接:
bash复制curl -s "https://api.daac.asf.alaska.edu/services/search/param?platform=Sentinel-1&polygon=POINT(..." \
| jq -r '.results[].url' > download_list.txt
3.2 构造aria2输入文件
创建任务配置文件(asf_download.txt),每个下载任务包含:
code复制https://datapool.asf.alaska.edu/.../S1A_IW_GRDH_1SDV_20230101T120000.zip
dir=./sentinel1/2023/01
out=S1A_20230101.zip
header="Authorization: Bearer your_token"
3.3 启动批量下载
使用以下命令开始下载:
bash复制aria2c -i asf_download.txt -j5 --max-concurrent-downloads=3
参数说明:
-j5:同时进行5个下载任务--max-concurrent-downloads=3:每个任务最大3线程
4. 文件结构与命名规范
4.1 推荐目录结构
code复制asf_data/
├── sentinel1/
│ ├── 2023/
│ │ ├── 01/
│ │ │ ├── S1A_20230101.zip
│ │ │ └── S1A_20230102.zip
│ │ └── 02/
├── alos2/
└── metadata/
└── download_log.csv
4.2 文件名记忆法
我采用"卫星平台_获取日期.zip"的命名规则:
- S1A → Sentinel-1A
- P1 → PALSAR-1
- 日期采用YYYYMMDD格式
例如:
S1A_20230101.zip:2023年1月1日的Sentinel-1A数据P1_20221215.zip:2022年12月15日的PALSAR-1数据
5. 常见问题与解决方案
5.1 认证失败问题
症状:返回403 Forbidden错误
解决方法:
- 检查~/.netrc文件权限是否为600
- 确认API token未过期(有效期通常为1年)
- 在aria2配置中添加:
code复制header="Authorization: Bearer your_token"
5.2 下载中断恢复
aria2默认支持断点续传,只需重新运行相同命令即可。如需强制重新下载:
bash复制aria2c -i asf_download.txt --allow-overwrite=true
5.3 速度优化技巧
- 调整分片大小(适合大文件):
ini复制min-split-size=20M - 优选ASF镜像节点(在下载链接中使用):
- datapool.asf.alaska.edu
- s1qc.asf.alaska.edu
6. 进阶技巧:自动化脚本实现
6.1 全自动下载脚本示例
bash复制#!/bin/bash
# 搜索参数
POLYGON="POINT(135.23 34.56)"
START_DATE="2023-01-01"
END_DATE="2023-01-31"
# 生成下载列表
curl -s "https://api.daac.asf.alaska.edu/services/search/param?\
platform=Sentinel-1&start=$START_DATE&end=$END_DATE&polygon=$POLYGON" \
| jq -r '.results[] | .url + "\n dir=./sentinel1/" + (.startTime | split("-")[0]) + "/" + (.startTime | split("-")[1]) + "\n out=" + .granuleName + ".zip"' \
> asf_download.txt
# 开始下载
aria2c -i asf_download.txt -j5 --max-concurrent-downloads=3 --log=download.log
6.2 下载后校验
使用ASF提供的MD5校验文件:
bash复制aria2c https://datapool.asf.alaska.edu/.../S1A_IW_GRDH_1SDV_20230101T120000.zip.md5
md5sum -c S1A_IW_GRDH_1SDV_20230101T120000.zip.md5
在实际使用中,我发现将下载任务分批次进行(每次约20-30个文件)能获得最佳稳定性。对于特大区域的数据采集,建议按1°×1°网格分多个脚本执行,并在完成后自动发送邮件通知。