CryoTEMPO-EOLIS products over Austfonna Basin 3

Introduction

This example shows how to use Specklia to retrieve CryoTEMPO-EOLIS Point and Gridded Product data over Austfonna Basin 3.

Environment Setup

To set up an environment in which to run this example, first create a new python virtual environment (we assume conda here, but many other options are available):

conda create --name specklia_demo python=3.9.7
conda activate specklia_demo

Install the packages necessary to run the example:

pip install specklia contextily geopandas shapely ipykernel python-dotenv matplotlib numpy

Import the packages and create a Specklia client to work with:

[1]:
# fix an issue that can sometimes occur with rasterio using the wrong version of proj
import os
import pyproj
os.environ['PROJ_LIB'] = pyproj.datadir.get_data_dir()

from datetime import datetime
import pprint
from time import perf_counter

import contextily as ctx
from dotenv import load_dotenv
import geopandas as gpd
from IPython.display import display
import matplotlib.colors as mcolors
import matplotlib.pyplot as plt
import numpy as np
from pandas import Timedelta
import shapely
from specklia import Specklia

# load a demonstration API key from a .env file.
load_dotenv()

# Specify polygon colors to match another Earthwave product, https://cs2eo.org.
data_coverage_color = np.array([52, 211, 153])/255
geo_filter_colour = np.array([96, 165, 250])/255

# To run this code yourself, first generate your own key using https://specklia.earthwave.co.uk.
client = Specklia(os.environ['DEMO_API_KEY'])

Listing groups and datasets

The demonstration user has the same permissions as a freshly created Specklia user. Let’s list the groups they are a part of and the datasets they can access:

[2]:
display(client.list_groups())
group_id group_name
0 all_users all_users
1 4ccfc777-c420-4ebc-afba-15bfcc2774b0 demonstration_user
[3]:
available_datasets = client.list_datasets()
display(available_datasets)
columns created_timestamp dataset_id dataset_name description epsg4326_coverage last_modified_timestamp last_queried_timestamp max_timestamp min_timestamp owning_group_id owning_group_name size_rows size_uncompressed_bytes storage_tech
0 [{'description': 'Measurement of time', 'max_v... 2023-11-30 13:39:12 05cffaba-1849-4c90-811f-062465a150e7 CryoTEMPO-EOLIS Gridded Product CryoTEMPO-EOLIS Elevation Over Land Ice from S... MULTIPOLYGON (((24.76782 79.21572, 24.37098 79... 2024-04-29 14:33:06 2024-05-08 02:09:46 2024-01-15 00:00:00 2010-08-15 00:00:00 all_users all_users 239808571 39808222762 OLAP
1 [{'description': 'Measurement of time', 'max_v... 2023-11-30 14:27:18 7b9350b7-0184-4710-beae-65ce8423af37 CryoTEMPO-EOLIS Point Product CryoTEMPO-EOLIS Elevation Over Land Ice from S... MULTIPOLYGON (((-60.25814 -66.67899, -60.06584... 2024-05-06 09:41:45 2024-05-08 02:05:24 2024-02-29 23:57:09 2010-07-16 00:08:48 all_users all_users 79757645383 11961346322138 OLAP
2 [{'description': 'Water surface height above e... 2024-01-10 17:05:38 5ad51abc-9d48-42b5-9851-1187463a79d5 CryoTEMPO Inland Water Thematic Product CryoTEMPO Inland Water product providing water... MULTIPOLYGON (((13.89497 62.89651, 13.83991 62... 2024-01-11 00:10:09 2024-03-09 00:11:58 2023-10-31 19:22:49 2010-07-16 19:30:09 all_users all_users 1032630 163196916 OLAP
3 [{'description': 'rgi id', 'max_value': 'RGI20... NaT b2349ad2-d9ce-46b7-a3a2-15acbf129e67 RGIv7 Glaciers Randolph Glacier Inventory v7 Glaciers MULTIPOLYGON (((-63.87645 -64.79776, -64.05784... NaT 2024-05-08 02:09:01 2023-12-12 10:25:58 2023-12-12 10:25:58 all_users all_users 274531 789323776 OLTP
4 [{'description': 'The Ice Sheet containing the... NaT 58473d18-0bd4-42fe-b1f6-4348c21b6db1 IMBIE Polygons Icesheet Mass Balance Intercomparison Exercise... MULTIPOLYGON (((-83.81796 -83.03900, -84.43742... NaT 2024-05-08 13:20:19 2023-12-12 10:25:58 2023-12-12 10:25:58 all_users all_users 122 33329152 OLTP
5 [{'description': 'Sea Level Anomaly', 'max_val... 2024-01-11 09:42:25 76a42372-f792-41f1-81e4-77c6ae73f872 CryoTEMPO Coastal Ocean Thematic Product CryoTEMPO Coastal Ocean product providing alon... MULTIPOLYGON (((-3.82482 31.48007, -3.82482 31... 2024-01-11 20:22:07 2024-03-08 22:41:14 2023-10-31 23:58:25 2010-07-16 00:47:36 all_users all_users 38890488 7001761856 OLAP
6 [{'description': 'SIRAL instrument mode flag -... 2024-03-02 09:31:09 2550e489-de77-4477-bcac-f2409fbf6a46 CryoTEMPO Sea Ice Thematic Product CryoTEMPO Sea Ice product providing radar and ... MULTIPOLYGON (((-152.23343 60.68671, -152.0764... 2024-03-08 15:09:43 2024-05-08 02:04:05 2023-12-31 23:55:31 2010-11-01 00:22:24 all_users all_users 638077885 86920318910 OLAP
7 [{'description': 'dynamic ocean topography', '... 2024-03-05 10:25:59 16ef369d-c7bf-4a47-9ea5-9b6010f5fd7a CryoTEMPO Polar Ocean Thematic Product CryoTEMPO Polar Ocean product providing sea le... MULTIPOLYGON (((78.50538 70.35213, 78.27979 70... 2024-03-08 11:25:06 2024-05-08 02:03:54 2023-12-31 23:55:31 2010-08-01 00:37:22 all_users all_users 1358354076 226346930728 OLAP
8 [{'description': 'o1region', 'max_value': None... NaT f4c0baa9-362c-4c06-8997-aa0165ee0340 RGIv7 First Order Regions Randolph Glacier Inventory v7 First Order Regions MULTIPOLYGON (((-12.17943 -60.39706, -12.13433... NaT 2024-05-08 13:20:19 2023-12-12 10:25:58 2023-12-12 10:25:58 all_users all_users 21 3129344 OLTP
9 [{'description': 'o1region', 'max_value': None... NaT a7a4ec44-c5db-4a06-b5cc-f84ffb265575 RGIv7 Second Order Regions Randolph Glacier Inventory v7 Second Order Reg... MULTIPOLYGON (((-167.14364 -79.75724, -167.029... NaT 2024-05-08 13:20:21 2023-12-12 10:25:58 2023-12-12 10:25:58 all_users all_users 91 4308992 OLTP
10 [{'description': 'CryoSat SIRAL instrument ope... 2024-03-09 20:53:02 db056d0f-cbe0-47b0-83cf-f89bf11e8881 CryoTEMPO Land Ice Thematic Product CryoTEMPO Land Ice product providing surface e... MULTIPOLYGON (((-44.58417 -71.68364, -44.79148... 2024-04-09 12:21:44 2024-05-08 02:04:15 2024-01-01 00:00:16 2010-07-16 00:08:47 all_users all_users 1144437670 175667589060 OLAP

Plotting dataset spatial coverage

There’s a lot of information here. Let’s plot the geospatial coverage of the Point and Gridded product datasets, using Contextily to add a satellite background map. Note that as of 30th June 2023, only products covering Svalbard have been loaded. We will be loading more in the second half of 2023.

All background satellite imagery tiles are provided by Geoportail France via Contextily.

[4]:
eolis_datasets = {}
for ds_name in ['CryoTEMPO-EOLIS Point Product', 'CryoTEMPO-EOLIS Gridded Product']:
    eolis_datasets[ds_name] = available_datasets[
        available_datasets['dataset_name'] == ds_name].iloc[0]

    print(f"{ds_name} contains data timestamped between \n"
        f"{eolis_datasets[ds_name]['min_timestamp']} "
        f"and {eolis_datasets[ds_name]['max_timestamp']}\n")

    print(f"{ds_name} has the following columns:")
    pprint.PrettyPrinter(indent=2, width=120).pprint(eolis_datasets[ds_name]['columns'])
    print("\n\n")

    desired_dataset_spatial_coverage = gpd.GeoDataFrame(
        geometry=[eolis_datasets[ds_name]['epsg4326_coverage']], crs=4326)

    # we create two plots, one for each hemisphere, to minimise distortion
    # and illustrate that multiple regions may be present within the same dataset
    for crs, hemisphere_name, hemisphere_bounding_box in [
            (3413, 'northern', (-180, 0, 180, 90)),
            (3031, 'southern', (-180, -90, 180, 0))
            ]:

        cropped_data = desired_dataset_spatial_coverage.clip(hemisphere_bounding_box)

        if len(cropped_data) > 0:
            transformed_cropped_data = cropped_data.to_crs(crs)
            ax = transformed_cropped_data.plot(
                figsize=(10, 10), alpha=0.5, color=data_coverage_color, edgecolor=data_coverage_color)

            ax.set_xlabel('x (m)')
            ax.set_ylabel('y (m)')
            ax.set_title(f"{ds_name} spatial coverage, {hemisphere_name} hemisphere (EPSG {crs})")
            # we calculate the zoom level dynamically so that we don't have to change this code
            # when new regions are added to the CryoTEMPO EOLIS products.
            ctx.add_basemap(ax, source=ctx.providers.GeoportailFrance.orthos, crs=crs, attribution=False,
                            zoom=ctx.tile._calculate_zoom(*cropped_data.total_bounds) - 1)
CryoTEMPO-EOLIS Point Product contains data timestamped between
2010-07-16 00:08:48 and 2024-02-29 23:57:09

CryoTEMPO-EOLIS Point Product has the following columns:
[ { 'description': 'Measurement of time',
    'max_value': 1709251029,
    'min_value': 1279238928,
    'name': 'time',
    'type': 'int',
    'unit': 'Seconds from 1970 in the UTC timezone'},
  { 'description': 'x spatial position on the x axis using the projection defined for the region',
    'max_value': 4822076.0,
    'min_value': -3967596.75,
    'name': 'x',
    'type': 'float',
    'unit': 'metres'},
  { 'description': 'y spatial position on the y axis using the projection defined for the region',
    'max_value': 7262211.0,
    'min_value': -5003002.5,
    'name': 'y',
    'type': 'float',
    'unit': 'metres'},
  { 'description': 'Elevation estimate for a point in space and time',
    'max_value': 7327.7109375,
    'min_value': -150.36830139160156,
    'name': 'elevation',
    'type': 'float',
    'unit': 'metres'},
  { 'description': 'Uncertainty estimate for a point in space and time',
    'max_value': 24.9919490814209,
    'min_value': 0.5143656134605408,
    'name': 'uncertainty',
    'type': 'float',
    'unit': 'metres'},
  { 'description': 'Indicates whether a point is from the Swath processing 1 or is a POCA input 0',
    'max_value': 1,
    'min_value': 0,
    'name': 'is_swath',
    'type': 'int',
    'unit': 'swath1 poca0'},
  { 'description': 'Numeric id that uses the Variable Attribute as a String Lookup',
    'max_value': 2147477784,
    'min_value': -2147469220,
    'name': 'input_file_id',
    'type': 'int',
    'unit': 'Numeric Id'}]



CryoTEMPO-EOLIS Gridded Product contains data timestamped between
2010-08-15 00:00:00 and 2024-01-15 00:00:00

CryoTEMPO-EOLIS Gridded Product has the following columns:
[ { 'description': 'Measurement of time',
    'max_value': 1705276800,
    'min_value': 1281830400,
    'name': 'time',
    'type': 'int',
    'unit': 'Seconds from 1970 in the UTC timezone'},
  { 'description': 'Polar Stereographic EPSG 3413 X Coordinate',
    'max_value': 2679000.0,
    'min_value': -3967000.0,
    'name': 'x',
    'type': 'float',
    'unit': 'metres'},
  { 'description': 'Polar Stereographic EPSG 3413 Y Coordinate',
    'max_value': 7071000.0,
    'min_value': -3341000.0,
    'name': 'y',
    'type': 'float',
    'unit': 'metres'},
  { 'description': 'CryoTEMPO-EOLIS Gridded Elevation',
    'max_value': 6612.62841796875,
    'min_value': -121.99847412109375,
    'name': 'elevation',
    'type': 'float',
    'unit': 'metres'},
  { 'description': 'CryoTEMPO-EOLIS Gridded Uncertainty',
    'max_value': 19.985267639160156,
    'min_value': 0.2786601483821869,
    'name': 'uncertainty',
    'type': 'float',
    'unit': 'metres'},
  { 'description': 'The minimum x boundary of the grid cell',
    'max_value': 2678000.0,
    'min_value': -3968000.0,
    'name': 'x_bnds_min',
    'type': 'float',
    'unit': 'metres'},
  { 'description': 'The maximum x boundary of the grid cell',
    'max_value': 2680000.0,
    'min_value': -3966000.0,
    'name': 'x_bnds_max',
    'type': 'float',
    'unit': 'metres'},
  { 'description': 'The minimum y boundary of the grid cell',
    'max_value': 7070000.0,
    'min_value': -3342000.0,
    'name': 'y_bnds_min',
    'type': 'float',
    'unit': 'metres'},
  { 'description': 'The maximum y boundary of the grid cell',
    'max_value': 7072000.0,
    'min_value': -3340000.0,
    'name': 'y_bnds_max',
    'type': 'float',
    'unit': 'metres'}]



../_images/example_notebooks_austfonna_basin_3_8_2.png
../_images/example_notebooks_austfonna_basin_3_8_3.png
../_images/example_notebooks_austfonna_basin_3_8_4.png
../_images/example_notebooks_austfonna_basin_3_8_5.png

Querying RGI polygons

In this example, we are interested in studying Austfonna Basin 3. Conveniently, Specklia contains all RGI v7.0 glacier boundary definitions. Let’s retrieve the RGI v7.0 boundary of Basin 3 from Specklia and take a look.

Firstly, we need to define a rough polygon covering the area to query the RGIv7 polygons from Specklia.

[5]:
austfonna_extent = shapely.from_wkt(
    'POLYGON ((19.27002 79.492646, 23.862305 79.075977, 28.630371 79.843346, 25.708008 80.441282, 19.27002 79.492646))')
austfonna_extent_gdf = gpd.GeoSeries(austfonna_extent, crs=4326)
# We plot in the WGS 84 / NSIDC Sea Ice Polar Stereographic North CRS (EPSG 3413).
ax = austfonna_extent_gdf.to_crs(3413).plot(
    figsize=(10, 10), alpha=0.5, color=geo_filter_colour, edgecolor=geo_filter_colour)

ax.set_xlabel('x (meters)')
ax.set_ylabel('y (meters)')
ax.set_title("Query extent for Austfonna")
ctx.add_basemap(ax, source=ctx.providers.GeoportailFrance.orthos, crs=3413, attribution=False, zoom=8)
../_images/example_notebooks_austfonna_basin_3_10_0.png

Now that we have defined a rough extent covering Austfonna, we can query the polygons from Specklia. Specklia will return all RGI Glaciers whose centroids fall within the query polygon.

[6]:
rgiv7_dataset = available_datasets[available_datasets['dataset_name'] == 'RGIv7 Glaciers'].iloc[0]

query_start_time = perf_counter()

rgi_data, rgi_data_sources = client.query_dataset(
    dataset_id=rgiv7_dataset['dataset_id'],
    epsg4326_polygon=austfonna_extent,
    min_datetime=rgiv7_dataset['min_timestamp'] - Timedelta(seconds=1),
    max_datetime=rgiv7_dataset['max_timestamp'] + Timedelta(seconds=1))

print(f'Query took {perf_counter()-query_start_time:.2f} seconds to complete.')
print(f'Austfonna Polygon Query complete, {len(rgi_data)} points returned, '
        f'drawn from {len(rgi_data_sources)} original sources.')
print(f'Columns within the data: {rgi_data.columns}\n\n')
Query took 0.72 seconds to complete.
Austfonna Polygon Query complete, 35 points returned, drawn from 1 original sources.
Columns within the data: Index(['source_id', 'source_row_id', 'timestamp', 'rgi_id', 'o1region',
       'o2region', 'glims_id', 'anlys_id', 'subm_id', 'src_date', 'cenlon',
       'cenlat', 'utm_zone', 'area_km2', 'primeclass', 'conn_lvl',
       'surge_type', 'term_type', 'glac_name', 'is_rgi6', 'termlon', 'termlat',
       'zmin_m', 'zmax_m', 'zmed_m', 'zmean_m', 'slope_deg', 'aspect_deg',
       'aspect_sec', 'dem_source', 'lmax_m', 'original_polygons', 'nice_name',
       'min_lat', 'max_lat', 'min_lon', 'max_lon',
       'max_simplification_tolerance', 'simplified_polygons_t200',
       'simplified_polygons_t500', 'simplified_polygons_t1000',
       'simplified_polygons_t2100', 'simplified_polygons_t3500',
       'simplified_polygons_t8700', 'simplified_polygons_t17700',
       'simplified_polygons_t36200', 'simplified_polygons_t73600',
       'simplified_polygons_t150000', 'geometry'],
      dtype='object')


The Specklia query returns all of the original attributes in the RGI shapefile, as well as varying degrees of simplified versions of the original polygon. The simplified polygons have fewer vertices which make for faster querying, if we retrieve only those.

Additionally, source information is supplied for the returned data, and a direct link to the source file.

[7]:
display(rgi_data_sources)
display(rgi_data)
[{'source_id': '1d1802f8-1d40-413f-b6fb-1cdfbca64244',
  'min_time': datetime.datetime(2023, 12, 12, 10, 25, 58),
  'max_time': datetime.datetime(2023, 12, 12, 10, 25, 58),
  'geospatial_coverage': <MULTIPOLYGON (((18.871 80.017, 19.304 79.992, 19.134 79.908, 19.563 79.882,...>,
  'point_count': 1666,
  'source_information': {'description': 'RGI v7 polygons, from RGI2000-v7.0-G-07_svalbard_jan_mayen',
   'web_path': 'https://daacdata.apps.nsidc.org/pub/DATASETS/nsidc0770_rgi_v7/regional_files/RGI2000-v7.0-G/RGI2000-v7.0-G-07_svalbard_jan_mayen.zip'}}]
source_id source_row_id timestamp rgi_id o1region o2region glims_id anlys_id subm_id src_date ... simplified_polygons_t500 simplified_polygons_t1000 simplified_polygons_t2100 simplified_polygons_t3500 simplified_polygons_t8700 simplified_polygons_t17700 simplified_polygons_t36200 simplified_polygons_t73600 simplified_polygons_t150000 geometry
0 1d1802f8-1d40-413f-b6fb-1cdfbca64244 1379 1.702377e+09 RGI2000-v7.0-G-07-01380 07 07-01 G026149E79828N 102995 563 2001-07-10T00:00:00 ... POLYGON ((26.61388 79.83142, 25.84645 79.88049... POLYGON ((26.61388 79.83142, 25.84645 79.88049... POLYGON ((26.61388 79.83142, 25.84645 79.88049... POLYGON ((26.61388 79.83142, 25.73730 79.86216... POLYGON ((26.61388 79.83142, 25.73730 79.86216... GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY POINT (26.34832 79.80721)
1 1d1802f8-1d40-413f-b6fb-1cdfbca64244 1378 1.702377e+09 RGI2000-v7.0-G-07-01379 07 07-01 G026458E79881N 102996 563 2001-07-10T00:00:00 ... POLYGON ((27.16908 79.89404, 26.58830 79.91298... POLYGON ((27.16908 79.89404, 26.58830 79.91298... POLYGON ((27.16908 79.89404, 26.38013 79.94683... POLYGON ((27.16908 79.89404, 26.38013 79.94683... POLYGON ((27.16908 79.89404, 25.84644 79.88048... GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY POINT (26.60746 79.87224)
2 1d1802f8-1d40-413f-b6fb-1cdfbca64244 1377 1.702377e+09 RGI2000-v7.0-G-07-01378 07 07-01 G026669E79935N 103034 563 2008-08-14T00:00:00 ... POLYGON ((27.16909 79.89404, 27.07837 79.93942... POLYGON ((27.16909 79.89404, 26.99737 79.97146... POLYGON ((27.16909 79.89404, 26.99737 79.97146... POLYGON ((27.16909 79.89404, 26.99737 79.97146... GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY POINT (26.79250 79.93286)
3 1d1802f8-1d40-413f-b6fb-1cdfbca64244 1375 1.702377e+09 RGI2000-v7.0-G-07-01376 07 07-01 G026693E79986N 103035 563 2008-08-14T00:00:00 ... POLYGON ((26.99737 79.97144, 27.12007 79.97562... POLYGON ((26.99737 79.97144, 27.12007 79.97562... POLYGON ((26.99737 79.97144, 27.10598 80.01346... POLYGON ((26.99737 79.97144, 26.93156 80.04974... GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY POINT (26.79289 79.99713)
4 1d1802f8-1d40-413f-b6fb-1cdfbca64244 1376 1.702377e+09 RGI2000-v7.0-G-07-01377 07 07-01 G027038E80056N 103920 563 2008-08-14T00:00:00 ... POLYGON ((27.04939 80.06137, 27.00124 80.05721... GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY POINT (27.05333 80.05491)
5 1d1802f8-1d40-413f-b6fb-1cdfbca64244 1374 1.702377e+09 RGI2000-v7.0-G-07-01375 07 07-01 G025747E79959N 103036 563 2008-08-14T00:00:00 ... POLYGON ((26.93156 80.04974, 26.92716 80.05666... POLYGON ((26.93156 80.04974, 26.98568 80.07853... POLYGON ((26.93156 80.04974, 26.75593 80.15027... POLYGON ((26.93156 80.04974, 26.75593 80.15027... POLYGON ((26.93156 80.04974, 26.06037 80.17468... POLYGON ((26.93156 80.04974, 26.06037 80.17468... GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY POINT (26.01828 80.01316)
6 1d1802f8-1d40-413f-b6fb-1cdfbca64244 1372 1.702377e+09 RGI2000-v7.0-G-07-01373 07 07-01 G025164E79993N 103407 563 2008-08-14T00:00:00 ... POLYGON ((25.47418 80.14555, 25.50105 80.16663... POLYGON ((25.47418 80.14555, 25.50105 80.16663... POLYGON ((25.47418 80.14555, 25.42796 80.21333... POLYGON ((25.47418 80.14555, 25.24448 80.22266... POLYGON ((25.47418 80.14555, 25.24448 80.22266... GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY POINT (25.16718 80.03021)
7 1d1802f8-1d40-413f-b6fb-1cdfbca64244 1370 1.702377e+09 RGI2000-v7.0-G-07-01371 07 07-01 G024143E79973N 103537 563 2008-08-14T00:00:00 ... POLYGON ((24.28670 80.13033, 24.24596 80.13021... POLYGON ((24.28670 80.13033, 24.16006 80.15254... POLYGON ((24.28670 80.13033, 23.76046 80.16663... POLYGON ((24.28670 80.13033, 23.76046 80.16663... POLYGON ((24.28670 80.13033, 23.76046 80.16663... GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY POINT (24.12696 79.99800)
8 1d1802f8-1d40-413f-b6fb-1cdfbca64244 1371 1.702377e+09 RGI2000-v7.0-G-07-01372 07 07-01 G024700E79994N 103408 563 2008-08-14T00:00:00 ... POLYGON ((25.17148 80.20192, 25.03330 80.23848... POLYGON ((25.17148 80.20192, 25.03330 80.23848... POLYGON ((25.17148 80.20192, 25.03330 80.23848... POLYGON ((25.17148 80.20192, 24.77555 80.23921... POLYGON ((25.17148 80.20192, 24.28670 80.13033... GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY POINT (24.73160 80.03762)
9 1d1802f8-1d40-413f-b6fb-1cdfbca64244 1373 1.702377e+09 RGI2000-v7.0-G-07-01374 07 07-01 G025456E80055N 103406 563 2008-08-14T00:00:00 ... POLYGON ((25.92807 80.13459, 25.86515 80.14133... POLYGON ((25.92807 80.13459, 25.86515 80.14133... POLYGON ((25.92807 80.13459, 25.47418 80.14555... POLYGON ((25.92807 80.13459, 25.47418 80.14555... GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY POINT (25.58529 80.09301)
10 1d1802f8-1d40-413f-b6fb-1cdfbca64244 1369 1.702377e+09 RGI2000-v7.0-G-07-01370 07 07-01 G023619E79932N 103538 563 2008-08-14T00:00:00 ... POLYGON ((23.82852 80.07212, 23.71964 80.08317... POLYGON ((23.82852 80.07212, 23.71964 80.08317... POLYGON ((23.82852 80.07212, 23.51371 80.08824... POLYGON ((23.82852 80.07212, 23.50217 80.11880... POLYGON ((23.82852 80.07212, 23.10169 79.97521... GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY POINT (23.57713 79.96388)
11 1d1802f8-1d40-413f-b6fb-1cdfbca64244 1368 1.702377e+09 RGI2000-v7.0-G-07-01369 07 07-01 G023229E79872N 103600 563 2008-08-14T00:00:00 ... POLYGON ((23.39479 79.87727, 23.27959 79.92802... POLYGON ((23.39479 79.87727, 23.10170 79.97522... POLYGON ((23.39479 79.87727, 23.10170 79.97522... POLYGON ((23.39479 79.87727, 23.10170 79.97522... POLYGON ((23.39479 79.87727, 23.10170 79.97522... GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY POINT (23.08983 79.89514)
12 1d1802f8-1d40-413f-b6fb-1cdfbca64244 1386 1.702377e+09 RGI2000-v7.0-G-07-01387 07 07-01 G023284E79812N 103601 563 2008-08-14T00:00:00 ... POLYGON ((23.82300 79.82722, 23.48302 79.85643... POLYGON ((23.82300 79.82722, 23.48302 79.85643... POLYGON ((23.82300 79.82722, 22.68488 79.86105... POLYGON ((23.82300 79.82722, 22.68488 79.86105... GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY POINT (22.97474 79.80681)
13 1d1802f8-1d40-413f-b6fb-1cdfbca64244 1385 1.702377e+09 RGI2000-v7.0-G-07-01386 07 07-01 G022972E79705N 103677 563 2008-08-14T00:00:00 ... POLYGON ((23.51095 79.61636, 23.59802 79.64253... POLYGON ((23.51095 79.61636, 23.77910 79.81205... POLYGON ((23.51095 79.61636, 23.77910 79.81205... POLYGON ((23.51095 79.61636, 23.77910 79.81205... POLYGON ((23.51095 79.61636, 23.77910 79.81205... POLYGON ((23.51095 79.61636, 23.77910 79.81205... GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY POINT (22.84230 79.68748)
14 1d1802f8-1d40-413f-b6fb-1cdfbca64244 1366 1.702377e+09 RGI2000-v7.0-G-07-01367 07 07-01 G021825E79896N 103007 563 2008-08-14T00:00:00 ... POLYGON ((21.93413 79.85268, 21.96394 79.85258... POLYGON ((21.93413 79.85268, 22.06898 79.92153... POLYGON ((21.93413 79.85268, 22.06898 79.92153... POLYGON ((21.93413 79.85268, 22.06898 79.92153... GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY POINT (21.85429 79.88357)
15 1d1802f8-1d40-413f-b6fb-1cdfbca64244 1333 1.702377e+09 RGI2000-v7.0-G-07-01334 07 07-01 G021796E79622N 103678 563 2008-08-14T00:00:00 ... POLYGON ((21.83193 79.69106, 21.58519 79.69272... POLYGON ((21.83193 79.69106, 21.58519 79.69272... POLYGON ((21.83193 79.69106, 21.58519 79.69272... POLYGON ((21.83193 79.69106, 21.58519 79.69272... GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY POINT (21.85494 79.62986)
16 1d1802f8-1d40-413f-b6fb-1cdfbca64244 1334 1.702377e+09 RGI2000-v7.0-G-07-01335 07 07-01 G021458E79648N 103679 563 2008-08-14T00:00:00 ... POLYGON ((21.64138 79.66167, 21.37382 79.67463... POLYGON ((21.64138 79.66167, 21.37382 79.67463... POLYGON ((21.64138 79.66167, 21.37382 79.67463... POLYGON ((21.64138 79.66167, 21.34171 79.70431... GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY POINT (21.28029 79.65719)
17 1d1802f8-1d40-413f-b6fb-1cdfbca64244 1328 1.702377e+09 RGI2000-v7.0-G-07-01329 07 07-01 G020876E79476N 103924 563 2008-08-14T00:00:00 ... POLYGON ((20.87766 79.54107, 20.79480 79.54571... POLYGON ((20.87766 79.54107, 20.79480 79.54571... POLYGON ((20.87766 79.54107, 20.79202 79.45287... GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY POINT (20.84421 79.49624)
18 1d1802f8-1d40-413f-b6fb-1cdfbca64244 1406 1.702377e+09 RGI2000-v7.0-G-07-01407 07 07-01 G021009E79425N 103038 563 2008-08-14T00:00:00 ... POLYGON ((21.12787 79.45388, 20.95301 79.47293... POLYGON ((21.12787 79.45388, 20.95301 79.47293... POLYGON ((21.12787 79.45388, 20.95301 79.47293... POLYGON ((21.12787 79.45388, 20.79202 79.45289... GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY POINT (20.96169 79.41871)
19 1d1802f8-1d40-413f-b6fb-1cdfbca64244 1329 1.702377e+09 RGI2000-v7.0-G-07-01330 07 07-01 G021054E79491N 103923 563 2008-08-14T00:00:00 ... POLYGON ((21.08305 79.52011, 21.03776 79.52169... POLYGON ((21.08305 79.52011, 21.05612 79.54072... POLYGON ((21.08305 79.52011, 20.87765 79.54106... POLYGON ((21.08305 79.52011, 20.87765 79.54106... GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY POINT (21.03982 79.49662)
20 1d1802f8-1d40-413f-b6fb-1cdfbca64244 1407 1.702377e+09 RGI2000-v7.0-G-07-01408 07 07-01 G021326E79440N 103039 563 2008-08-14T00:00:00 ... POLYGON ((21.58231 79.43692, 21.52333 79.47735... POLYGON ((21.58231 79.43692, 21.52333 79.47735... POLYGON ((21.58231 79.43692, 21.52333 79.47735... POLYGON ((21.58231 79.43692, 21.52333 79.47735... GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY POINT (21.34514 79.42637)
21 1d1802f8-1d40-413f-b6fb-1cdfbca64244 1330 1.702377e+09 RGI2000-v7.0-G-07-01331 07 07-01 G021261E79495N 103922 563 2008-08-14T00:00:00 ... POLYGON ((21.31298 79.53806, 21.17458 79.54324... POLYGON ((21.31298 79.53806, 21.17458 79.54324... POLYGON ((21.31298 79.53806, 21.08745 79.52373... POLYGON ((21.31298 79.53806, 21.08745 79.52373... GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY POINT (21.29802 79.50302)
22 1d1802f8-1d40-413f-b6fb-1cdfbca64244 1331 1.702377e+09 RGI2000-v7.0-G-07-01332 07 07-01 G021278E79612N 103723 563 2008-08-14T00:00:00 ... POLYGON ((21.48689 79.62724, 21.32241 79.64561... POLYGON ((21.48689 79.62724, 21.18218 79.64959... POLYGON ((21.48689 79.62724, 20.83832 79.63478... POLYGON ((21.48689 79.62724, 20.83832 79.63478... POLYGON ((21.48689 79.62724, 20.83832 79.63478... GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY POINT (21.43034 79.56264)
23 1d1802f8-1d40-413f-b6fb-1cdfbca64244 1408 1.702377e+09 RGI2000-v7.0-G-07-01409 07 07-01 G021473E79377N 103921 563 2008-08-14T00:00:00 ... POLYGON ((21.47844 79.36850, 21.52116 79.37683... POLYGON ((21.47844 79.36850, 21.48481 79.38424... GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY POINT (21.47474 79.37589)
24 1d1802f8-1d40-413f-b6fb-1cdfbca64244 1332 1.702377e+09 RGI2000-v7.0-G-07-01333 07 07-01 G021925E79522N 103724 563 2008-08-14T00:00:00 ... POLYGON ((22.78762 79.55351, 22.25726 79.61311... POLYGON ((22.78762 79.55351, 22.25726 79.61311... POLYGON ((22.78762 79.55351, 22.25726 79.61311... POLYGON ((22.78762 79.55351, 22.25726 79.61311... POLYGON ((22.78762 79.55351, 21.96265 79.58672... GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY POINT (22.28005 79.51971)
25 1d1802f8-1d40-413f-b6fb-1cdfbca64244 1383 1.702377e+09 RGI2000-v7.0-G-07-01384 07 07-01 G023559E79453N 102990 563 2001-07-10T00:00:00 ... POLYGON ((24.32909 79.46529, 24.23908 79.49731... POLYGON ((24.32909 79.46529, 24.23908 79.49731... POLYGON ((24.32909 79.46529, 23.51095 79.61638... POLYGON ((24.32909 79.46529, 23.51095 79.61638... POLYGON ((24.32909 79.46529, 23.08874 79.59801... POLYGON ((24.32909 79.46529, 23.08874 79.59801... GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY POINT (23.51215 79.40139)
26 1d1802f8-1d40-413f-b6fb-1cdfbca64244 1382 1.702377e+09 RGI2000-v7.0-G-07-01383 07 07-01 G024340E79634N 102992 563 2001-07-10T00:00:00 ... POLYGON ((24.88487 79.71135, 24.56826 79.83148... POLYGON ((24.88487 79.71135, 24.56826 79.83148... POLYGON ((24.88487 79.71135, 24.56826 79.83148... POLYGON ((24.88487 79.71135, 24.56826 79.83148... POLYGON ((24.88487 79.71135, 23.82300 79.82722... POLYGON ((24.88487 79.71135, 23.82300 79.82722... GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY POINT (24.55449 79.59314)
27 1d1802f8-1d40-413f-b6fb-1cdfbca64244 1380 1.702377e+09 RGI2000-v7.0-G-07-01381 07 07-01 G025297E79771N 102994 563 2001-07-10T00:00:00 ... POLYGON ((26.60240 79.71439, 26.02355 79.80326... POLYGON ((26.60240 79.71439, 25.73731 79.86217... POLYGON ((26.60240 79.71439, 25.73731 79.86217... POLYGON ((26.60240 79.71439, 25.73731 79.86217... POLYGON ((26.60240 79.71439, 25.73731 79.86217... GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY POINT (25.60107 79.74181)
28 1d1802f8-1d40-413f-b6fb-1cdfbca64244 1381 1.702377e+09 RGI2000-v7.0-G-07-01382 07 07-01 G025168E79640N 102993 563 2001-07-10T00:00:00 ... POLYGON ((25.82048 79.59366, 25.49336 79.65104... POLYGON ((25.82048 79.59366, 25.49336 79.65104... POLYGON ((25.82048 79.59366, 24.88486 79.71135... POLYGON ((25.82048 79.59366, 24.88486 79.71135... POLYGON ((25.82048 79.59366, 24.88486 79.71135... GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY POINT (25.27525 79.60726)
29 1d1802f8-1d40-413f-b6fb-1cdfbca64244 1384 1.702377e+09 RGI2000-v7.0-G-07-01385 07 07-01 G024396E79406N 102991 563 2001-07-10T00:00:00 ... POLYGON ((24.94681 79.36036, 24.83217 79.37133... POLYGON ((24.94681 79.36036, 24.32908 79.46529... POLYGON ((24.94681 79.36036, 24.32908 79.46529... POLYGON ((24.94681 79.36036, 24.32908 79.46529... POLYGON ((24.94681 79.36036, 24.32908 79.46529... GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY POINT (24.44701 79.36571)
30 1d1802f8-1d40-413f-b6fb-1cdfbca64244 1327 1.702377e+09 RGI2000-v7.0-G-07-01328 07 07-01 G020422E79503N 103040 563 2008-08-14T00:00:00 ... POLYGON ((20.49390 79.52168, 20.32130 79.52976... POLYGON ((20.49390 79.52168, 20.32130 79.52976... POLYGON ((20.49390 79.52168, 20.32130 79.52976... POLYGON ((20.49390 79.52168, 20.32130 79.52976... GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY POINT (20.42813 79.49038)
31 1d1802f8-1d40-413f-b6fb-1cdfbca64244 1326 1.702377e+09 RGI2000-v7.0-G-07-01327 07 07-01 G020369E79543N 103041 563 2008-08-14T00:00:00 ... POLYGON ((20.49391 79.52166, 20.46099 79.53849... POLYGON ((20.49391 79.52166, 20.46099 79.53849... POLYGON ((20.49391 79.52166, 20.34601 79.57645... GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY POINT (20.39502 79.54861)
32 1d1802f8-1d40-413f-b6fb-1cdfbca64244 1324 1.702377e+09 RGI2000-v7.0-G-07-01325 07 07-01 G020175E79572N 103042 563 2008-08-14T00:00:00 ... POLYGON ((20.34602 79.57643, 20.36162 79.58162... POLYGON ((20.34602 79.57643, 20.26847 79.59996... POLYGON ((20.34602 79.57643, 20.14526 79.59636... POLYGON ((20.34602 79.57643, 20.14526 79.59636... GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY POINT (20.18901 79.57013)
33 1d1802f8-1d40-413f-b6fb-1cdfbca64244 1325 1.702377e+09 RGI2000-v7.0-G-07-01326 07 07-01 G020060E79600N 103043 563 2008-08-14T00:00:00 ... POLYGON ((20.21783 79.60406, 20.08223 79.61707... POLYGON ((20.21783 79.60406, 20.04301 79.62836... POLYGON ((20.21783 79.60406, 20.04301 79.62836... GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY POINT (20.06903 79.60509)
34 1d1802f8-1d40-413f-b6fb-1cdfbca64244 1323 1.702377e+09 RGI2000-v7.0-G-07-01324 07 07-01 G020218E79508N 103044 563 2008-08-14T00:00:00 ... POLYGON ((20.06195 79.58221, 19.96127 79.60156... POLYGON ((20.06195 79.58221, 19.96127 79.60156... POLYGON ((20.06195 79.58221, 19.96127 79.60156... POLYGON ((20.06195 79.58221, 19.94729 79.51969... GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY POINT (20.13619 79.51699)

35 rows × 49 columns

We can now plot the RGI v7.0 boundary definition for Austonna ice cap’s Basin 3, by extracting it from the returned polygons.

[8]:
austfonna_basin_3 = gpd.GeoSeries(
    rgi_data.loc[rgi_data['rgi_id'] == 'RGI2000-v7.0-G-07-01383', 'original_polygons'], crs=4326)

fig, ax = plt.subplots(figsize=(10, 10))

austfonna_basin_3.to_crs(3413).plot(ax=ax, facecolor=geo_filter_colour, edgecolor=geo_filter_colour, alpha=0.5)

ax.set_xlim(982000, 1106000)
ax.set_ylim(-484000, -322000)

ax.set_xlabel('x (meters)')
ax.set_ylabel('y (meters)')
ax.set_title(f"Austfonna Basin 3 ({rgi_data['rgi_id'].values[0]}, EPSG 3413)")
ctx.add_basemap(ax, source=ctx.providers.GeoportailFrance.orthos, crs=3413, attribution=False, zoom=8)
../_images/example_notebooks_austfonna_basin_3_16_0.png

Querying data

We can now query the two Specklia datasets for our study region.

[9]:
cryosat_data = {}
sources = {}
additional_filters = {
    'CryoTEMPO-EOLIS Point Product': [
        {'column': 'uncertainty', 'operator': '<=', 'threshold': 4}],
    'CryoTEMPO-EOLIS Gridded Product': []}

for ds_name, data in eolis_datasets.items():
    query_start_time = perf_counter()
    cryosat_data[ds_name], sources[ds_name] = client.query_dataset(
        dataset_id=data['dataset_id'],
        epsg4326_polygon=austfonna_basin_3.iloc[0],
        min_datetime=datetime(2015, 1, 1),
        max_datetime=datetime(2015, 12, 1),
        columns_to_return=['timestamp', 'elevation', 'uncertainty'],
        additional_filters=additional_filters[ds_name])

    print(f'Query took {perf_counter()-query_start_time:.2f} seconds to complete.')
    print(f'{ds_name} Query complete, {len(cryosat_data[ds_name])} points returned, '
          f'drawn from {len(sources[ds_name])} original sources.')
    print(f'Columns within the data: {cryosat_data[ds_name].columns}\n\n')
Query took 7.93 seconds to complete.
CryoTEMPO-EOLIS Point Product Query complete, 314486 points returned, drawn from 22 original sources.
Columns within the data: Index(['timestamp', 'elevation', 'uncertainty', 'source_id', 'source_row_id',
       'geometry'],
      dtype='object')


Query took 3.83 seconds to complete.
CryoTEMPO-EOLIS Gridded Product Query complete, 3188 points returned, drawn from 11 original sources.
Columns within the data: Index(['timestamp', 'elevation', 'uncertainty', 'source_id', 'source_row_id',
       'geometry'],
      dtype='object')


Note that within sources we have all of the source information from the original product files, including both the Earth Explorer and the NetCDF4 headers, and with the source_id and source_row_id columns, the ability to trace each point we have just retrieved from its original source file.

If we wanted to, we could run a query that would give us back 100% of the information available in the originally ingested file.

Lastly, we plot the CryoSat-2 data over the top of our study polygon, illustrating the filtering that has been performed:

[10]:
for ds_name, cs_data in cryosat_data.items():
    # create a normalised colormap
    norm = mcolors.Normalize(vmin=cs_data['elevation'].min(), vmax=cs_data['elevation'].max())

    ax = austfonna_basin_3.to_crs(epsg=3413).plot(figsize=(10, 10), alpha=0.5)
    cs_data.to_crs(epsg=3413).plot(ax=ax, column='elevation', markersize=.1, norm=norm)

    ax.set_xlabel('EPSG 3413 x (m)')
    ax.set_ylabel('EPSG 3413 y (m)')
    ax.set_title(f"{ds_name} Elevation over Austfonna Basin 3 \n(RGI v6.0, EPSG 3413)")
    ctx.add_basemap(ax, source=ctx.providers.GeoportailFrance.orthos, crs=3413, attribution=False, zoom=10)
    cbar = plt.gcf().colorbar(plt.cm.ScalarMappable(norm=norm), ax=ax, shrink=.5)
    cbar.set_label('Elevation (m)')
../_images/example_notebooks_austfonna_basin_3_20_0.png
../_images/example_notebooks_austfonna_basin_3_20_1.png