Multi-resolution RiOMar data#

Context#

Purpose#

The use of multiscale Zarr in combination with the Discrete Global Grid System (DGGS) for Earth Observation aims to enhance the efficiency and scalability of storing, accessing, and analyzing large geospatial datasets. Multiscale Zarr allows for efficient compression and chunking of data, enabling rapid access to high-resolution imagery and other spatial datasets. When integrated with DGGS, which provides a hierarchical, cell-based representation of the Earth’s surface, this approach facilitates seamless multi-resolution analysis, improves interoperability, and supports advanced geospatial processing and visualization, ultimately enabling more effective monitoring and understanding of environmental changes.

Description#

In this notebook, we will:

  • Open 3 DGGS-transformed RiOMar data files, each with different resolution (levels)

  • Organise the 3 datasets into one data trees (3 groups)

  • Show how it could be used e.g. select one area where we will have coarser resolution and the rest (for instance closer to the coast) with higher resolution.

Contributions#

Notebook#

  • Anne Fouilloux (author), Simula Research Laboratory (Norway), @annefou

  • Tina Odaka (author), IFREMER (France), @tinaok

Bibliography and other interesting resources#

Install missing libraries#

  • Or packages that needs to have specific version

!pip install xdggs
!pip install healpy
!pip install -U zarr==2.18.4
!pip install numcodecs==0.13.1
!pip install -U xarray
Requirement already satisfied: xdggs in /srv/conda/envs/notebook/lib/python3.12/site-packages (0.1.2.dev9+gb57dfb9)
Requirement already satisfied: xarray in /srv/conda/envs/notebook/lib/python3.12/site-packages (from xdggs) (2025.1.1)
Requirement already satisfied: cdshealpix in /srv/conda/envs/notebook/lib/python3.12/site-packages (from xdggs) (0.7.1)
Requirement already satisfied: h3ronpy in /srv/conda/envs/notebook/lib/python3.12/site-packages (from xdggs) (0.22.0)
Requirement already satisfied: typing-extensions in /srv/conda/envs/notebook/lib/python3.12/site-packages (from xdggs) (4.12.2)
Requirement already satisfied: lonboard>=0.9.3 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from xdggs) (0.9.3)
Requirement already satisfied: pyproj>=3.3 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from xdggs) (3.6.1)
Requirement already satisfied: matplotlib in /srv/conda/envs/notebook/lib/python3.12/site-packages (from xdggs) (3.9.2)
Requirement already satisfied: arro3-core>=0.4.0 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from xdggs) (0.4.5)
Requirement already satisfied: pooch in /srv/conda/envs/notebook/lib/python3.12/site-packages (from xdggs) (1.8.2)
Requirement already satisfied: anywidget<0.10.0,>=0.9.0 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from lonboard>=0.9.3->xdggs) (0.9.13)
Requirement already satisfied: geopandas>=0.13 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from lonboard>=0.9.3->xdggs) (1.0.1)
Requirement already satisfied: palettable<4.0.0,>=3.3.3 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from lonboard>=0.9.3->xdggs) (3.3.3)
Requirement already satisfied: pandas<3,>=2 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from lonboard>=0.9.3->xdggs) (2.2.2)
Requirement already satisfied: pyarrow>=14.0.1 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from lonboard>=0.9.3->xdggs) (17.0.0)
Requirement already satisfied: shapely<3,>=2 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from lonboard>=0.9.3->xdggs) (2.0.5)
Requirement already satisfied: contourpy>=1.0.1 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from matplotlib->xdggs) (1.2.1)
Requirement already satisfied: cycler>=0.10 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from matplotlib->xdggs) (0.12.1)
Requirement already satisfied: fonttools>=4.22.0 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from matplotlib->xdggs) (4.53.1)
Requirement already satisfied: kiwisolver>=1.3.1 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from matplotlib->xdggs) (1.4.5)
Requirement already satisfied: numpy>=1.23 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from matplotlib->xdggs) (1.26.4)
Requirement already satisfied: packaging>=20.0 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from matplotlib->xdggs) (24.1)
Requirement already satisfied: pillow>=8 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from matplotlib->xdggs) (10.4.0)
Requirement already satisfied: pyparsing>=2.3.1 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from matplotlib->xdggs) (3.1.2)
Requirement already satisfied: python-dateutil>=2.7 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from matplotlib->xdggs) (2.8.2)
Requirement already satisfied: certifi in /srv/conda/envs/notebook/lib/python3.12/site-packages (from pyproj>=3.3->xdggs) (2024.7.4)
Requirement already satisfied: astropy in /srv/conda/envs/notebook/lib/python3.12/site-packages (from cdshealpix->xdggs) (6.1.2)
Requirement already satisfied: platformdirs>=2.5.0 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from pooch->xdggs) (4.2.2)
Requirement already satisfied: requests>=2.19.0 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from pooch->xdggs) (2.32.3)
Requirement already satisfied: ipywidgets>=7.6.0 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from anywidget<0.10.0,>=0.9.0->lonboard>=0.9.3->xdggs) (8.1.3)
Requirement already satisfied: psygnal>=0.8.1 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from anywidget<0.10.0,>=0.9.0->lonboard>=0.9.3->xdggs) (0.11.1)
Requirement already satisfied: pyogrio>=0.7.2 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from geopandas>=0.13->lonboard>=0.9.3->xdggs) (0.9.0)
Requirement already satisfied: pytz>=2020.1 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from pandas<3,>=2->lonboard>=0.9.3->xdggs) (2024.1)
Requirement already satisfied: tzdata>=2022.7 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from pandas<3,>=2->lonboard>=0.9.3->xdggs) (2024.1)
Requirement already satisfied: six>=1.5 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from python-dateutil>=2.7->matplotlib->xdggs) (1.16.0)
Requirement already satisfied: charset-normalizer<4,>=2 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from requests>=2.19.0->pooch->xdggs) (3.3.2)
Requirement already satisfied: idna<4,>=2.5 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from requests>=2.19.0->pooch->xdggs) (3.7)
Requirement already satisfied: urllib3<3,>=1.21.1 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from requests>=2.19.0->pooch->xdggs) (1.26.19)
Requirement already satisfied: pyerfa>=2.0.1.1 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from astropy->cdshealpix->xdggs) (2.0.1.4)
Requirement already satisfied: astropy-iers-data>=0.2024.7.1.0.34.3 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from astropy->cdshealpix->xdggs) (0.2024.8.5.0.32.23)
Requirement already satisfied: PyYAML>=3.13 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from astropy->cdshealpix->xdggs) (6.0.2)
Requirement already satisfied: comm>=0.1.3 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from ipywidgets>=7.6.0->anywidget<0.10.0,>=0.9.0->lonboard>=0.9.3->xdggs) (0.2.2)
Requirement already satisfied: ipython>=6.1.0 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from ipywidgets>=7.6.0->anywidget<0.10.0,>=0.9.0->lonboard>=0.9.3->xdggs) (8.17.2)
Requirement already satisfied: traitlets>=4.3.1 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from ipywidgets>=7.6.0->anywidget<0.10.0,>=0.9.0->lonboard>=0.9.3->xdggs) (5.14.3)
Requirement already satisfied: widgetsnbextension~=4.0.11 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from ipywidgets>=7.6.0->anywidget<0.10.0,>=0.9.0->lonboard>=0.9.3->xdggs) (4.0.11)
Requirement already satisfied: jupyterlab-widgets~=3.0.11 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from ipywidgets>=7.6.0->anywidget<0.10.0,>=0.9.0->lonboard>=0.9.3->xdggs) (3.0.11)
Requirement already satisfied: decorator in /srv/conda/envs/notebook/lib/python3.12/site-packages (from ipython>=6.1.0->ipywidgets>=7.6.0->anywidget<0.10.0,>=0.9.0->lonboard>=0.9.3->xdggs) (5.1.1)
Requirement already satisfied: jedi>=0.16 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from ipython>=6.1.0->ipywidgets>=7.6.0->anywidget<0.10.0,>=0.9.0->lonboard>=0.9.3->xdggs) (0.19.1)
Requirement already satisfied: matplotlib-inline in /srv/conda/envs/notebook/lib/python3.12/site-packages (from ipython>=6.1.0->ipywidgets>=7.6.0->anywidget<0.10.0,>=0.9.0->lonboard>=0.9.3->xdggs) (0.1.7)
Requirement already satisfied: prompt-toolkit!=3.0.37,<3.1.0,>=3.0.30 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from ipython>=6.1.0->ipywidgets>=7.6.0->anywidget<0.10.0,>=0.9.0->lonboard>=0.9.3->xdggs) (3.0.38)
Requirement already satisfied: pygments>=2.4.0 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from ipython>=6.1.0->ipywidgets>=7.6.0->anywidget<0.10.0,>=0.9.0->lonboard>=0.9.3->xdggs) (2.18.0)
Requirement already satisfied: stack-data in /srv/conda/envs/notebook/lib/python3.12/site-packages (from ipython>=6.1.0->ipywidgets>=7.6.0->anywidget<0.10.0,>=0.9.0->lonboard>=0.9.3->xdggs) (0.6.2)
Requirement already satisfied: pexpect>4.3 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from ipython>=6.1.0->ipywidgets>=7.6.0->anywidget<0.10.0,>=0.9.0->lonboard>=0.9.3->xdggs) (4.9.0)
Requirement already satisfied: parso<0.9.0,>=0.8.3 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from jedi>=0.16->ipython>=6.1.0->ipywidgets>=7.6.0->anywidget<0.10.0,>=0.9.0->lonboard>=0.9.3->xdggs) (0.8.4)
Requirement already satisfied: ptyprocess>=0.5 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from pexpect>4.3->ipython>=6.1.0->ipywidgets>=7.6.0->anywidget<0.10.0,>=0.9.0->lonboard>=0.9.3->xdggs) (0.7.0)
Requirement already satisfied: wcwidth in /srv/conda/envs/notebook/lib/python3.12/site-packages (from prompt-toolkit!=3.0.37,<3.1.0,>=3.0.30->ipython>=6.1.0->ipywidgets>=7.6.0->anywidget<0.10.0,>=0.9.0->lonboard>=0.9.3->xdggs) (0.2.13)
Requirement already satisfied: executing>=1.2.0 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from stack-data->ipython>=6.1.0->ipywidgets>=7.6.0->anywidget<0.10.0,>=0.9.0->lonboard>=0.9.3->xdggs) (2.0.1)
Requirement already satisfied: asttokens>=2.1.0 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from stack-data->ipython>=6.1.0->ipywidgets>=7.6.0->anywidget<0.10.0,>=0.9.0->lonboard>=0.9.3->xdggs) (2.4.1)
Requirement already satisfied: pure-eval in /srv/conda/envs/notebook/lib/python3.12/site-packages (from stack-data->ipython>=6.1.0->ipywidgets>=7.6.0->anywidget<0.10.0,>=0.9.0->lonboard>=0.9.3->xdggs) (0.2.3)
Requirement already satisfied: healpy in /srv/conda/envs/notebook/lib/python3.12/site-packages (1.18.0)
Requirement already satisfied: numpy>=1.19 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from healpy) (1.26.4)
Requirement already satisfied: astropy in /srv/conda/envs/notebook/lib/python3.12/site-packages (from healpy) (6.1.2)
Requirement already satisfied: pyerfa>=2.0.1.1 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from astropy->healpy) (2.0.1.4)
Requirement already satisfied: astropy-iers-data>=0.2024.7.1.0.34.3 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from astropy->healpy) (0.2024.8.5.0.32.23)
Requirement already satisfied: PyYAML>=3.13 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from astropy->healpy) (6.0.2)
Requirement already satisfied: packaging>=19.0 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from astropy->healpy) (24.1)
Requirement already satisfied: zarr==2.18.4 in /srv/conda/envs/notebook/lib/python3.12/site-packages (2.18.4)
Requirement already satisfied: asciitree in /srv/conda/envs/notebook/lib/python3.12/site-packages (from zarr==2.18.4) (0.3.3)
Requirement already satisfied: numpy>=1.24 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from zarr==2.18.4) (1.26.4)
Requirement already satisfied: fasteners in /srv/conda/envs/notebook/lib/python3.12/site-packages (from zarr==2.18.4) (0.17.3)
Requirement already satisfied: numcodecs!=0.14.0,!=0.14.1,>=0.10.0 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from zarr==2.18.4) (0.13.1)
Requirement already satisfied: numcodecs==0.13.1 in /srv/conda/envs/notebook/lib/python3.12/site-packages (0.13.1)
Requirement already satisfied: numpy>=1.7 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from numcodecs==0.13.1) (1.26.4)
Requirement already satisfied: xarray in /srv/conda/envs/notebook/lib/python3.12/site-packages (2025.1.1)
Requirement already satisfied: numpy>=1.24 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from xarray) (1.26.4)
Requirement already satisfied: packaging>=23.2 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from xarray) (24.1)
Requirement already satisfied: pandas>=2.1 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from xarray) (2.2.2)
Requirement already satisfied: python-dateutil>=2.8.2 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from pandas>=2.1->xarray) (2.8.2)
Requirement already satisfied: pytz>=2020.1 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from pandas>=2.1->xarray) (2024.1)
Requirement already satisfied: tzdata>=2022.7 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from pandas>=2.1->xarray) (2024.1)
Requirement already satisfied: six>=1.5 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from python-dateutil>=2.8.2->pandas>=2.1->xarray) (1.16.0)

Import Libraries#

import warnings
import healpy as hp
#import matplotlib.pyplot as plt
import numpy as np
import xarray as xr
import xdggs
#import fsspec

warnings.filterwarnings("ignore")
xr.set_options(display_max_rows=27)
<xarray.core.options.set_options at 0x7cc558f13530>

Open the same RiOMar sample dataset in 3 different resolutions (different levels)#

url_1 = "https://data-fair2adapt.ifremer.fr/riomar/small_healpix_14.zarr"
url_2 = "https://data-fair2adapt.ifremer.fr/riomar/small_healpix_13.zarr"
url_3 = "https://data-fair2adapt.ifremer.fr/riomar/small_healpix.zarr"
ds1 = xr.open_zarr(url_1).pipe(xdggs.decode)
ds1
<xarray.Dataset> Size: 6GB
Dimensions:       (cells: 3894803, s_rho: 40, time_counter: 5)
Coordinates:
  * cell_ids      (cells) uint64 31MB dask.array<chunksize=(121713,), meta=np.ndarray>
    latitude      (cells) float64 31MB dask.array<chunksize=(121713,), meta=np.ndarray>
    longitude     (cells) float64 31MB dask.array<chunksize=(121713,), meta=np.ndarray>
    resolution    float64 8B ...
  * s_rho         (s_rho) float32 160B -0.9875 -0.9625 ... -0.0375 -0.0125
  * time_counter  (time_counter) datetime64[ns] 40B 2004-01-01T00:58:30 ... 2...
    time_instant  (time_counter) datetime64[ns] 40B dask.array<chunksize=(1,), meta=np.ndarray>
Dimensions without coordinates: cells
Data variables:
    ocean_mask    (cells) float64 31MB dask.array<chunksize=(3894803,), meta=np.ndarray>
    temp          (time_counter, s_rho, cells) float64 6GB dask.array<chunksize=(1, 40, 3894803), meta=np.ndarray>
Indexes:
    cell_ids  HealpixIndex(level=14, indexing_scheme=nested)
Attributes:
    grid_type:  healpix
    lat:        0
    level:      14
    lon:        0
    nside:      16384
    rot_lat:    0
    rot_lon:    0
ds2 =  xr.open_zarr(url_2).pipe(xdggs.decode)
ds2
<xarray.Dataset> Size: 2GB
Dimensions:       (cells: 971899, s_rho: 40, time_counter: 5)
Coordinates:
  * cell_ids      (cells) uint64 8MB dask.array<chunksize=(60744,), meta=np.ndarray>
    latitude      (cells) float64 8MB dask.array<chunksize=(60744,), meta=np.ndarray>
    longitude     (cells) float64 8MB dask.array<chunksize=(60744,), meta=np.ndarray>
    resolution    float64 8B ...
  * s_rho         (s_rho) float32 160B -0.9875 -0.9625 ... -0.0375 -0.0125
  * time_counter  (time_counter) datetime64[ns] 40B 2004-01-01T00:58:30 ... 2...
    time_instant  (time_counter) datetime64[ns] 40B dask.array<chunksize=(1,), meta=np.ndarray>
Dimensions without coordinates: cells
Data variables:
    ocean_mask    (cells) float64 8MB dask.array<chunksize=(971899,), meta=np.ndarray>
    temp          (time_counter, s_rho, cells) float64 2GB dask.array<chunksize=(1, 40, 971899), meta=np.ndarray>
Indexes:
    cell_ids  HealpixIndex(level=13, indexing_scheme=nested)
Attributes:
    grid_type:  healpix
    lat:        0
    level:      13
    lon:        0
    nside:      8192
    rot_lat:    0
    rot_lon:    0
ds3 =  xr.open_zarr(url_3).pipe(xdggs.decode)
ds3
<xarray.Dataset> Size: 395MB
Dimensions:       (cells: 242076, s_rho: 40, time_counter: 5)
Coordinates:
  * cell_ids      (cells) uint64 2MB dask.array<chunksize=(30260,), meta=np.ndarray>
    latitude      (cells) float64 2MB dask.array<chunksize=(30260,), meta=np.ndarray>
    longitude     (cells) float64 2MB dask.array<chunksize=(30260,), meta=np.ndarray>
    resolution    float64 8B ...
  * s_rho         (s_rho) float32 160B -0.9875 -0.9625 ... -0.0375 -0.0125
  * time_counter  (time_counter) datetime64[ns] 40B 2004-01-01T00:58:30 ... 2...
    time_instant  (time_counter) datetime64[ns] 40B dask.array<chunksize=(1,), meta=np.ndarray>
Dimensions without coordinates: cells
Data variables:
    ocean_mask    (cells) float64 2MB dask.array<chunksize=(242076,), meta=np.ndarray>
    temp          (time_counter, s_rho, cells) float64 387MB dask.array<chunksize=(1, 40, 242076), meta=np.ndarray>
Indexes:
    cell_ids  HealpixIndex(level=12, indexing_scheme=nested)
Attributes:
    grid_type:  healpix
    lat:        0
    level:      12
    lon:        0
    nside:      4096
    rot_lat:    0
    rot_lon:    0

Create the DataTree#

dt = xr.DataTree.from_dict({"/" + str(ds1.attrs["level"]): ds1, "/" + str(ds2.attrs["level"]): ds2, "/" + str(ds3.attrs["level"]): ds3})  # create root node
dt
<xarray.DatasetView> Size: 0B
Dimensions:  ()
Data variables:
    *empty*

Define functions#

def create_arrow_table(polygons, arr, coords=None):
    from arro3.core import Array, ChunkedArray, Schema, Table

    if coords is None:
        coords = ["latitude", "longitude"]

    array = Array.from_arrow(polygons)
    name = arr.name or "data"
    arrow_arrays = {
        "geometry": array,
        "cell_ids": ChunkedArray([Array.from_numpy(arr.coords["cell_ids"])]),
        name: ChunkedArray([Array.from_numpy(arr.data)]),
    } | {
        coord: ChunkedArray([Array.from_numpy(arr.coords[coord].data)])
        for coord in coords
        if coord in arr.coords
    }

    fields = [array.field.with_name(name) for name, array in arrow_arrays.items()]
    schema = Schema(fields)

    return Table.from_arrays(list(arrow_arrays.values()), schema=schema)


def normalize(var, center=None):
    from matplotlib.colors import CenteredNorm, Normalize

    if center is None:
        vmin = var.min(skipna=True)
        vmax = var.max(skipna=True)
        normalizer = Normalize(vmin=vmin, vmax=vmax)
    else:
        halfrange = np.abs(var - center).max(skipna=True)
        normalizer = CenteredNorm(vcenter=center, halfrange=halfrange)

    return normalizer(var.data)


def explore_layer(
    arr,
    cell_dim="cells",
    cmap="viridis",
    center=None,
    alpha=None,
):
    from lonboard import SolidPolygonLayer
    from lonboard.colormap import apply_continuous_cmap
    from matplotlib import colormaps

    if len(arr.dims) != 1 or cell_dim not in arr.dims:
        raise ValueError(
            f"exploration only works with a single dimension ('{cell_dim}')"
        )

    cell_ids = arr.dggs.coord.data
    grid_info = arr.dggs.grid_info

    polygons = grid_info.cell_boundaries(cell_ids, backend="geoarrow")

    normalized_data = normalize(arr.variable, center=center)

    colormap = colormaps[cmap]
    colors = apply_continuous_cmap(normalized_data, colormap, alpha=alpha)

    table = create_arrow_table(polygons, arr)
    layer = SolidPolygonLayer(table=table, filled=True, get_fill_color=colors)

    return layer
import lonboard
ds_12 = dt["12"].ds
ds_12 = ds_12.isel(time_counter=0, s_rho=0).compute().dropna(dim='cells').pipe(xdggs.decode)
ds_12
<xarray.Dataset> Size: 6MB
Dimensions:       (cells: 156410)
Coordinates:
  * cell_ids      (cells) uint64 1MB 11451631 11451635 ... 57954657 57954658
    latitude      (cells) float64 1MB 49.25 49.25 49.26 ... 50.83 50.84 50.84
    longitude     (cells) float64 1MB 0.4251 0.4767 0.4768 ... -7.884 -7.91
    resolution    float64 8B 0.0002498
    s_rho         float32 4B -0.9875
    time_counter  datetime64[ns] 8B 2004-01-01T00:58:30
    time_instant  datetime64[ns] 8B 2004-01-01T00:58:30
Dimensions without coordinates: cells
Data variables:
    ocean_mask    (cells) float64 1MB 1.0 1.0 1.0 1.0 1.0 ... 1.0 1.0 1.0 1.0
    temp          (cells) float64 1MB 13.35 12.86 12.63 ... 8.407 7.52 7.486
Indexes:
    cell_ids  HealpixIndex(level=12, indexing_scheme=nested)
Attributes:
    grid_type:  healpix
    lat:        0
    level:      12
    lon:        0
    nside:      4096
    rot_lat:    0
    rot_lon:    0
ds_12.temp.dggs.explore(alpha=1)
import lonboard
ds_14 = dt["14"].ds
ds_14 = ds_14.isel(time_counter=0, s_rho=0).compute().dropna(dim='cells').pipe(xdggs.decode)
ds_14
<xarray.Dataset> Size: 100MB
Dimensions:       (cells: 2508887)
Coordinates:
  * cell_ids      (cells) uint64 20MB 183222103 183222107 ... 927275362
    latitude      (cells) float64 20MB 49.27 49.27 49.27 ... 50.86 50.86 50.86
    longitude     (cells) float64 20MB 0.09343 0.08055 0.08699 ... -7.971 -7.978
    resolution    float64 8B 6.246e-05
    s_rho         float32 4B -0.9875
    time_counter  datetime64[ns] 8B 2004-01-01T00:58:30
    time_instant  datetime64[ns] 8B 2004-01-01T00:58:30
Dimensions without coordinates: cells
Data variables:
    ocean_mask    (cells) float64 20MB 1.0 1.0 1.0 1.0 1.0 ... 1.0 1.0 1.0 1.0
    temp          (cells) float64 20MB 10.11 10.03 10.07 ... 6.252 5.662 6.062
Indexes:
    cell_ids  HealpixIndex(level=14, indexing_scheme=nested)
Attributes:
    grid_type:  healpix
    lat:        0
    level:      14
    lon:        0
    nside:      16384
    rot_lat:    0
    rot_lon:    0
ds_14.temp.dggs.explore(alpha=0.8)
# (ds_12.longitude > -7.96) & (ds_12.longitude <-4.9) &
ds_12_small = ds_12.where(  (ds_12.latitude <46.5))
ds_12_small
<xarray.Dataset> Size: 6MB
Dimensions:       (cells: 156410)
Coordinates:
  * cell_ids      (cells) uint64 1MB 11451631 11451635 ... 57954657 57954658
    latitude      (cells) float64 1MB 49.25 49.25 49.26 ... 50.83 50.84 50.84
    longitude     (cells) float64 1MB 0.4251 0.4767 0.4768 ... -7.884 -7.91
    resolution    float64 8B 0.0002498
    s_rho         float32 4B -0.9875
    time_counter  datetime64[ns] 8B 2004-01-01T00:58:30
    time_instant  datetime64[ns] 8B 2004-01-01T00:58:30
Dimensions without coordinates: cells
Data variables:
    ocean_mask    (cells) float64 1MB nan nan nan nan nan ... nan nan nan nan
    temp          (cells) float64 1MB nan nan nan nan nan ... nan nan nan nan
Indexes:
    cell_ids  HealpixIndex(level=12, indexing_scheme=nested)
Attributes:
    grid_type:  healpix
    lat:        0
    level:      12
    lon:        0
    nside:      4096
    rot_lat:    0
    rot_lon:    0
ds_12_small.temp.dggs.explore(alpha=0.8)
ds_14_small = ds_14.where((ds_14.latitude >=46.5) )
ds_14_small
<xarray.Dataset> Size: 100MB
Dimensions:       (cells: 2508887)
Coordinates:
  * cell_ids      (cells) uint64 20MB 183222103 183222107 ... 927275362
    latitude      (cells) float64 20MB 49.27 49.27 49.27 ... 50.86 50.86 50.86
    longitude     (cells) float64 20MB 0.09343 0.08055 0.08699 ... -7.971 -7.978
    resolution    float64 8B 6.246e-05
    s_rho         float32 4B -0.9875
    time_counter  datetime64[ns] 8B 2004-01-01T00:58:30
    time_instant  datetime64[ns] 8B 2004-01-01T00:58:30
Dimensions without coordinates: cells
Data variables:
    ocean_mask    (cells) float64 20MB 1.0 1.0 1.0 1.0 1.0 ... 1.0 1.0 1.0 1.0
    temp          (cells) float64 20MB 10.11 10.03 10.07 ... 6.252 5.662 6.062
Indexes:
    cell_ids  HealpixIndex(level=14, indexing_scheme=nested)
Attributes:
    grid_type:  healpix
    lat:        0
    level:      14
    lon:        0
    nside:      16384
    rot_lat:    0
    rot_lon:    0
ds_14_small.temp.dggs.explore(alpha=0.8)

Visualize with lonboard the two levels on the same map#

  • To show how the use of multiscale could be beneficial for RiOMar data.

lonboard.Map(
    [
        explore_layer(
            ds_12_small.temp,
            alpha=1,
        ),
        explore_layer(ds_14_small.temp, alpha=1),
    ]
)