Skip to content
HN On Hacker News ↗

JupyterGIS 0.16: New visualization capabilities, collaborative Story Maps, and more

▲ 113 points 10 comments by arjxn-py 2w ago HN discussion ↗

Pangram verdict · v3.3

We believe that this text is a mix of AI and human-written content.

35 %

AI likelihood · overall

Mixed
64% human-written 36% AI-generated
SEGMENTS · HUMAN 5 of 12
SEGMENTS · AI 3 of 12
WORD COUNT 1,297
PEAK AI % 92% · §6
Analyzed
Aug 30
backend: pangram/v3.3
Segments scanned
12 windows
avg 108 words each
Distribution
64 / 36%
human / AI fraction
Verdict
Mixed
Pangram v3.3

Article text · 1,297 words · 12 segments analyzed

Human AI-generated
§1 Human · 20%

8 min read5 days ago--Read this article in Notebook.link, as a live story-map! https://notebook.link/@martinRenou/jupytergis-announcementEarlier this year, we introduced STAC browsing and Story Maps in JupyterGIS, making it easier to discover geospatial datasets and communicate results without leaving Jupyter.JupyterGIS 0.16 continues in the same direction. This release adds support for new geospatial formats, tighter integration with the scientific Python ecosystem, a redesigned Story Map editor, and a more expressive way to style geographic data.Story Maps are getting a new look!Story Maps in JupyterGIS let you build a scrollable presentation around your map.

§2 Mixed · 68%

A Story Map is made up of a sequence of segments that can combine Markdown content with map views, so you can guide the reader through a geographic story as they scroll.Each segment can define its own map state, including the current map location, visible layers, and layer styling. This means that the map can change as the reader moves through the story: layers can appear or disappear, the view can move to a new location, and symbology can change to highlight different aspects of the data.Story Maps have received a significant update in this release.Read this article in Notebook.link, as a live story-map!

§3 Human · 23%

https://notebook.link/@martinRenou/jupytergis-announcementPress enter or click to view image in full sizeThe Story-map associated to this release annoucement. It contains Text, images, and map views with associated layer states.A better Story Maps editing experienceWe’ve also made substantial improvements to the Story Map editing experience.The editor has been redesigned around Jupyter’s real-time collaboration infrastructure, allowing multiple people to edit the same Story Map simultaneously.

§4 AI · 70%

Changes appear immediately for everyone, making it much easier to prepare presentations, reports, or educational material as a team.Press enter or click to view image in full sizeCollaboratively edit the Story Map markdown.The editor now gives you a much better sense of what the final story will look like while you are working on it. Markdown sections can be previewed directly in the editor, and a new Story Map preview makes it possible to see the complete presentation without leaving the editing workflow. This makes it easier to write, arrange, and refine a story while keeping an eye on the final result.

§5 Human · 25%

We’ve also introduced a new layout that is better suited for long-form content. In addition to guided geographic narratives, Story Maps can now be used to create richer articles combining text, maps, images, and other interactive content.Press enter or click to view image in full sizeNew Story Map editor: Set story segment viewport, preview markdown, set layers properties for the story segment.OpenEO layersMore and more geospatial workflows rely on remote processing instead of downloading datasets locally. openEO provides a common API to describe these processing pipelines as process graphs that are executed by a backend.JupyterGIS can now display openEO process graphs directly as map layers.

§6 AI · 92%

Instead of exporting intermediate results before visualizing them, you can connect an openEO backend and inspect the output of your processing pipeline directly in the map.The visualization is tile-based and lazy: JupyterGIS only requests the data needed for the current map view and zoom level.

§7 Human · 4%

This makes it possible to explore large remote sensing workflows interactively, without materializing the full result locally.JupyterGIS can make use of any openEO server that supports tiling, such as titiler-openeoimport openeofrom jupytergis import GISDocumentfrom openeo.processes import processconnection = 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) / 2ndwi_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)docPress enter or click to view image in full sizeDefine a process graph to compute a NDWI, using the Python API of OpenEO and JupyterGIS. It is then lazily evaluated on a per-tile basis while the user pans/zooms on the map.In addition to defining openEO process graphs from the scripting Python API, JupyterGIS provides an advanced openEO process graph editor, allowing you to:connect to an openEO tile serverdefine the graph graphically, with boxes and arrowsload data collections and define processes with a drag-and-drop UIdirectly edit the JSON contentPress enter or click to view image in full sizeEditing an openEO process graph from the JupyterGIS front-endAnother interesting aspect of openEO is that process graphs have a well-defined, declarative JSON representation.

§8 Mixed · 67%

Because of this structured format, they are a natural target for LLM-assisted workflows. Users can describe the analysis they want in natural language, have an LLM generate or refine the corresponding process graph (e.g. using jupyterlite-ai), and immediately visualize the result in JupyterGIS. Combined with the lazy, tile-based rendering, this makes it possible to quickly iterate on processing pipelines without waiting for complete datasets to be exported or downloaded.Lazy visualization of Xarray datasets with jupyter-tilerJupyterGIS now integrates with the new jupyter-tiler package, making it straightforward to visualize Xarray datasets from Python.Datasets can come from anywhere: they may already exist in your notebook, or they can be loaded on demand from a STAC catalog using stackstac. Once you have an Xarray object, JupyterGIS can display it in the map without requiring an export to another format.Rendering happens lazily, generating only the tiles needed for the current view.

§9 Mixed · 31%

This makes it possible to explore datasets that are much larger than memory while keeping navigation responsive.Get Martin Renou’s stories in your inboxJoin Medium for free to get updates from this writer.Remember me for faster sign inThe result is a smoother workflow from data loading, to analysis, to visualization, all within the same notebook.await doc.add_data_array_layer( name="NDSI Layer", data_array=ndsi, colormap_name="viridis", colormap_range=(-1, 1),)Visualizing an Xarray dataset in JupyterGIS.This feature requires the optional dependency jupyter-tiler to be installed.pip install jupyter-tilerA more expressive symbology modelStyling geographic data often requires combining multiple visual properties to communicate patterns effectively.JupyterGIS 0.16 introduces a new symbology model inspired by the Grammar of Graphics.

§10 Mixed · 55%

Instead of relying on a fixed set of styling options, visual properties such as color, size, and opacity can be defined in a more flexible and composable way.This makes it easier to build everything from simple thematic maps to more advanced visualizations while keeping styling definitions consistent and reproducible.Press enter or click to view image in full sizeA symbology example: apply a Viridis color map to the circle colors, a linear scale to the radius of circles, and a fixed stroke color.GeoZarr and GeoPackage supportThis release also expands the range of formats that JupyterGIS can open directly.Support for GeoZarr makes it possible to work with cloud-native multidimensional geospatial datasets, while GeoPackage support improves interoperability with existing GIS software and common data exchange workflows.New Collaborative Editing CapabilitiesJupyterGIS 0.16 also brings collaborative editing to vector layers. When working on a shared JupyterGIS document, multiple users can now edit the same vector data at the same time.Features can be created, moved, and edited collaboratively, with changes synchronized in real time between users. This makes it possible to work together on tasks such as digitizing features, annotating a map, or refining a dataset without having to exchange files or manually merge changes.Combined with the collaborative Story Map editor, this makes collaboration a more integral part of JupyterGIS: users can work together on the data itself, and then use the same shared document to explore and communicate their results.A new R APIJupyterGIS 0.16 also introduces an R client, bringing JupyterGIS to R users through the new r-jupytergis package.

§11 Human · 23%

The R client provides bindings for interacting with JupyterGIS widgets from an R notebook, using the same JavaScript front-end as the Python client.The main interface is the GISDocument widget, which can be used to create and manipulate JupyterGIS documents directly from R.

§12 AI · 70%

This makes it possible to build geospatial workflows in R while using the same interactive map interface available to Python users.The R client also uses the same underlying collaborative infrastructure as the Python client, including the Yrs CRDT library.