Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Mask regular data with geometry data

This example masks ERA5 data (regular lat/lon grid) with country boundaries taken from the NUTS inventory.

from earthkit import data as ekd
from earthkit import geo as ekg
from earthkit import plots as ekp
from earthkit import transforms as ekt
from earthkit.transforms._tools import earthkit_remote_test_data_file
remote_era5_file = earthkit_remote_test_data_file("era5_temperature_europe_20150101.grib")
era5_data = ekd.from_source("url", remote_era5_file)

geometry_data = ekg.gisco.nuts_regions(level=0).to_geopandas()
geometry_data.head()
Loading...
# Mask ERA5 data with geometry
masked = ekt.spatial.mask(
    era5_data, geometry_data, mask_dim="NAME_ENGL", lat_key="latitude", lon_key="longitude"
)
masked
Loading...
plot_data = masked.isel(forecast_reference_time=0)
figure = ekp.Figure(domain="Europe", rows=2, columns=3)
nmaps = figure.rows * figure.columns

subplot = figure.add_map()
subplot.pcolormesh(era5_data, style="2m-temperature-spectral-celsius")
subplot.title("Original data")

for i in range(nmaps-1):
    subplot = figure.add_map()
    subplot.pcolormesh(plot_data.isel(NAME_ENGL=i), style="2m-temperature-spectral-celsius")
    subplot.title("{NAME_ENGL}")

figure.coastlines()
figure.borders()
figure.legend()
figure.show()
<Figure size 800x700 with 7 Axes>