zarr-gl
v0.3.0
Published
Custom WebGL Zarr layer for Mapbox and Maplibre
Downloads
53
Readme
zarr-gl
Custom WebGL Zarr layer for Mapbox and Maplibre.
This library allows you to load Zarr data into a Mapbox GL JS or Maplibre GL JS map.
Takes inspiration from carbonplan/maps, but with two differences:
- A library, rather than a framework, so you can use it how you like.
- Adds a Custom Layer to Mapbox's GL context, rather than creating a whole separate one. Allows you to mix and match with Map styles, adjust layer ordering etc.
You can see a demo at: rainy.rdrn.me.
Quickstart
npm install zarr-gl
You'll need to prepare the data using carbonplan/ndpyramid. Maybe one day this won't be necessary, but re-projecting arrays on the fly isn't cheap. There's a basic data preparation example at example/prep.py.
import { ZarrLayer } from "zarr-gl";
// or skip the npm install and just do this:
// import { ZarrLayer } from "https://cdn.jsdelivr.net/npm/[email protected]/+esm";
const map = new mapboxgl.Map({
container: "map",
style: "mapbox://styles/mapbox/standard",
projection: "mercator",
});
const layer = new ZarrLayer({
id: "myZarrLayer",
source: "https://example.com/path/to/my.zarr",
variable: "precip",
colormap: [[200, 10, 50], [30, 40, 30], [50, 10, 200]],
vmin: 0,
vmax: 100,
opacity: 0.8,
map,
});
map.addLayer(layer);
Roadmap
- [x] Support a
selector
option to index into additional dimensions. Currently only 2D datasets are supported. - [ ] Handle chunk sizes other than 128x128.
- [ ] Appropriately handle non-float32 data.
- [ ] Add more lifecycle events.
Examples
- There is a very basic example (including data prep) in the example directory.
- There's also a more complex React app inside demo and viewable at rainy.rdrn.me.
Contributing
I'd love input on use-cases, ideas, missing features etc. Even better if they come with code.