Sentinel-2下载提速:Copernicus Dataspace三大技巧,从小时级到分钟级
2026/9/15 17:02:02 网站建设 项目流程

群里又一次被刷屏:“谁有快一点的Sentinel-2下载方法?一个Tile下了三小时还没完。”自从欧洲空间局把老平台迁到Copernicus Dataspace之后,这种抱怨比以前更多了。老遥感用户还在用浏览器直接点开产品页下载,新用户更是摸不着门道,不知道新版门户的认证、下载链接、SDK全都不一样了。这篇文章专门解决这个问题,整理我实测后最管用的3个提速技巧,外加Workspace批量操作的完整流程。适合经常批量下载Sentinel-2原始影像、做时序分析或者生产L2A产品的同学,照着操作就能把下载时间从“小时级”降到“分钟级”。

1. 先搞清楚Copernicus Dataspace为什么这么慢——病根找到了才好下药

1.1 新旧平台迁移带来的变化,影响了每一个下载环节

老用户应该还有印象,以前下载Sentinel-2都在SCI Hub上操作,一个链接直接挂到浏览器或者wget里,虽然也慢,但逻辑非常简单。2023年之后ESA把数据服务整体迁到了Copernicus Data Space Ecosystem,也就是现在常说的Copernicus Dataspace。它换了一套完全不同的技术架构:产品目录走OData接口,数据存储走S3兼容对象存储,认证走OAuth2.0令牌。架构更现代了,但很多人的下载习惯还停在SCI Hub那个年代,于是第一反应就是“这平台怎么变慢了”。

其实慢不慢要分开看。新平台的元数据检索速度比老平台快不少,产品搜索、按云量筛选、按轨道号定位都更灵活。真正让人头疼的是下载环节,一个Sentinel-2 L2A产品的JPEG2000压缩数据量通常在800MB到1GB以上,一个10km乘10km的Tile在10米分辨率下包含波段、云掩膜、场景分类等多层数据,这个体量放在那里,任何平台都不可能做到“秒下”。瓶颈不只是平台,更多是我们自己的下载方式和网络链路。

1.2 慢的真正来源:单连接限速、国际线路和高峰期

先说单连接问题。浏览器下载默认就是一个HTTP连接慢慢拉,Copernicus Dataspace的服务端并不会主动把一个文件拆成多段并行传输,一个字节一个字节地排队过来。假设你的宽带有一百兆,理论上能跑十几兆每秒,但单个连接往往被限制在2到5MB/s,碰上高峰期甚至只有几百KB/s。一个Tile动辄1GB,算下来下载时间完全是灾难。

其次是线路问题。服务器部署在欧洲,国内访问要经过跨洲际的骨干网络,丢包和延迟都比访问本地服务器高得多。国外的云存储节点在拥塞时段会主动降速,尤其是欧洲工作日的下午,也就是我们这边的晚间,恰好是大量欧洲用户同时抓取数据的高峰。这两点叠加在一起,体验自然很差。理解了这两个病根,提速思路就清楚了:要么多开连接并发下载,要么换一条更稳的协议通道,要么错峰下载。下面三个技巧分别针对这三个方向。

2. 提速技巧一:从浏览器换成官方Download Manager,吃满多线程红利

2.1 官方下载管理器的正确打开方式

很多人不知道Copernicus Dataspace官方提供了一个名为Download Manager的桌面下载工具,在网页端点击产品预览时,下载方式下拉菜单里可以选“Download Manager”而不是“Browser”。这个工具默认就会把文件分成多个段并发拉取,原理类似下载软件的多线程加速,但和平台侧结合更紧密,认证、重试、队列都是自动处理的。

我第一次用的时候也踩了个小坑:直接下载安装后,点网页上的“Download Manager”按钮没反应。后来发现是要先启动这个客户端,并且保持登录状态,网页才会把下载任务“推”给本地工具。两种下载方式的认证逻辑也不一样,Browser方式用的是浏览器会话里的令牌,Download Manager用的是独立的授权凭证,所以第一次绑定要按客户端的提示授权账号,不要跳过那一步。

2.2 我实测的速度变化和并发参数调整

我在百兆宽带环境下做过一次对比,同一个L2A Tile文件,浏览器直连维持在2MB/s上下,官方Download Manager默认设置能跑到7到9MB/s,后半段还冲到过11MB/s左右。整个文件下载时间从十几分钟缩短到不到5分钟。这并不是我网络特别好,而是多线程并发效果确实明显,再加上工具内部对失败的分片会自动重试,遇到网络抖动时不会像浏览器那样直接整个文件重来。

如果你觉得默认并发还是不够,可以在Download Manager的设置里调整并发分片数,我一般调到8到16段,再高的话服务器容易返回429限流。注意任务数量也别一次挂几十个,官方对请求频率有限制,我实测同时跑4到6个任务比较稳。还有一个容易被忽略的点:这个工具在下载大文件时会把临时文件写在系统临时目录,如果C盘空间不够,下载到一半会报错,建议在设置里把临时目录改到大容量盘。

3. 提速技巧二:用CDSE API加Python脚本,实现精准检索、并发下载和断点续传

3.1 先学会OData查询,只下载你真正需要的Tile

如果只是偶尔下一次,Download Manager够用了。但你要是做批量处理,比如一个研究区跨好几个Tile、时间跨度又长,手动在网页里一个个找产品再点下载,效率低到没法看。这时候应该直接走CDSE API,用OData语法去“精准命中”目标产品。

首先要了解Sentinel-2的产品命名规则。一个典型的产品名长这样:S2A_MSIL2A_20230415T025551_N0509_R132_T50TLH_20230415T060643.SAFE,其中T50TLH就是Tile编号,20230415是采集日期,MSIL2A表示这是L2A产品。我们的检索思路就是用OData过滤条件把这些字段都限定住。例如我要找2024年1月1日之后、Tile编号T50TLH、云量低于20%、类型为S2MSI2A的产品:

https://catalogue.dataspace.copernicus.eu/odata/v1/Products?$filter=Collection/Name eq 'SENTINEL-2' and ContentDate/Start gt 2024-01-01T00:00:00.000Z and Attributes/OData.CSC.StringAttribute/any(att:att/Name eq 'productType' and att/OData.CSC.StringAttribute/Value eq 'S2MSI2A') and Attributes/OData.CSC.DoubleAttribute/any(att:att/Name eq 'cloudCover' and att/OData.CSC.DoubleAttribute/Value lt 20)&$top=10

这里有个细节要注意:云量字段在OData里的类型,我见过Double和Integer两种返回,官方文档写的也不完全一致。如果你把过滤条件写成DoubleAttribute报错,就改成IntegerAttribute试试,这是我踩过几次坑之后总结出来的规律。另外,URL里的时间格式必须带TZ,用2024-01-01 00:00:00这种格式是查不到结果的。

3.2 Python脚本公开:令牌获取、多线程下载、断点续传

有了产品ID列表,下载就变成了一件可以完全自动化的事。整个流程分三步,先拿令牌,再查产品列表,最后下载文件。

获取访问令牌是第一步,需要向认证服务发一个POST请求:

import requests auth_url = "https://identity.dataspace.copernicus.eu/auth/realms/CDSE/protocol/openid-connect/token" payload = { "grant_type": "password", "username": "你的用户名", "password": "你的密码", "client_id": "cdse-public", } resp = requests.post(auth_url, data=payload) token = resp.json()["access_token"]

需要留意的是,这个令牌默认有效期只有60分钟。批量下载超过一个小时的话,后面的请求会突然大量报401错误,不是账号问题,是令牌没刷新。你可以在循环里判断一下剩余时间,快过期前重新拿一次令牌,或者简单粗暴一点,每隔40分钟重新请求一次。

拿到令牌后就可以查询产品并定位下载地址。每个产品的元数据里都有唯一的Id字段,下载链接的格式是固定的:

product_id = "4d1f2e56-2a17-4d9a-8c2f-6a0b6c6e3d5f" download_url = f"https://catalogue.dataspace.copernicus.eu/odata/v1/Products('{product_id}')/$value" headers = {"Authorization": f"Bearer {token}"} response = requests.get(download_url, headers=headers, stream=True)

注意一个常见坑:有时候你会拿到一个.SAFE目录的打包下载链接,有时候平台的响应会附带一个重定向到S3的地址。直接用requests跟着重定向走就没问题,但如果用了某些库默认关闭重定向,就会拿到一大段XML报错而不是文件内容。

批量下载时,我推荐采用“多线程并发加断点续传”的组合。断点续传的原理很简单,HTTP协议支持的Range头允许你告诉服务器“我已经有前面多少字节了,你从第N字节开始发”。这样下载到一半断网、断电都不怕,重新跑脚本时会自动跳过已经下载的部分:

import os def resume_download(download_url, save_path, token): headers = {"Authorization": f"Bearer {token}"} resume_pos = 0 if os.path.exists(save_path): resume_pos = os.path.getsize(save_path) headers["Range"] = f"bytes={resume_pos}-" with requests.get(download_url, headers=headers, stream=True) as r: if r.status_code == 206: # 206表示服务器接受了Range请求 mode = "ab" else: mode = "wb" with open(save_path, mode) as f: for chunk in r.iter_content(chunk_size=1048576): if chunk: f.write(chunk)

并发部分可以直接用Python标准库的ThreadPoolExecutor,把产品ID列表丢给线程池去跑。我自己的经验是同时跑4到6个下载线程比较合适,线程太多容易被平台限流,而且单个文件本身就已经是压缩流传输,过多的线程并不会线性提速。

3.3 进阶:完全命令行化的aria2c多线程下载

如果你嫌写Python脚本还要处理依赖库麻烦,还有一个更轻量的方案:直接用aria2c这个命令行下载工具。它在很多Linux发行版里一条命令就能装好,Windows上也有编译好的版本。aria2c支持多连接分段下载,语法也很简单:

aria2c -x 16 -s 16 -d /data/sentinel2 \ --header="Authorization: Bearer 你的令牌" \ "https://catalogue.dataspace.copernicus.eu/odata/v1/Products('产品ID')/$value"

-x 16表示每个服务器最多建立16个连接,-s 16表示将文件拆成16段并发下载。这个工具还天然支持断点续传,中断后重新执行同样的命令,它会自动检查已经下载了多少并继续。我经常把一批产品ID写成一个文本文件,然后写个循环调用aria2c,把整个批量下载变成一个后台任务挂着跑。

4. 提速技巧三:Workspace加S3协议,把“等待下载”变成“主动同步”

4.1 Workspace到底是什么——免费的云端中转存储

第三个技巧要聊的是Copernicus Dataspace里的Workspace功能。简单说,它是平台给你的一块云端对象存储空间,兼容S3协议,默认有免费额度。一开始我觉得这块空间很鸡肋,1GB能干吗?一个Tile就快1GB了。后来我发现它的价值不在“存数据”本身,而在“换协议”。

Data Space的数据存储底层就是S3桶,通过https://data.dataspace.copernicus.eu这个地址对外提供服务。如果你用浏览器或者普通HTTP接口下载,走的是API网关,限制多、速度也不稳定。但如果你用S3协议去访问同一个数据,链路更直接,而且S3天然支持多线程分片传输,下载速度和稳定性都明显更好。Workspace就是你在S3上的私有空间,可以把它当成一个中转站:先把需要的数据从公共目录同步到自己的Workspace,再从Workspace下载到本地。

4.2 用rclone挂载Workspace,像操作本地目录一样批量传输

要发挥Workspace的威力,推荐用rclone这个工具。它支持几乎所有主流对象存储,配置好之后可以把远端S3空间挂载成本地目录,然后像复制本地文件一样批量操作。我先说配置步骤,再说具体怎么用。

第一步,登录Copernicus Dataspace网页端,在用户菜单里找到Settings,再进入S3 Access区域,创建一个新的Access Key。你会拿到Access Key IDSecret Access Key,这两个字符串要存好,只在创建时显示一次。

第二步,在本地安装rclone,执行rclone config,按提示新建一个remote:

type = s3 provider = Other endpoint = https://data.dataspace.copernicus.eu access_key_id = 你的AccessKeyID secret_access_key = 你的SecretAccessKey force_path_style = true

注意几个参数:provider一定要选Other,因为Data Space不是AWS S3,选成AWS模式会在签名算法上报错。force_path_style要设为true,否则访问路径解析会不对。region留空就行。

配置完成后,先用一条命令看看远端目录结构:

rclone lsd cdse:/

如果一切正常,你会看到自己创建的Workspace名称,还能看到一个公开的eodata目录,那是平台侧的参考数据入口。这时候批量传输就变得非常简单了。比如下载某个Tile长时间序列的所有L2A产品,本地目录结构已经按Tile和时间排好,直接同步即可:

rclone copy cdse:/eodata/Sentinel-2/T50TLH/2024 ./s2_local_t50tlh_2024 -P

-P参数会显示实时传输进度、速度和剩余时间。rclone还支持--transfers参数设置并发文件数,我一般设8到10个,比默认的4个吞吐量高很多。这里有个很实用的点:rclone的copy是增量同步,断线重连后已经拷贝的文件不会重新传,比普通下载工具省心得多。

4.3 双通道组合:API精准定位加Workspace批量搬运

我实际用得最顺手的方案,其实是把前两个技巧组合起来:用OData API精准定位要下载的产品,拿到产品列表后,不急着往本地拉,而是先把这些产品对应的S3路径同步到自己的Workspace里,再从Workspace批量下载到本地。

为什么要多这一步?直连公共S3桶的数据,高峰期也会碰到限速,但通过Workspace中转后,相当于把数据先从公共区复制到自己的私有空间,这个内部复制走的是数据中心内部链路,速度快得惊人,然后再从自己的Workspace下载,就不再受公共区并发限制了。听起来绕了一圈,实际测下来反而更快,尤其适合一次性能拉几十个Tile的场景。

中转时要注意自己Workspace的剩余空间。默认免费额度只有1GB,放不下几个Tile,所以这个中转方案更适合空间有富余的账号,或者你是个人付费用户。如果空间不够,也可以只中转急需的几个产品,其余继续用API直连下载。灵活搭配才是关键。另外,Workspace里的文件长期不清理会产生存储费用,下载完成后记得定期删掉中转文件,或者设置生命周期规则自动清理。

5. 常见问题与排查技巧实录

5.1 我踩过的坑:认证过期、限流、断流、产品ID变化

批量下载过程中最常见的错误就是401。原因前面提过,令牌有效期只有60分钟。解决方法是定时刷新,别用一个token硬跑几个小时。

403错误也好区分:如果你确认账号密码没问题,多半是Workspace空间已满,或者S3密钥权限不对。特别是新建的Workspace,有时密钥和空间没有绑定好,重新生成一次密钥就能解决。

HTTP下载中途断流,也就是数据传着传着突然停止,但连接没有报错。这种现象在跨洲链路上很常见,尤其表现在大文件下载中段。处理办法就是断点续传,不管用Python脚本还是aria2c,都把断点续传选项打开。没有续传的话,下载到99%断掉才是最崩溃的。

最后有个坑容易误导人:你通过OData查询到的产品ID,过了一段时间再次下载时可能失效。这通常是因为平台进行了数据迁移或者索引重建,产品ID变了。别一张列表用半年,下载前一天还是再查询一次比较稳妥。

5.2 下载完成之后的预处理衔接建议

下载不是终点,下载完还得做遥感影像预处理。Sentinel-2的L2A产品虽然已经做了大气校正,但你还得做自定义裁剪、镶嵌、重投影、云掩膜这些后续步骤。建议在批量下载前就把目录结构按“Tile编号/采集日期/产品类型”组织好,不要全部堆在一个文件夹里。这样后续用SNAP、QGIS或者Python的rasterio/rasterio.mask库批量读取时,路径规划会轻松很多。

我有一个小习惯:产品下载完成后,先写一个文本文件记录每个产品的校验信息,包括文件大小、Tile编号、云量、采集时间,再把产品文件名与这个记录对应起来。这不算复杂,但在做时序分析时特别好用,尤其是需要按季度或按月份筛选数据的时候,直接查清单就能定位到本地文件,不用再翻原始下载记录。

5.3 再多说一句个人体会

Copernicus Dataspace这套新平台,刚接触时确实有不少学习成本,但适应之后会发现它的批处理潜力远超老平台。我现在的下载流程基本稳定在“OData查询产品清单,aria2c或者rclone并发拉取,关键数据走Workspace中转”这套组合上,遇到批量需求时,再写个调度脚本统一跑一遍。速度虽然不能和国内云服务器调数据比,但至少把下载从“煎熬”变成了“挂机等结果”的状态。如果你也被Sentinel-2下载折磨过,不妨按这篇文章里的方案逐个试一遍,找到最适合自己网络环境的组合就行。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询