做 GIS 项目时经常需要底图数据,但市面上的地图下载器要么收费,要么功能残缺,要么依赖一堆运行环境。于是我用 Rust + Tauri 2.0 从零撸了一个,开源免费,安装包仅 ~10MB。
它能做什么?
在地图上框选范围或选择行政区划(省/市/区/全国),选择图源和缩放级别,一键下载并拼接为带地理坐标的 GeoTIFF,可直接在 QGIS / ArcGIS 中打开使用。
核心功能
- 10+ 内置图源:OSM、ArcGIS 卫星/地形、天地图、Google Maps、高德地图等,支持自定义 XYZ 图源
- 行政区划选择:省/市/区三级联动 + 全国范围,自动加载行政边界并按多边形裁剪
- 多任务并行下载:独立进度、暂停/继续、断点续传
- GeoTIFF 输出:自动写入 EPSG:3857 投影标签,支持 LZW 压缩,大范围自动切换 BigTIFF + 流式写入
- Mercator 投影裁剪:多边形裁剪使用 Web Mercator 非线性映射,边界精准对齐
技术栈
- 后端: Rust + Tauri 2.0,reqwest 异步下载,tokio 并发调度
- 前端: 原生 HTML/CSS/JS + Leaflet 地图
- 图像处理: image crate 拼接 + 自研流式 BigTIFF 写入器
- 下载策略: 瓦片乱序防限速、多轮重试递减并发、单瓦片超时隔离
为什么用 Rust + Tauri?
前身是 Python + FastAPI + PyWebView 方案,打包后 200MB+,启动慢,内存占用高。重构为 Tauri 后:
| Python 版 | Rust/Tauri 版 | |
|---|---|---|
| 安装包 | ~200MB | ~10MB |
| 内存占用 | ~300MB | ~50MB |
| 下载速度 | 受 GIL 限制 | tokio 真异步 |
| 大图导出 | 内存爆炸 | 流式写入 |
开源地址
GitHub: github.com/gaopengbin/…
欢迎 Star / Issue / PR,也欢迎提需求。