Skip to main content

geoviewer

A browser-based viewer for geospatial scientific data — netCDF, HDF5, and GRIB — inspired by NASA Panoply.

Browse a whitelisted server directory, pick a variable, and get an interactive lat/lon map with a time/level slider, colormap control, and a metadata panel. It runs as a single Panel app served over the web, with no uploads — files stay on the server.

Features

  • Multi-format readers behind one interface: netCDF (classic and netCDF-4/HDF5-backed), HDF5, and GRIB (via cfgrib/eccodes).
  • Variable list with automatic dimension-role detection (x/y/z/time) via naming heuristics and unit hints.
  • Interactive map rendered with datashader rasterization (falls back to plain rendering when unavailable).
  • Time and vertical-level sliders for N-D variables.
  • Colormap picker and per-dimension role overrides.
  • Metadata panel showing the selected variable's attributes.
  • Directory whitelist with path-traversal protection — server-side browsing only.

Installation

Requires Python 3.11+.

pip install .

For an editable install that includes the test/lint tooling:

pip install -e ".[dev]"

With uv:

uv pip install .

GRIB support needs the eccodes C library; the eccodes wheel bundles it, or install it system-wide (conda install -c conda-forge eccodes).

Usage

Start the server, pointing NC_VIEWER_ROOTS at one or more directories to browse (colon-separated):

NC_VIEWER_ROOTS=/data/mydata:/data/more python -m panel serve app.py --port 5006

Then open http://localhost:5006/app.

To serve on a remote machine, use an SSH tunnel:

ssh -L 5006:127.0.0.1:5006 user@host

Natural Earth feature data (first render)

Coastlines, borders and the graticule come from Natural Earth data, which cartopy downloads on first use and caches in ~/.local/share/cartopy. Behind a blocking proxy the download fails; the map still renders, just without the overlays (a warning names the unavailable features). To pre-seed the cache on a proxied server, clear the proxy variables and render any map once:

env -u http_proxy -u https_proxy python -m panel serve app.py --port 5006

Environment variables

Variable Default Description
NC_VIEWER_ROOTS . Colon-separated whitelisted directories to browse
NUMBA_CACHE_DIR <tmp>/numba_cache Numba JIT cache directory (used by datashader rasterization)

Architecture

readers/   unified Reader abstraction (netCDF / HDF5 / GRIB) -> xarray
services/  catalog whitelist, dimension role model, slice LRU cache
ui/        Panel components (file browser, variable panel, map, controls, metadata)
app.py     Panel entrypoint wiring callbacks

Testing

python -m pytest -q

License

Apache-2.0

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

geoviewer-0.3.0.tar.gz (24.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

geoviewer-0.3.0-py3-none-any.whl (21.5 kB view details)

Uploaded Python 3

File details

Details for the file geoviewer-0.3.0.tar.gz.

File metadata

  • Download URL: geoviewer-0.3.0.tar.gz
  • Upload date:
  • Size: 24.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for geoviewer-0.3.0.tar.gz
Algorithm Hash digest
SHA256 8f14d4945c675d51ee48586e6a8cfc2a11282d6aab14dff98e735ef9a720fc4d
MD5 b4637ec1c4b494945abe29b025c86121
BLAKE2b-256 1d05252b06f359c7aea155438047fcd23bb34c6c68f433a75c74f05ff8206bae

See more details on using hashes here.

Provenance

The following attestation bundles were made for geoviewer-0.3.0.tar.gz:

Publisher: publish.yml on openEarthModelling/geoviewer

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file geoviewer-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: geoviewer-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 21.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for geoviewer-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 56a70069b015423cddf1e79a078c313965b2d2616ca2c568fc298f0a752242de
MD5 66658bc0adf1e0aa86421104892a817e
BLAKE2b-256 30d7887fbb20139caffa537a32d2a981e6065f236a393909924aa9fe0109762a

See more details on using hashes here.

Provenance

The following attestation bundles were made for geoviewer-0.3.0-py3-none-any.whl:

Publisher: publish.yml on openEarthModelling/geoviewer

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

0.3.0 This release

2 files

0.2.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page