Skip to content

御图 v0.5.0

Choose a tag to compare

@github-actions github-actions released this 02 Jun 07:54

安全

  • 更新通道端到端签名:移除自实现 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_layers JSON;像素裁剪、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 复制可复用瓦片到当前任务,跳过网络下载
  • 后端命令: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_url Tauri 命令不再存在
  • latest.json schema 双写:本版本同时输出旧 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 <应用路径> 解除隔离。