单下载Sentinel-1 burst 的预处理方法(适用GAMMA)
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)
最简单的安装方法就是通过 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,推荐,更安全)
- 获取令牌:点Earthdata Login Documentation(关于 token 的指南),按步骤生成一个 Earthdata Login Token(类似一串特殊密码)。
- 设置环境变量:把令牌存到名为
EARTHDATA_TOKEN的环境变量里。- Windows:打开 “系统属性→高级→环境变量”,新建变量名
EARTHDATA_TOKEN,值填你的令牌。 - Mac/Linux:打开终端,输入
export EARTHDATA_TOKEN="你的令牌内容"(临时生效,永久生效需改~/.bashrc或~/.zshrc)。
- Windows:打开 “系统属性→高级→环境变量”,新建变量名
方式 2:用 .netrc 文件(适合经常用的场景)
- 创建 .netrc 文件:在你的电脑 “用户主目录”(比如 Windows 的
C:\Users\你的用户名,Mac/Linux 的~)里,新建一个叫.netrc的文件(注意前面有个点,没有后缀)。 - 填写内容:按指南格式写,通常是:
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
更多推荐


所有评论(0)