Repository navigation
御图 v0.5.0
安全
- 更新通道端到端签名:移除自实现 updater,改用官方
tauri-plugin-updater+ minisign 签名。CI 用仓库 Secret 注入私钥签所有 updater 产物,客户端用编译期内置公钥校验,篡改 latest.json 或中间人替换 exe 会被直接拒绝 - WMTS / WMS 服务端 XML 转义:所有用户提供的任务名 / format 字段在 GetCapabilities XML 中转义,杜绝 XML 注入;输出格式与 ResourceURL.format / WMTS Format / ArcGIS tileInfo.format 跟随任务实际格式,避免格式不一致导致的客户端解析异常
- 隐藏未上线的远程协作功能:避免误用,相关入口已从 UI 与服务端路由暂时下架
新增
- 流水线裁剪(streaming clip):开启「严格按区域裁剪」的栅格(非 GCJ02)任务,裁剪不再等下载结束才统一处理;后台 mpsc 消费者在瓦片落盘后并发完成边界瓦片的像素级裁剪,下载结束即可直接进入完成状态,整体耗时显著缩短
- 实现:新增
download/clip_pipeline.rs,独立 SQLite 连接 + rayon 并行;门控条件clip_to_bounds && !矢量 && !GCJ02(GCJ02 因必须先合成再裁剪,仍走原后处理路径) - 取消友好:取消的任务不写入
tiles.clipped=1标记,下次恢复仍可触发完整 post_clip 兜底 - 前端:新增事件
tilegrab-clip-progress/tilegrab-clip-tiles(地图闪烁可视化沿用既有通道)
- 实现:新增
- H 套件(H1 + H2 + H3 + H4)— 矢量瓦片基础支持:下载链接含
pbf/mvt/vector关键字时自动识别为矢量格式 (format=pbf)- 下载流水线:矢量任务跳过 GCJ02 像素纠偏与 tile_clip 像素裁剪(这些后处理仅对栅格图像有意义);若同时是 GCJ02 坐标会写入警告日志
- 预览:
LocalTaskTileLayer自动按 task.format 切换 raster / vector 数据源;矢量分支会对首块瓦片做「样式内省」,按 source-layer 与几何类型(点/线/面)自动生成灰白骨架样式(fill + line + circle) - MBTiles 导出(H3):矢量任务导出会按 MBTiles 规范自动 gzip 包装 tile_data、metadata.type 设为 overlay、扫描首批瓦片提取真实 layer 名后写入
vector_layersJSON;像素裁剪、PNG/JPEG 重编码、GeoTIFF 选项在矢量任务下自动隐藏并给出说明 - PMTiles 导出(H4):矢量任务使用
TileType::Mvt+Compression::Gzip(由 PMTiles writer 自动 gzip 包装,无需手动);防御式maybe_gunzip处理存储侧偶然双重压缩;metadata JSON 同样写入vector_layers描述 - 依赖:新增
@mapbox/vector-tile+pbf两个前端依赖用于 MVT 内省;后端新增轻量mvt_scan模块(纯 Rust,无 protobuf crate 依赖) - 暂未支持(H5 后续):GeoJSON 导出
- G 套件 — 存储占用面板:设置页顶部新增可折叠的「存储占用」卡片,展示磁盘使用率(本应用 vs 其他占用 双层进度条)、各任务 .tiles 文件大小(按大小排序,默认显示前 5 个);自动扫描默认目录的孤儿 .tiles 文件(已删任务残留),支持一键清理
- 后端:新增
storage_stats命令汇总每任务存储 + 容量 + 孤儿;新增cleanup_orphan_tiles命令带白名单保护(仅删默认目录内未被引用的 .tiles,含 WAL/SHM 兄弟文件) - 前端:新增
StorageStatsCard.vue组件,集成于 SettingsPanel 顶部
- 后端:新增
- E 套件 — 失败瓦片可视化:任务详情新增「失败瓦片分布」卡片,按 zoom 层级显示失败瓦片数量徽章;点击层级在地图上以红色透明矩形高亮该层级的所有失败瓦片位置;可单独「重试本层」或沿用旧的「重试全部失败瓦片」
- 后端:新增
failed_tiles_summary/list_failed_tiles/retry_failed_tiles三个命令;reset_failed_at_zoom支持按层级重置失败状态后续传 - 前端:新增
FailedTilesLayer地图覆盖层 +useFailedTilesView共享状态;切换任务自动清理可视化 - UX 优化:点击层级自动 fitBounds 缩放到该层级失败瓦片包围盒;支持多选层级 + 批量重试(全选时一次性重置全部失败)
- 后端:新增
- D 套件 — 预设源市场:在「新建任务」向导的「预置底图」分类下追加多家常用底图,一键载入即可下载
- 腾讯地图:路网图、地形图(GCJ02,TMS Y 翻转)
- 天地图:矢量底图 / 矢量注记 / 影像底图 / 影像注记 / 地形晕渲 / 地形注记(WGS84,需用户填
tk) - Bing Maps:Aerial / Road / Hybrid(WGS84,使用 quadkey)
- OSM 子图层:Humanitarian、CyclOSM、OpenTopoMap
- 高德新增:卫星注记叠加图层(半透明标签层)
- 后端:
build_tile_url新增{q}占位符,自动按 (z,x,y) 计算 Bing 风格 quadkey - Token 弹层:选中需要凭证的预设(如天地图)时自动弹出输入框,填入后保存到设置(
preset.tianditu_token),下次默认带入;URL 模板用{{tk}}引用、通过extra_params注入 - F 套件 — 增量更新(仅限已完成的任务):在任务详情底部新增「增量更新」卡片,含 2 个入口:
- 扩展任务(F2):点击后进入地图绘制模式,顶部横幅显示当前任务名,原始区域以红色轮廓同步显示。用户在地图上框选要追加的区域,确认时后端取「原 bbox ∪ 新框选」并通过
update_task_geometry写库 + 续传新增瓦片 - 借数据(F4):候选列表严格筛选「同源(URL/格式/CRS/坐标类型一致)且已完整下载」的任务,列表右侧实时显示所选任务的缩略图预览(
MiniMapPreview+tilegrab-stored://MapLibre 协议直读本地瓦片),确认后从源 .tiles 复制可复用瓦片到当前任务,跳过网络下载
- 扩展任务(F2):点击后进入地图绘制模式,顶部横幅显示当前任务名,原始区域以红色轮廓同步显示。用户在地图上框选要追加的区域,确认时后端取「原 bbox ∪ 新框选」并通过
- 后端命令:
update_task_geometry、count_reusable_tiles、import_tiles_from_source、get_stored_tile - Windows 静默更新:使用 NSIS passive 模式,更新过程仅显示进度条无需点击,安装完成后自动重启
- macOS / Linux 在应用内自动替换:plugin-updater 解压
.app.tar.gz/.AppImage.tar.gz直接覆盖原可执行文件 - 更新进度事件:UI 显示下载已传输字节 / 总大小,回滚到内置百分比模型
修复
- 托盘构建失败导致启动崩溃:缺图标时改为日志告警并跳过托盘创建,不阻断主窗口
- 下载信号量错误处理:
.unwrap()→.expect()并加注释;mutex 中毒时优雅恢复(PoisonError::into_inner),避免链式 panic 让导出任务半成品状态卡死
破坏性变更
commands/updater.rs整个移除:旧的check_for_update/download_and_install_update/open_release_urlTauri 命令不再存在latest.jsonschema 双写:本版本同时输出旧 schema(assets.{windows,macos,linux})和新 schema(version/notes/pub_date/platforms.{target}.{signature,url})。等所有用户从 v0.4.8 升上来后,下一个 minor 版本可清理旧assets字段- 必须配置签名密钥:fork 本仓库后,必须按 README → 「Fork 后自建发布通道」生成自己的 minisign 密钥对,否则 CI 不会产出可用的更新
下载安装
| 平台 | 文件 | 说明 |
|---|---|---|
| Windows | *_x64-setup.exe |
NSIS 安装包,双击运行 |
| macOS(M 芯片) | *_aarch64.dmg |
Apple Silicon |
| macOS(Intel) | *_x64.dmg |
Intel x86_64 |
| Linux | *.AppImage |
免安装,chmod +x 后直接运行 |
| Linux | *_amd64.deb |
Debian / Ubuntu |
macOS 用户:首次打开如遇 Gatekeeper 拦截,请在「系统设置 → 隐私与安全性」中允许运行,或执行
xattr -d com.apple.quarantine <应用路径>解除隔离。