这是什么
RustGIS(仓库 opengeos/RustGIS)是一个用纯 Rust 从零重写的桌面 GIS,定位是「快速、免费、开源的制图与地理空间数据分析工具」。它不是给 QGIS 套个壳,也不是每个功能调一次 Python;而是一个原生单文件程序,自带 GPU 绘制,Windows / macOS / Linux 上同一套代码,同时还能编译成 WebAssembly 直接在浏览器里跑。
一句话概括它的野心:把「安装一个 GIS」这件事变成「打开一个程序」。没有运行时依赖、没有后台服务器、没有 Python 环境地狱。项目 2026 年 10 月 10 日建仓,几周内冲上 1.2k Star,Apache-2.0 协议,官网 rustgis.app,在线版在 web.rustgis.app。
它解决什么问题
传统桌面 GIS(QGIS、ArcGIS)功能强大,但代价是:几百 MB 到几个 GB 的安装包、庞大的插件生态带来的兼容性负担、脚本能力与图形界面割裂(想批量处理还得另外学 PyQGIS 或 arcpy)。而各类在线地图工具虽然轻,数据却默认上传到别人的服务器,隐私和离线场景都很尴尬。
RustGIS 想同时拿掉这两头的痛点:
- 体量与启动:一个原生程序,GPU 绘制,无运行时、无服务器,启动就是秒开。
- 跨平台一致:桌面三平台 + WebAssembly 浏览器版,是同一份引擎代码,而不是三套实现。
- 本地优先:文件读写都在本机,除非你主动请求,不会上传任何东西;联网只发生在你选择的操作里(底图、插件、AI 模型)。
- 一切皆命令:界面上每一个按钮背后都是一个带 id 的命令,可以脚本化、可在笔记本里链式调用、也可以让 AI 助手替你执行。
- 可扩展:内置 1000+ 个 GeoLibre 与 Whitebox 工具(地形、水文、LiDAR、遥感),外加沙箱化的 WebAssembly 插件,可新增命令、工具和功能区标签页。
核心特性一览
| 能力 | 说明 |
|---|---|
| 矢量数据 | GeoJSON、CSV、Shapefile;GeoPackage、GeoParquet、FlatGeobuf 提供器;支持 SQL WHERE 子句筛选 |
| 栅格数据 | 任意像素类型的 GeoTIFF 与 COG,实时重投影,拉伸 / RGB / 分类 / 山体阴影着色 |
| 制图 | 图层、符号系统、标注、相机、底图;属性表与地图选中状态双向同步 |
| 投影与地球 | 3D 地球、Equal Earth、Robinson、极地预设,或任意 EPSG 代码 |
| 分析 | 工具画廊、运行历史、引导式工作流、ModelBuilder,1000+ 地理处理工具 |
| 瓦片 | XYZ/TMS/WMS、Mapbox 矢量瓦片、MapLibre 样式,内置瓦片缓存 |
| AI 助手 | 聊天式智能体,通过命令操作地图,每一步改动都可撤销 |
| 接口形态 | 桌面应用、浏览器应用、命令行、Python 包、MCP 服务器 |
怎么做到的:分层架构
RustGIS 的代码组织成一个严格分层的 crate 结构:每一层只依赖它下面的层,越往上抽象越高。这套「单向依赖」是它能同时支撑桌面、浏览器、CLI 和 Python 的关键——上层的界面可以换,底层的引擎不动。
| 层 | Crate | 职责 |
|---|---|---|
| L0 | rustgis-geom | 坐标、范围、Web 墨卡托、测地距离/面积、比例尺 |
| L1 | rustgis-data | 要素与强类型属性;矢量与栅格格式读写、坐标系 |
| L2 | rustgis-map / rustgis-analysis | 图层、符号、标注、相机、底图;基于 geo 的地理处理 |
| L2 | rustgis-tiles | 网络地图瓦片:XYZ/TMS/WMS、MVT、MapLibre 样式、瓦片缓存 |
| L3 | rustgis-render | 基于 tiny-skia 的渲染器、标注排布、PNG 导出、字体 |
| L3 | rustgis-plugins | 沙箱化 WebAssembly 插件与插件注册表 |
| L3 | rustgis-geolibre | GeoLibre 工具套件,作为地理处理工具接入 |
| L4 | rustgis-engine | 会话、撤销、命令注册表、示例工程 |
| L5 | rustgis-assistant | AI 助手:通过命令操作地图的聊天智能体 |
| L6 | rustgis-ui-egui | 基于 egui 的功能区前端(可替换) |
| apps | rustgis / rustgis-cli / rustgis-web | 桌面、命令行、浏览器(WebAssembly) |
几个值得注意的技术决策:
- 渲染用 tiny-skia:纯 Rust 的 2D 渲染库,不依赖系统 Cairo/Skia,这也是它能干净地跑在各平台和 WASM 里的原因之一。
- 界面用 egui:即时模式 GUI,且前端被刻意做成「可替换」的一层,说明作者为将来换 UI 框架留了余地。
- 命令注册表是中枢:引擎里维护一张「命令 id → 行为」的表,界面、CLI、Python、AI 助手全部走同一张表,因此任何界面上的操作天生就能被脚本化和自动化。
- 插件跑在 WASM 沙箱:第三方扩展以 WebAssembly 形式加载,天然隔离,不会因为一个插件拖垮整个应用。
怎么用
1. 下载即用的桌面版
到 Releases 下载对应平台的安装包,装上打开即可,自带 World Atlas 示例工程。只想试用可以直接开 web.rustgis.app,零安装。
2. 从源码构建(需要 Rust 1.90+)
cargo run --release -p rustgis # 打开桌面应用 + World Atlas 示例
cargo run --release -p rustgis -- data.geojson # 直接打开数据或 .rgis 工程文件
3. 命令行:功能区的每个动作都是命令
rustgis-cli commands # 列出所有命令 id 与参数
rustgis-cli render countries.geojson map.png --basemap ocean
rustgis-cli run --sample \
--cmd 'gp.run={"tool":"countPoints","params":{"polygons":"Countries","points":"Cities"}}' \
--cmd 'layer.symbology={"layer":"Countries_Summarize","type":"graduated","field":"point_count"}' \
--cmd 'share.exportMap={"path":"out.png","dpi":192}' --save atlas.rgis
rustgis-cli ask --sample "Which 5 countries have the largest GDP?"
4. Python:同一个引擎,进程内调用
pip install rustgis
import rustgis
s = rustgis.Session(sample=True)
s.run("gp.run", tool="buffer", params={"input": "Cities", "distance": 100})
s.to_png("map.png")
gdf = s.layer("Cities_Buffer").to_geopandas()
注意这里不是起一个子进程再传文件,而是把同一个 Rust 引擎在进程内绑定给 Python,所以能直接拿 GeoDataFrame、直接在 Jupyter 里渲染地图。官方还提供了 Colab 上手笔记本。
5. 作为 MCP 服务器接进 AI 编码助手
claude mcp add rustgis -- rustgis-cli mcp --sample
这样 Claude Code 等支持 MCP 的助手就能直接驱动 RustGIS 做地理处理,把「自然语言 → GIS 操作」接进你的工作流。
适合谁 / 值不值得关注
如果你需要经常做矢量/栅格处理,又受不了重量级 GIS 的启动和安装成本;或者你想要一个能脚本化、能被 AI 驱动、还能跑在浏览器里的地理处理引擎——RustGIS 值得放进收藏夹。它的定位不是「干掉 QGIS」,而是把 GIS 的引擎内核用现代语言重做一遍,然后以桌面、CLI、Python、MCP 多种形态暴露出来。
当然要提醒:这是一个刚起步、迭代很快的项目,1.2k Star 的热度也意味着功能还在快速补齐,生产环境下建议先拿它做探索性分析和批处理,关键工作流仍留一份成熟工具兜底。
项目地址:github.com/opengeos/RustGIS | 官网:rustgis.app | 在线版:web.rustgis.app | 插件注册表:plugins.rustgis.app
















cqlbgzs@163.com 1年前0
d好879445037@qq.com 2年前0
购买了 无法下载Alexcc 3年前0
强大Alexcc 3年前0
看不了教程Alexcc 3年前0
雷刺下载Alexcc 3年前0
下载Alexcc 3年前0
下载dsa456159 3年前0
下载