news 2026/11/6 3:33:22

如何用 Python 驱动 RustGIS:rustgis 包、Jupyter 交互地图与 Colab 实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何用 Python 驱动 RustGIS:rustgis 包、Jupyter 交互地图与 Colab 实战

【免费下载链接】RustGIS

A fast, free and open-source GIS in pure Rust.

项目地址:https://gitcode.com/gh_mirrors/ru/RustGIS
点击查看免费下载

RustGIS 是一款用纯 Rust 编写的高性能、免费开源 GIS 系统,而它的官方 Python 绑定rustgis包可以把整个 RustGIS 引擎直接装进 Python 进程:无需安装桌面应用,也无需启动任何服务,就能在脚本和 Jupyter 里打开数据、运行 1000 多种地理处理工具、设置图层样式、渲染地图并保存项目。本文带你从pip install到 Jupyter 交互地图再到 Colab 免安装实战,完整走一遍 RustGIS 的 Python 玩法。

rustgis 包是什么:Rust 引擎直接跑进 Python 进程 🧠

rustgis包的核心是一个编译好的原生模块(基于 maturin 构建)。它的工作方式是**进程内、无头(headless)**的:

  • 引擎在你的 Python 进程里运行,数据不出机器;
  • 不依赖外部服务或数据库,pip install即可用;
  • 保存的.rgis项目可以被 RustGIS 桌面应用原样打开,双向无缝衔接。

支持Python 3.12+,预编译轮子覆盖 Windows(x64/arm64)、macOS(Intel 与 Apple Silicon)、Linux(x64/arm64,glibc 2.28+)。包内三大核心对象一览:

对象作用安装方式
Session内存中的一个 RustGIS 项目:图层、样式、布局、撤销历史pip install rustgis
MapJupyter 单元格里的完整 RustGIS 应用,与 Python 双向同步pip install "rustgis[jupyter]"
Layer活动地图中的一个图层句柄随Session/Map使用

源码入口可以看看:Session 与 Layer 定义、Jupyter 组件 Map。

一键安装 rustgis:pip 命令与可选扩展

最简安装只要一行:

pip install rustgis

按需添加「可选扩展(extras)」:

pip install "rustgis[geopandas]" # 支持 GeoDataFrame 进出 pip install "rustgis[jupyter]" # 启用 Jupyter 里的交互式应用 pip install "rustgis[qt]" # 在 PySide6/PyQt6 应用中嵌入地图

小提醒:geopandas扩展依赖pyogrio,目前还没有 Windows arm64 的轮子;如果只需要 Jupyter 能力,先装jupyter扩展即可。

5 分钟建立第一个会话:打开示例数据并出图

Session(sample=True)会直接打开内置的 World Atlas 示例项目,包含 Cities、Rivers、Lakes、Countries 四个图层。一个最小完整流程如下:

import rustgis s = rustgis.Session(sample=True) # 打开 World Atlas 示例 buffers = s.run_tool("buffer", input=s["Cities"], distance=100) s["Countries"].style("graduated", field="pop_est") s.zoom_to(buffers) s.to_png("map.png", width=1600, height=900) # 渲染并导出 PNG s.save("atlas.rgis") # 保存为桌面应用可直接打开的项目

几个值得记住的细节:

  • s.run_tool("buffer", ...)运行缓冲分析并返回新图层对象,可以继续链式调用样式方法;
  • style("graduated", field="pop_est")设置分级色彩符号化,另有"single"、"unique"、"proportional"等类型;
  • s.to_png()即使写了文件也会返回 PNG 字节,不传路径则只保留在内存中;
  • 在 Jupyter 里,把Session放在单元格最后一行,会直接把当前地图渲染成图片显示出来。

图层操作与 GeoDataFrame 数据互操作

Layer对象提供常用的图层属性与方法,取图层只需s["Cities"](名称不区分大小写):

cities = s["Cities"] cities.count, cities.type, cities.fields, cities.bounds # 要素数、类型、字段、范围 cities.select("pop_max > 10000000") # SQL where 子句选择要素 cities.filter("pop_max > 1000000") # 定义查询;传 None 清除 cities.visible = False # 隐藏图层 cities.rename("Towns") s.undo() # 撤销改名

与 Python 数据生态的互操作是rustgis的强项:

gdf = cities.to_geopandas(selected=True) # 只导出选中要素,EPSG:4326 big = s.add_geopandas(gdf, name="Big cities") # 把 GeoDataFrame 加回为图层 big.to_file("big-cities.gpkg") # 导出 GeoPackage(或 .geojson/.csv/.shp/.parquet 等)
  • to_geojson()返回 FeatureCollection 字典,to_geopandas()返回 EPSG:4326 的 GeoDataFrame;
  • add_data()支持应用能读的所有格式:GeoJSON、CSV、Shapefile、GeoPackage、GeoParquet、FlatGeobuf、KML/KMZ、GPX、GeoTIFF 等;
  • add_geojson()还能接受任何带__geo_interface__的对象(Shapely 几何、GeoSeries 都行)。

调用 1000+ 地理处理工具:run_tool 与命令清单

RustGIS 的每个操作都是一条带 id 的命令——与桌面版的功能区、命令行和 AI 助手用的是同一套 id。Python 里随时可以自省:

s.commands() # 所有命令及参数 s.tools() # 所有地理处理工具 s.describe("buffer")["params"] # 查看 buffer 工具参数 s.run("labels.field", layer="Cities", field="name") s.run("map.goToXY", {"lon": 114.1, "lat": 22.4, "scale": 2_000_000})

常用视图命令还有便捷方法:set_center(lon, lat, scale=...)、zoom_to(...)、set_basemap("paper")、add_tiles(...)添加网络瓦片底图。命令执行期间不占用 Python 全局解释器锁(GIL),其他线程可以继续工作,适合放进多线程流水线。

Jupyter 交互地图:rustgis.Map 双向同步实战 ✨

rustgis.Map是本文最亮眼的功能:它在 Jupyter 单元格里直接显示 RustGIS 应用本身(功能区、侧栏、地图),并基于 anywidget 实现 Python 与界面之间的双向同步:

m = rustgis.Map(sample=True) # 单元格下方出现完整的 RustGIS 应用 m

然后两边互相同步:

m.add_geojson("sites.geojson", name="Sites") # Python 添加 → 出现在应用里 m["Sites"].style("unique", field="name") m.set_center(110, 25, scale=30_000_000) m.info()["center"] # 你在应用里平移缩放 → Python 读得回来 m.run_in_app("ui.language", code="de") # 仅应用可用的 ui.* 命令
  • Map拥有Session的全部方法与能力(run、run_tool、m["Sites"]、to_png……),建议通过m而非m.session做修改,这样变更才会同步到应用;
  • 应用运行在浏览器里,需要 WebGPU 或 WebGL2,且 Notebook 需联网;
  • 数据通过浏览器postMessage传输,不出你的机器,不经过任何服务器。

官方示例笔记本完整演示了这套流程,可直接参考:getting-started.ipynb。

Colab 免安装实战:零配置跑通示例笔记本

不想搭本地环境?RustGIS 的 Python 示例支持在 Google Colab 里直接运行:

  1. 打开仓库文档页 docs/python.md 或 apps/rustgis-python/README.md,页面顶部有Open in Colab徽章,点击即可在 Colab 中打开示例笔记本;
  2. 第一个单元格就是%pip install -q "rustgis[jupyter,geopandas]",后续单元格依次演示:打开示例会话、跑 buffer 工具、分级色彩渲染、读取 GeoDataFrame、嵌入交互式Map、保存.rgis项目并导出 PNG;
  3. 全程无需 clone 仓库、无需本地编译,几分钟内即可在云端体验完整工作流。

提示:Colab 运行的是示例数据流程;如果你有私有 GeoPackage 或 Shapefile,可在笔记本里把数据上传到当前目录后,用s.add_data()加载,体验与本地完全一致。

保存项目与导出成果:无缝衔接桌面版

Python 里做的一切都能沉淀为标准成果物:

s.save("atlas.rgis") # 桌面应用、Web 应用原样打开 s.to_png("atlas.png", width=1600, height=900) # 渲染当前视图 cities.to_file("cities.geojson") # 按扩展名选择导出格式
  • .rgis项目里连「在应用里做的编辑」都会被一起保存;
  • 已有项目可以直接用Session(project="atlas.rgis")或s.open(...)打开续做;
  • 想复用桌面应用保存的数据库连接?Session(use_saved_secrets=True)会按需从系统钥匙串读取凭据(默认关闭,脚本和 CI 保持零侵入)。

上手路径总结

场景推荐做法
自动化脚本、CISession+run_tool+to_png/save
数据分析to_geopandas()出、add_geopandas()进
教学、演示、交互探索rustgis.Map+ Jupyter
零基础快速体验Colab 一键运行官方示例笔记本
桌面工具集成rustgis.qt.MapWidget嵌入 PySide6/PyQt6

延伸阅读:Python 官方指南、包 README、Py 包测试用例(阅读测试是理解 API 最快的方式)。

现在,pip install rustgis然后打开一个 Notebook——一个完整的 GIS 工作台就在你的 Python 环境里了。🗺️

【免费下载链接】RustGIS

A fast, free and open-source GIS in pure Rust.

项目地址:https://gitcode.com/gh_mirrors/ru/RustGIS
点击查看免费下载
上一篇:FP8 量化跑 MOSS 图像推理:低精度路线上的实战教训
下一篇:Qwopus3.8-27B-Flash-mxfp4-MLX 快速上手教程:5分钟部署你的本地多模态AI助手

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/11/6 3:33:13

fluentui-emoji 的 MIT 许可商用指南:保留版权声明即可安心使用

fluentui-emoji 的 MIT 许可商用指南:保留版权声明即可安心使用 【免费下载链接】fluentui-emoji A collection of familiar, friendly, and modern emoji from Microsoft 项目地址: https://gitcode.com/gh_mirrors/fl/fluentui-emoji 导语 把这套 Fluent …

作者头像 李华
网站建设 2026/11/6 3:33:05

如何用python编程向别人传输信息

接下来呢, 我们必须要进行一个把绑定这个操作, 然后把它绑定到一个比较特定的地址上面去,还要加上那个端口的编号, 目的就是要能够监听来自外界的连接的请求了。server_address (localhost, 10000)print(Starting up on {} port {}.format(*server_address))sock.b…

作者头像 李华
网站建设 2026/11/6 3:14:05

Java中关于HashMap常见问题

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/11/6 3:13:52

41:数字统计

/*** 题目名称&#xff1a;数1的个数 <p>* 题目来源&#xff1a;http://noi.openjudge.cn/ch0105/41/ <p>* 程序功能&#xff1a;输出指定范围整数中数字2出现的次数** author 潘磊&#xff0c;just_panleijust.edu.cn* version 1.0*/import java.util.Scanner;pub…

作者头像 李华