JupyterGIS 0.16:地图的图形语法与协作式 Story Maps
摘要
JupyterGIS 0.16 引入了增强的地理空间可视化功能,包括协作式 Story Maps、对 openEO 等新格式的支持,以及与 Python 科学生态系统更紧密的集成。
暂无内容
查看缓存全文
缓存时间: 2026/08/30 12:43
# JupyterGIS 0.16:全新的可视化能力、协作式故事地图等
来源:https://blog.jupyter.org/jupytergis-0-16-new-visualization-capabilities-collaborative-story-maps-and-more-03e6b78bacc0?gi=a031da6fa29c
Martin Renou (https://medium.com/@martinRenou?source=post_page---byline--03e6b78bacc0---------------------------------------)
> 在 Notebook.link 中以实时故事地图形式阅读本文:https://notebook.link/@martinRenou/jupytergis-announcement
今年早些时候,我们在 JupyterGIS (https://blog.jupyter.org/expanding-geospatial-workflows-in-jupytergis-stac-browsing-and-story-maps-7fb98eece82e) 中引入了 STAC 浏览和故事地图功能,让用户无需离开 Jupyter 即可更轻松地发现地理空间数据集并传达分析结果。
JupyterGIS 0.16 (https://github.com/geojupyter/jupytergis/releases/tag/v0.16.0) 沿着这一方向继续发展。本次发布新增了对多种地理空间格式的支持,加强了与 Python 科学生态系统的集成,重新设计了故事地图编辑器,并提供了更富表现力的地理数据样式化方法。
## 故事地图焕然一新!
JupyterGIS 中的故事地图允许您围绕地图构建可滚动的演示文稿。一个故事地图由一系列片段组成,每个片段可以结合 Markdown 内容和地图视图,从而在读者滚动页面时引导他们浏览一个地理叙事。
每个片段可以定义自己的地图状态,包括当前地图位置、可见图层和图层样式。这意味着随着读者浏览故事,地图可以动态变化:图层可以出现或消失,视图可以移动到新的位置,符号系统也可以改变以突出数据的不同方面。
### 本次发布对故事地图进行了重大更新。
> 在 Notebook.link 中以实时故事地图形式阅读本文:https://notebook.link/@martinRenou/jupytergis-announcement
按 Enter 键或点击查看完整尺寸的图片
与本次发布公告相关联的故事地图。其中包含文本、图像以及具有关联图层状态的地图视图。
## 更佳的故事地图编辑体验
我们还对故事地图的编辑体验进行了大幅改进。
编辑器围绕 Jupyter 的**实时协作基础设施进行了重新设计,允许多人同时编辑同一个故事地图**。更改会立即同步给所有人,从而大大方便了团队协作准备演示文稿、报告或教育材料。
按 Enter 键或点击查看完整尺寸的图片
协作编辑故事地图的 Markdown 内容。
编辑器现在能让你在创作过程中更清晰地预览最终故事的呈现效果。Markdown 部分可以直接在编辑器中预览,新的故事地图预览功能让你无需离开编辑工作流程即可查看完整的演示效果。这使得在关注最终结果的同时,编写、排列和润色故事变得更加容易。我们还引入了一种更适合长篇内容的新版式。除了引导式的地理叙事外,故事地图现在还可用于创建结合文本、地图、图像和其他交互内容的更丰富的文章。
按 Enter 键或点击查看完整尺寸的图片
新版故事地图编辑器:设置故事片段视口、预览 Markdown、为故事片段设置图层属性。
## openEO 图层
越来越多的地理空间工作流依赖远程处理,而非在本地下载数据集。openEO 提供了一个通用 API,用于描述这些作为处理图并由后端执行的处理管道。
JupyterGIS 现在可以将 **openEO** 处理图直接显示为地图图层。无需在可视化之前导出中间结果,您可以连接一个 openEO 后端,并直接在地图中检查处理管道的输出。
可视化是基于分块且惰性加载的:JupyterGIS 仅请求当前地图视图和缩放级别所需的数据。这使得交互式探索大型遥感工作流成为可能,无需在本地实例化完整结果。
JupyterGIS 可以使用任何支持分块的 openEO 服务器,例如 [titiler-openeo](https://sentinel-hub.github.io/titiler-openeo)。
```python
import openeo
from jupytergis import GISDocument
from openeo.processes import process
connection = openeo.connect(SERVER_URL)
connection.authenticate_basic(username=BASIC_AUTH, password=BASIC_AUTH)
cube = connection.load_collection(
"sentinel-2-global-mosaics",
bands=["B03", "B08"],
temporal_extent=["2022-04-15", "2022-12-31"],
)
cube = cube.reduce_dimension(
dimension="t",
reducer="first",
)
cube = cube / 10000.0
# NDWI = (GREEN - NIR) / (GREEN + NIR)
ndwi = cube.ndvi(nir="0", red="1")
ndwi_vis = (ndwi + 1) / 2
ndwi_png = ndwi_vis.linear_scale_range(
input_min=0,
input_max=1,
output_min=0,
output_max=255,
)
result = ndwi_png.save_result(format="PNG")
doc = GISDocument(latitude=40.75, longitude=-73.95, zoom=12)
await doc.ready()
doc.add_openeo_tile_layer(result)
doc
```
按 Enter 键或点击查看完整尺寸的图片
使用 OpenEO 和 JupyterGIS 的 Python API 定义计算 NDWI 的处理图。随后在用户平移/缩放地图时,按图块进行惰性评估。
除了通过 Python 脚本 API 定义 openEO 处理图外,JupyterGIS 还提供了一个高级的 openEO 处理图编辑器,允许您:
- 连接到 openEO 瓦片服务器
- 使用方框和箭头进行图形化定义
- 通过拖放界面加载数据集合和定义过程
- 直接编辑 JSON 内容
按 Enter 键或点击查看完整尺寸的图片
在 JupyterGIS 前端编辑 openEO 处理图。
openEO 的另一个有趣之处在于处理图具有定义明确、声明式的 JSON 表示。正因为这种结构化格式,**它们成为 LLM 辅助工作流的天然目标**。用户可以用自然语言描述他们想要的分析,让 LLM 生成或优化相应的处理图(例如使用 jupyterlite-ai),并立即在 JupyterGIS 中可视化结果。结合惰性的、基于瓦片的渲染,这使得快速迭代处理管道成为可能,无需等待完整数据集的导出或下载。
## 使用 jupyter-tiler 对 Xarray 数据集进行惰性可视化
JupyterGIS 现已集成新的 [jupyter-tiler](https://jupyter-tiler.readthedocs.io/) 包,使得从 Python 可视化 Xarray 数据集变得非常简单。
数据集可以来自任何地方:它们可能已经存在于您的笔记本中,也可以使用 stackstac 按需从 STAC 目录加载。一旦您拥有一个 Xarray 对象,JupyterGIS 即可在地图中显示它,而无需导出为其他格式。
渲染以惰性方式发生,仅生成当前视图所需的瓦片。这使得探索远大于内存的数据集成为可能,同时保持导航的响应性。
## 将 Martin Renou 的故事收入您的收件箱
免费加入 Medium 以获取来自这位作者的更新。
记住我以便更快登录
结果是从数据加载、分析到可视化,所有工作流都在同一个笔记本中进行,更加流畅。
```python
await doc.add_data_array_layer(
name="NDSI Layer",
data_array=ndsi,
colormap_name="viridis",
colormap_range=(-1, 1),
)
```
在 JupyterGIS 中可视化 Xarray 数据集。
此功能需要安装可选依赖项 jupyter-tiler。
```bash
pip install jupyter-tiler
```
## 更富表现力的符号化模型
地理数据的样式化通常需要组合多种视觉属性以有效传达模式。
JupyterGIS 0.16 引入了**受图形语法启发的新符号化模型。** 该模型不再依赖于一组固定的样式选项,而是可以以更灵活和可组合的方式定义颜色、大小和不透明度等视觉属性。
这使得从简单的专题地图到更高级的可视化构建变得更加容易,同时保持样式定义的一致性和可复现性。
按 Enter 键或点击查看完整尺寸的图片
*符号化示例:对圆形颜色应用 Viridis 色图,对圆形半径应用线性比例尺,并设置固定的描边颜色。*
## GeoZarr 和 GeoPackage 支持
本次发布还扩展了 JupyterGIS 可直接打开的格式范围。
对 GeoZarr 的支持使得处理云原生多维地理空间数据集成为可能,而对 GeoPackage 的支持则改善了与现有 GIS 软件和常见数据交换工作流的互操作性。
## 新的协作编辑功能
JupyterGIS 0.16 还将协作编辑功能带到了矢量图层。在处理共享的 JupyterGIS 文档时,多个用户现在可以同时编辑相同的矢量数据。
要素可以被协作创建、移动和编辑,用户之间的更改会实时同步。这使得在数字化要素、为地图添加注释或细化数据集等任务上进行协作成为可能,无需交换文件或手动合并更改。
结合协作式故事地图编辑器,协作成为 JupyterGIS 更不可或缺的一部分:用户可以在数据本身上进行协作,然后使用同一个共享文档来探索和传达他们的结果。
## 新的 R API
JupyterGIS 0.16 还引入了 R 客户端,通过新的 `r-jupytergis` 包将 JupyterGIS 带给了 R 用户。R 客户端提供了从 R 笔记本与 JupyterGIS 小部件交互的绑定,使用与 Python 客户端相同的 JavaScript 前端。
主要接口是 `GISDocument` 小部件,可用于直接在 R 中创建和操作 JupyterGIS 文档。这使得在 R 中构建地理空间工作流的同时,使用与 Python 用户相同的交互式地图界面成为可能。
R 客户端也使用与 Python 客户端相同的底层协作基础设施,包括 Yrs CRDT 库。这意味着 R 用户可以参与相同的协作式 JupyterGIS 工作流,而不是在单独的环境中工作。
```r
doc <- GISDocument$new("france_hiking.jGIS")
layer <- doc$add_raster_layer(
url = "https://mt1.google.com/vt/lyrs=y&x={x}&y={y}&z={z}",
name = "Google Satellite",
attribution = "Google",
opacity = 0.6
)
```
## 错误修复和性能改进
与往常一样,本次发布也包含项目各处许多小的改进。
我们修复了一些错误,改进了应用程序多个部分的性能,并持续完善用户界面和 Python API。
JupyterGIS 持续作为一个协作式 GIS 环境不断演进,自然融入 Jupyter 生态系统。无论您的工作流始于笔记本、STAC 目录、openEO 后端还是本地数据集,目标始终如一:让您无需切换工具即可轻松地在分析、可视化和传达之间转换。
## 致谢
JupyterGIS 的这项工作由 [QuantStack](https://quantstack.net/) 完成,得到了 [欧洲航天局](https://www.esa.int/)(ESA)对故事地图开发、R API、openEO 图层支持和协作标注的资金支持。此外,QuantStack 还获得了 [法国国家空间研究中心](https://cnes.fr/)(CNES)对 Xarray 数据集惰性可视化的资助。
## 本次发布的贡献者
按 [贡献数量](https://github-activity.readthedocs.io/en/latest/use/#how-does-this-tool-define-contributions-in-the-reports) 排序:
**Arjun Verma** (https://github.com/arjxn-py) 是 QuantStack 的一名开发者。他负责服务器端地理处理基础设施以及 JupyterGIS 前端的 openEO 编辑器工作。
**Martin Renou** (https://github.com/martinRenou) 是 QuantStack 的技术总监,也是 JupyterGIS 的维护者。对于本次发布,Martin 协调并指导了大部分开发工作,并致力于 openEO 图层的集成。
**Gregory Mooney** (https://github.com/gjmooney) 是 QuantStack 的一名开发者,也是 JupyterGIS 的长期贡献者。他主导了新版故事地图编辑器及其协作编辑功能的大部分工作。
**Matthias Meschede** (https://github.com/MMesch) 是 QuantStack 的首席运营官。他引入了受图形语法启发的新符号化模型,为地理数据样式化带来了更具表现力和组合性的方法。
**Matt Fisher** (https://github.com/mfisher87) 是 [GeoJupyter](https://github.com/geojupyter) 的社区经理。他参与了许多关于发布的讨论,并帮助确定了项目多个设计决策的方向。
**Nakul Verma** (https://github.com/nakul-py) 是 JupyterGIS 的开源贡献者。他在整个发布过程中贡献了众多错误修复和改进,并在新的符号化系统中引入了 Vega 表达式的支持。
**Antoine Prouvost** (https://github.com/AntoinePrv) 是 QuantStack 的一名开发者。他主导了 JupyterGIS R API 的初始工作,构建了其最初的框架并为 `r-jupytergis` 包奠定了基础。
**Sandrine Pataut** (https://github.com/SandrineP) 是 QuantStack 的一名开发者。她致力于将 JupyterGIS 的许多功能引入 R API,帮助新客户端对 R 用户更加完整和实用。
我们感谢所有为此版本贡献了代码、评审、想法、讨论和反馈的人。JupyterGIS 继续受益于日益多元化的贡献者社区,我们期待看到未来的发展!
相似文章
opengeos/GeoLibre
GeoLibre 是一个免费、开源、云原生的GIS平台,用于可视化、探索和分析地理空间数据,可在浏览器、桌面端、移动端和Jupyter笔记本中运行。
@giswqs: GeoLibre v2.2 来了!GeoLibre 是一个免费开源、轻量级、云原生的 GIS 平台,用于可视化、探索…
GeoLibre v2.2 是一个免费开源的 GIS 平台更新,增加了地形感知的 3D 测量、延时插件、高级符号化以及许多其他功能。
GeoJSON 地图查看器
一款基于Web的工具,用于在交互式OpenStreetMap上查看和自定义GeoJSON数据,由AI辅助开发,适用于地理边界的可视化。
GeoLibre 1.0
GeoLibre 1.0 是一个轻量级、云原生的GIS平台,用于可视化、探索和分析地理空间数据,采用现代Web技术构建,并可在桌面和Web环境中运行。
@clcoding: 使用Python创建交互式地图 https://amzn.to/4wmCdNW
推广电子书《Python for GIS & Spatial Intelligence》,该书教授如何使用Python进行交互式地图制作和空间分析。