Files
2026-04-28 10:44:45 +08:00

402 lines
7.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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`
#### 原因 BEarthdata 没授权 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”
- “下载原始数据”
- “下载精密轨道”
- “管理任务记录”
这四件事先稳定做好。