Sentinel-1 IW 模式下的影像幅宽较大,数据量一般都在4GB以上,如果要进行长时序处理的话就需要很大存储空间,若研究区域较小,只占其中几个burst,整景下载就既浪费时间,浪费硬盘空间。现在ASF上支持单下载(burst)数据,每个burst的大小仅约150MB

burst 下载

直接看图选选选,然后下就行。不过建议使用IDM、XDM等批量工具

burst 预处理

下载后Sentinel-1 Burst 数据是.tiff图像,需要将其转换为 .SAFE 格式才与主要的Sentinel-1 SAR处理器兼容,如GAMMA

主要就是要安装burst2safe(A package for converting ASF-derived Sentinel-1 burst SLC products to the ESA SAFE format)

GitHub - ASFHyP3/burst2safe: A package for converting ASF-derived Sentinel-1 burst SLC products to the ESA SAFE format

最简单的安装方法就是通过 pip 或conda安装,安装于默认位置

pip install burst2safe
conda install -c conda-forge burst2safe

要使用 burst2safe 工具,需要先配置 Earthdata Login 的凭证(简单说就是 “登录信息”),有 3 种方式可以设置,且工具会按「令牌(token)> .netrc 文件 > 环境变量里的用户名密码」的顺序优先使用

第一步:先注册 Earthdata 账号

如果还没有账号,先点Earthdata Login里的 “sign up here” 链接注册(通常是 Earthdata 的官方注册页),拿到你的用户名和密码。

第二步:选一种方式配置凭证

根据你的需求选一种即可,不需要全设置(工具会按优先级自动选):

方式 1:用令牌(token,推荐,更安全)

  1. 获取令牌:点Earthdata Login Documentation(关于 token 的指南),按步骤生成一个 Earthdata Login Token(类似一串特殊密码)。
  2. 设置环境变量:把令牌存到名为 EARTHDATA_TOKEN 的环境变量里。
    • Windows:打开 “系统属性→高级→环境变量”,新建变量名 EARTHDATA_TOKEN,值填你的令牌。
    • Mac/Linux:打开终端,输入 export EARTHDATA_TOKEN="你的令牌内容"(临时生效,永久生效需改 ~/.bashrc 或 ~/.zshrc)。

方式 2:用 .netrc 文件(适合经常用的场景)

  1. 创建 .netrc 文件:在你的电脑 “用户主目录”(比如 Windows 的 C:\Users\你的用户名,Mac/Linux 的 ~)里,新建一个叫 .netrc 的文件(注意前面有个点,没有后缀)。
  2. 填写内容:按指南格式写,通常是:

    plaintext

machine 服务器地址 login 你的Earthdata用户名 password 你的Earthdata密码

(“服务器地址” 需要看指南里的具体值,比如可能是 urs.earthdata.nasa.gov)。

方式 3:用环境变量存用户名和密码(不推荐,密码明文存储)

直接把用户名和密码存到两个环境变量里:

变量 1:EARTHDATA_USERNAME,值填你的 Earthdata 用户名。

变量 2:EARTHDATA_PASSWORD,值填你的 Earthdata 密码。
设置方法和方式 1 的 “环境变量” 步骤一样(Windows 图形界面或终端命令)。

任选一种设置好后就可以在命令行中输入burst2safe --version,如果有输出没报错就可以用了。

(这种安装方法最简洁,我之前第一次做的时候就是用的这个,是没问题的。后来我再用这个方法做时,采用指定路径创建的conda虚拟环境,然后安装和输burst2safe --version都没有报错,但就是没有反应,不知道为什么,百思不得其解。额。。。,总之友友们自己踩坑吧,有大佬要是解决了,告诉我一下是怎么个事。)

这里再记录一下,我之后的一个安装方法,

win+r输入cmd打开面板   ,输入:

conda create -n myenv python=3.10 

conda activate myenv

conda install numpy

conda install -c conda-forge gdal

pip install burst2safe

就好了,记得配置 Earthdata Login 凭证,之后输入burst2safe --version,如果有输出没报错就可以用了。

这个的用法就是

burst2safe BURST名,如

burst2safe S1_275111_IW2_20151102T124716_VV_68F1-BURST

如果数量多的话,最好还是脚本处理啦

先切换到SAR图像目录,在bash中输入

ls *.tiff > tab
awk -F '.tiff' '{print $1}' tab > tab1
awk '{print "burst2safe " $1}' tab1 > tab2

然后使用windows脚本批处理,这里给个参考

@echo off
chcp 936 > nul 2>&1  &  title Conda命令执行器
setlocal enabledelayedexpansion

:: 显示当前编码设置,便于调试
for /f "tokens=2 delims=:." %%a in ('chcp') do set current_chcp=%%a
echo 当前编码: !current_chcp! (936=GBK, 65001=UTF-8)

echo 正在激活conda环境...
call conda activate myenv
if !errorlevel! neq 0 (
    echo 错误:无法激活conda环境
    goto :end
)
echo Conda环境已激活

echo 正在切换到工作目录...
cd /d D:\ASCENDING
if !errorlevel! neq 0 (
    echo 错误:无法切换到指定目录
    goto :end
)
echo 已切换到目录: %CD%

echo 开始执行tab2文件中的命令...
if not exist tab2 (
    echo 错误:找不到tab3文件
    goto :end
)

set line_num=0
for /f "usebackq delims=" %%a in ("tab3") do (
    set /a line_num+=1
    set "command=%%a"
    
    :: 转义感叹号以避免延迟扩展问题
    set "safe_command=!command:!=^^^!%"
    
    echo.
    echo 执行第!line_num!行命令: !safe_command!
    echo -----------------------------------
    
    :: 执行命令并捕获输出
    for /f "tokens=*" %%o in ('!command! 2^>^&1') do (
        set "output=%%o"
        echo !output!
    )
    
    if !errorlevel! neq 0 (
        echo 命令执行失败,错误码: !errorlevel!
    ) else (
        echo 命令执行成功
    )
)

echo.
echo 所有命令执行完毕!

:end
endlocal

更多推荐