Pangeo Showcase: “No shard feelings: GeoZarr rendering in QGIS, powered by GDAL” (March 4, 2026 at 12 PM ET)

Title: “No shard feelings: GeoZarr rendering in QGIS, powered by GDAL”
Speaker: Wietze Suijker

When: Wednesday, March 4, 2026 at 12 PM US Eastern (2026-03-04T17:00:00Z)
Where: Launch Meeting - Zoom
Abstract:

What happens when you point QGIS at a sharded Zarr v3 store on S3 and just… click render? Until recently: 81 HTTP requests per viewport. After >20 PRs to GDAL’s Zarr driver: 4 requests and parallel decompression. Zarr can match COG byte for byte. Now the tooling is catching up.

Live demo on Sentinel-2 from EOPF Explorer (one of the only STACs serving sharded Zarr v3 with GeoZarr conventions). We’ll unpack what makes sharded reads fast and where GeoZarr is heading. Open source plugin, no terminal required.

Try it: search “GeoZarr” in the QGIS plugin manager. Full sharding support requires GDAL 3.13 (mid-2026, or build from master).

Links:
QGIS plugin: GeoZarr — QGIS Python Plugins Repository
GDAL contributions: GitHub · Where software is built
GeoZarr spec: GitHub - zarr-developers/geozarr-spec: GeoZarr defines geospatial conventions for storing multidimensional georeferenced grids using the Zarr format · GitHub

Agenda:

  • ~15 minutes – Showcase presentation
  • 10-30 minutes – Discussion
  • 15-30 minutes – Community check-in
6 Likes

Thanks for attending, trying the plugin, and caring about GeoZarr.
Link to slides
Following up on what I promised during Q&A:

Benchmarks

Scripts and methodology are public: BENCHMARK-SETUP.md | CLAIMS.md. Reproduce or cross-check.

M1 Pro, NVMe, warm cache, ZSTD L3, median of 7 runs:

Access pattern COG Zarr v3
Overview (zoomed out) 28 ms 72 ms
Full-res zoom 105 ms 94 ms
Random tiles (50x) 288 ms 136 ms
Parallel scaling (1 to 8 cores) 1.1x 4.3x
File size (same codec) 71 MB 51 MB

All local decode. The HTTP request reduction (81 down to 4) should matter most over the network.

Optimization patterns for Zarr readers (Max’s question)

These came out of GDAL work but should transfer to any Zarr reader:

  1. Probe v3 first to skip legacy v2 metadata lookups. Saves 2-3 404 round trips

  2. Cache coordinate arrays brought band reopen from 1030 ms to 148 ms (#13872)

  3. Batch inner-chunk reads by reading the shard index and computing byte ranges. One fetch instead of N (#13871)

  4. Cache shard indices with a small LRU. 64 entries covers a full Sentinel-2 scene (#14021)

  5. Parallel decompression gave 4.3x at 8 cores (#13972)

  6. Pre-fetch unaligned viewports so you get the full chunk set before the per-block loop (#14019)

Browser side (Emmanuel’s question on chunk alignment)

Looked into why zarrita.js + OpenLayers makes so many requests for sharded Zarr. Opened PRs for both projects covering array cache, parallel band opens, request batching, and shard index dedup. The array cache alone cuts metadata fetches from 27 to 3 for a 9-tile RGB viewport. Details in ol#17368.

Notes

QGIS 4.0: PR#63358 adds native Zarr support to the STAC browser (thanks Tom for flagging). Plugin becomes optional for basic loading.

GTI for large tile collections: Scott asked about virtualization vs conversion. If you’re working with something like stac-3dep-1m, GTI + STAC GeoParquet seems to work well. Tip: GDAL_MAX_DATASET_POOL_SIZE=750 avoids reopening files repeatedly, and GTI_NUM_THREADS=ALL_CPUS enables parallel reads. Also worth looking at rio-stac-io as alternative to TiTiler (thanks Julia).

Timeline: QGIS 4.0 targets March 2026. GDAL 3.13 targets mid-2026. GeoZarr RC May, OGC review June. Sharding needs 3.13; until then, build from source.

Help wanted

4 Likes

Since the talk I shipped plugin v0.2.0 with time series support.

Screen capture:

1 Like