402 lines
7.1 KiB
Markdown
402 lines
7.1 KiB
Markdown
# Sentinel Orbit Downloader
|
||
|
||
一个本地可用的 Sentinel-1 数据与精密轨道下载工具,支持:
|
||
|
||
- 按行政区和时间范围检索 Sentinel-1
|
||
- 下载原始 Sentinel-1 产品
|
||
- 下载匹配的精密轨道/恢复轨道 `.EOF`
|
||
- 用 SQLite 管理项目、任务、场景和下载记录
|
||
- 通过本地 Web 页面完成日常操作
|
||
|
||
当前项目面向 Windows 本机使用场景,已经包含一键启动脚本。
|
||
|
||
## 当前能力
|
||
|
||
已实现:
|
||
|
||
- 行政区 GeoJSON 导入 SQLite
|
||
- 按行政区检索 Sentinel-1 场景
|
||
- 原始 Sentinel-1 产品下载
|
||
- 精密轨道 `.EOF` 下载
|
||
- 项目管理
|
||
- 任务列表、任务详情、事件日志
|
||
- 任务删除与清空
|
||
- Earthdata 凭据本地保存
|
||
|
||
暂未实现:
|
||
|
||
- GeoTIFF / `.tif` 处理与导出
|
||
- 后处理流水线
|
||
|
||
也就是说,现在项目专注于“检索 + 下载原始数据 + 下载轨道”。
|
||
|
||
## 目录
|
||
|
||
- 项目根目录:`C:\Users\16216\Desktop\Code\sentinel-orbit-downloader`
|
||
- 默认数据库:`.s1dl\app.db`
|
||
- 默认本地数据目录:`.local-data\`
|
||
- 行政区源文件:`全国行政区.geojson`
|
||
|
||
## 环境要求
|
||
|
||
- Windows
|
||
- Python 3.11 - 3.13
|
||
- `uv`
|
||
- 网络可访问 ASF / Earthdata
|
||
|
||
## 快速开始
|
||
|
||
### 1. 一键启动
|
||
|
||
直接双击:
|
||
|
||
- `Start-SentinelUI.cmd`
|
||
|
||
它会自动:
|
||
|
||
1. 检查 `uv`
|
||
2. 执行 `uv sync`
|
||
3. 启动本地服务
|
||
4. 打开浏览器
|
||
|
||
停止服务时双击:
|
||
|
||
- `Stop-SentinelUI.cmd`
|
||
|
||
启动脚本优先尝试这些端口:
|
||
|
||
- `8011`
|
||
- `8010`
|
||
- `8012`
|
||
- `8013`
|
||
- `8014`
|
||
|
||
如果端口已被占用,会自动换到下一个可用端口。
|
||
|
||
### 2. 手动启动
|
||
|
||
```powershell
|
||
cd C:\Users\16216\Desktop\Code\sentinel-orbit-downloader
|
||
uv sync
|
||
$env:S1DL_API_PORT="8011"
|
||
uv run s1-web
|
||
```
|
||
|
||
打开页面:
|
||
|
||
```text
|
||
http://127.0.0.1:8011/
|
||
```
|
||
|
||
Swagger 文档:
|
||
|
||
```text
|
||
http://127.0.0.1:8011/docs
|
||
```
|
||
|
||
## 首次使用流程
|
||
|
||
### 1. 导入行政区
|
||
|
||
项目根目录下已经放了:
|
||
|
||
- `全国行政区.geojson`
|
||
|
||
在页面中点击:
|
||
|
||
- `导入行政区`
|
||
|
||
也可以用命令行:
|
||
|
||
```powershell
|
||
uv run s1-dl regions import
|
||
```
|
||
|
||
### 2. 创建项目
|
||
|
||
建议先建一个本地项目,例如:
|
||
|
||
- 项目名称:`牡丹江 Sentinel-1 数据`
|
||
- 数据根目录:`.local-data\mudanjiang`
|
||
|
||
### 3. 配置 Earthdata
|
||
|
||
下载原始 Sentinel-1 产品必须有 NASA Earthdata 账号。
|
||
|
||
页面中可填写:
|
||
|
||
- `Earthdata 用户名`
|
||
- `Earthdata 密码`
|
||
|
||
然后点击:
|
||
|
||
- `保存凭据`
|
||
|
||
保存后:
|
||
|
||
- 用户名和密码会写入本地 SQLite
|
||
- 密码不是明文保存
|
||
- 密码使用当前 Windows 用户的 DPAPI 加密
|
||
|
||
如果不想保存,也可以每次手填。
|
||
|
||
### 4. Earthdata 首次授权 ASF
|
||
|
||
很多第一次下载失败,不是用户名密码错,而是没有授权 ASF 应用访问 Earthdata。
|
||
|
||
如果任务日志出现类似错误:
|
||
|
||
```text
|
||
Pre authorization required for this application
|
||
```
|
||
|
||
请先在浏览器登录 Earthdata,然后打开下面链接完成授权:
|
||
|
||
```text
|
||
https://urs.earthdata.nasa.gov/approve_app?client_id=BO_n7nTIlMljdvU6kRRB3g
|
||
```
|
||
|
||
这是一次性的关键步骤。
|
||
|
||
### 5. 检索并下载
|
||
|
||
页面典型流程:
|
||
|
||
1. 搜索行政区,例如 `牡丹江`
|
||
2. 选择时间范围
|
||
3. 选择产品级别,如 `SLC`
|
||
4. 点击 `发起检索`
|
||
5. 选中任务
|
||
6. 选择下载参数
|
||
7. 点击 `启动下载`
|
||
|
||
如果只想补精密轨道,不下载原始产品:
|
||
|
||
- 把 `跳过产品` 设为 `是`
|
||
|
||
## 页面功能说明
|
||
|
||
### 环境配置
|
||
|
||
- 导入行政区 GeoJSON
|
||
- 查看服务状态
|
||
|
||
### 项目
|
||
|
||
- 创建项目
|
||
- 刷新项目列表
|
||
|
||
### 行政区选择
|
||
|
||
- 按名称或 `adcode` 搜索
|
||
- 查看行政区范围框和中心点
|
||
|
||
### 检索参数
|
||
|
||
支持:
|
||
|
||
- 开始日期 / 结束日期
|
||
- 产品级别
|
||
- 波束模式
|
||
- 轨道方向
|
||
- 极化
|
||
- 相对轨道号
|
||
- 最大结果数
|
||
- 使用原始行政区边界
|
||
|
||
### 下载参数
|
||
|
||
支持:
|
||
|
||
- 数据目录
|
||
- 轨道目录
|
||
- 跳过产品
|
||
- 跳过轨道
|
||
- 并发数
|
||
- 忽略轨道失败
|
||
- Earthdata 凭据保存 / 清除
|
||
|
||
### 任务区
|
||
|
||
支持:
|
||
|
||
- 刷新任务
|
||
- 刷新详情
|
||
- 删除选中任务
|
||
- 清空当前项目的非运行任务
|
||
|
||
## 输出结构
|
||
|
||
典型输出目录如下:
|
||
|
||
```text
|
||
.local-data\mudanjiang\
|
||
data\ # Sentinel-1 原始产品
|
||
orbits\ # AUX_POEORB / AUX_RESORB EOF 文件
|
||
manifest.csv
|
||
```
|
||
|
||
数据库中还会保存:
|
||
|
||
- 项目信息
|
||
- 搜索任务
|
||
- 场景清单
|
||
- 下载记录
|
||
- 任务事件日志
|
||
|
||
## 命令行用法
|
||
|
||
### 同步环境
|
||
|
||
```powershell
|
||
uv sync
|
||
```
|
||
|
||
### 导入行政区
|
||
|
||
```powershell
|
||
uv run s1-dl regions import
|
||
```
|
||
|
||
### 搜索行政区
|
||
|
||
```powershell
|
||
uv run s1-dl regions search 牡丹江
|
||
```
|
||
|
||
### 创建项目
|
||
|
||
```powershell
|
||
uv run s1-dl projects create `
|
||
--name "牡丹江 Sentinel-1 数据" `
|
||
--data-root ".local-data\mudanjiang" `
|
||
--description "Mudanjiang Sentinel-1 scenes and orbits"
|
||
```
|
||
|
||
### 按行政区检索
|
||
|
||
牡丹江市 `adcode`:
|
||
|
||
- `231000`
|
||
|
||
```powershell
|
||
uv run s1-dl search `
|
||
--project-id 1 `
|
||
--region-adcode 231000 `
|
||
--start 2024-01-01 `
|
||
--end 2024-03-01 `
|
||
--processing-level SLC `
|
||
--max-results 20 `
|
||
--manifest ".local-data\mudanjiang\manifest.csv"
|
||
```
|
||
|
||
### 直接下载
|
||
|
||
```powershell
|
||
uv run s1-dl download `
|
||
--project-id 1 `
|
||
--region-adcode 231000 `
|
||
--start 2024-01-01 `
|
||
--end 2024-03-01 `
|
||
--processing-level SLC `
|
||
--out ".local-data\mudanjiang-run" `
|
||
--processes 2
|
||
```
|
||
|
||
### 只补轨道
|
||
|
||
```powershell
|
||
uv run s1-dl orbits `
|
||
--data-dir ".local-data\mudanjiang\data" `
|
||
--out ".local-data\mudanjiang\orbits"
|
||
```
|
||
|
||
## 常见问题
|
||
|
||
### 1. 页面里任务全是 failed
|
||
|
||
先看任务事件日志。
|
||
|
||
常见原因有两个:
|
||
|
||
#### 原因 A:没填 Earthdata 用户名和密码
|
||
|
||
如果下载原始 Sentinel-1 产品,必须提供 Earthdata 凭据。
|
||
|
||
解决:
|
||
|
||
- 页面填写用户名密码
|
||
- 或保存到本地配置
|
||
- 或设置环境变量 `EARTHDATA_USER` / `EARTHDATA_PASS`
|
||
|
||
#### 原因 B:Earthdata 没授权 ASF
|
||
|
||
如果日志里有:
|
||
|
||
```text
|
||
Pre authorization required for this application
|
||
```
|
||
|
||
按前文的授权链接先批准 ASF 应用。
|
||
|
||
### 2. 为什么检索成功,但下载失败
|
||
|
||
因为检索 ASF 元数据不一定要求完整的下载授权;真正下载原始产品时才会触发 Earthdata 登录和授权校验。
|
||
|
||
### 3. 只想下载轨道,不想下载原始产品
|
||
|
||
页面里把:
|
||
|
||
- `跳过产品`
|
||
|
||
设成:
|
||
|
||
- `是`
|
||
|
||
### 4. 保存 Earthdata 凭据是否明文
|
||
|
||
不是。
|
||
|
||
当前实现:
|
||
|
||
- 用户名保存在本地 SQLite
|
||
- 密码经过 Windows DPAPI 加密后保存
|
||
|
||
### 5. 为什么不支持 `.tif`
|
||
|
||
当前项目只管原始 Sentinel-1 产品和轨道文件。
|
||
|
||
还没有做:
|
||
|
||
- 解压
|
||
- 预处理
|
||
- GeoTIFF 导出
|
||
|
||
## 开发与维护
|
||
|
||
### 主要入口
|
||
|
||
- Web API: `src/sentinel_orbit_downloader/api/app.py`
|
||
- Web 页面: `src/sentinel_orbit_downloader/web/`
|
||
- 下载管理: `src/sentinel_orbit_downloader/services/download_manager.py`
|
||
- 项目/任务存储: `src/sentinel_orbit_downloader/services/project_store.py`
|
||
- Earthdata 本地设置: `src/sentinel_orbit_downloader/services/settings_store.py`
|
||
|
||
### 本地脚本
|
||
|
||
- `Start-SentinelUI.cmd`
|
||
- `Start-SentinelUI.ps1`
|
||
- `Stop-SentinelUI.cmd`
|
||
- `Stop-SentinelUI.ps1`
|
||
|
||
## 说明
|
||
|
||
这个项目当前阶段的目标很明确:
|
||
|
||
- 把“按区域检索 Sentinel-1”
|
||
- “下载原始数据”
|
||
- “下载精密轨道”
|
||
- “管理任务记录”
|
||
|
||
这四件事先稳定做好。
|