Quick Start - Catalog

IBM Environmental Intelligence Service: Geospatial APIs contains a several petabytes of queryable data. It is therefore necessary to understand, briefly, the storage data model and how the metadata can be retrieved.

The Storage Model

The storage model in Geospatial APIs is illustrated by the following diagram:

Queries1

Data Sets

The Data Set is the highest tier in the hierarchy. It functions as a collection for Data Layers for which defaults (e.g. attributes, security controls etc) can be applied. In most cases, the Data Set serves as a collection for interrelated data, usually acquired contemporaneously, (e.g. the ‘bands’ in the data provided by the ESA Sentinel 2 satellite) however, there is nothing that restricts a Data Set from use on more informal terms.

Data Layers

The Data Layer is the tier of the hierarchy that is directly connected to the storage sub-system. The metadata defined here overwrites the Data Set defined defaults and applies directly to the manner in which the data is stored. When querying data from Geospatial APIs, this tier is the entry point.

In configuring a Data Layer, two important attributes, in particular, are the level and the datatype (as they determine storage size and speed of retrieval at query time):

  • the level is a granularity band range,

  • the datatype is the data type that will be applied to the storage.

The most efficient level and type that can contain the data to be uploaded to a Data Layer should always be used.

Level:

  • 29 (11.125 cm at equator)

  • 28 (22.25 cm at equator)

  • 27 (44.5 cm at equator)

  • 26 (0.89 m at equator)

  • 25 (1.78 m at equator)

  • 24 (3.56 m at equator)

  • 23 (7.12 m at equator)

  • 22 (14.24 m at equator)

  • 21 (28.48 m at equator)

  • 20 (56.96 m at equator)

  • 19 (113.92 m at equator)

  • 18 (227.84 m at equator)

  • 17 (455.68 m at equator)

  • 16 (911.36 m at equator)

  • 15 (1.82272 km at equator)

  • 14 (3.64544 km at equator)

  • 13 (7.29088 km at equator)

  • 12 (14.58176 km at equator)

  • 11 (29.16352 km at equator)

  • 10 (58.32704 km at equator)

  • 9 (116.65408 km at equator)

  • 8 (233.30816 km at equator)

  • 7 (466.61632 km at equator)

  • 6 (933.23264 km at equator)

  • 5 (1866.46528 km at equator)

  • 4 (3732.93056 km at equator)

  • 3 (7465.86112 km at equator)

  • 2 (14931.72224 km at equator)

  • 1 (29863.44448 km at equator)

Data Types for Raster:

  • bt (Byte)

  • sh (Short Integer)

  • in (Integer)

  • db (Double)

  • fl (Float)

Data Layer Dimensions

A Data Layer Dimension gives context to the value recorded for the data layer. For example, weather forecast models typically create a prediction for each day in the future for a number of days. When the weather model is run on a Monday it will generate a predictions for temperature on Tuesday, Wednesday, Thursday, Friday and Saturday. When the forecast is run on the Tuesday the predications are made for Wednesday, Thursday, Friday etc. The days for which predictions are generated are the data layer dimensions.

Imagine a temperature prediction data layer which records the temperate against a spatial and temporal key:

lat/long/timestamp = temperature

This only stores one temperature value per key. Each time we run the weather model we generate 5 temperature predictions. One for each of the 5 future days. How can we store them? The answer is that the key is extended with a dimension:

lat/long/timestamp/dimension = temperature

Now each place and time can also have 5 predictions associated with it.

In Geospatial APIs we typically arrange that data so that:

timestamp = the date/time that the value is valid
dimenion  = the predicted day number (horizon) from the model run

Using this scheme is it straightforward to compare different model predictions for the same date and time.

Searching the Catalog

Search by Word

In order to search the whole catalog for a term, you can use the catalog sub-module and the method search:

catalog.search(<search_term>)

In the example below, the catalog is searched for all datasets and datalayers that contain references to Sentinel. The information returned is a reduced version of the metadata held by the catalog that can be used to determine the prima facie usefulness of the returned datasets and datalayers to the user.

[1]:
import os
import ibmpairs.authentication as authentication
import ibmpairs.client as client
import ibmpairs.catalog as catalog

EI_API_KEY   = os.environ.get('EI_API_KEY')
EI_TENANT_ID = os.environ.get('EI_TENANT_ID')
EI_ORG_ID    = os.environ.get('EI_ORG_ID')

ei_client = client.get_client(api_key   = EI_API_KEY,
                              tenant_id = EI_TENANT_ID,
                              org_id    = EI_ORG_ID)

search_by_word = catalog.search("Sentinel")
search_by_word
2023-08-15 09:05:47 - paw - INFO - The client authentication method is assumed to be OAuth2.
2023-08-15 09:05:47 - paw - INFO - Legacy Environment is False
2023-08-15 09:05:49 - paw - INFO - Authentication success.
2023-08-15 09:05:49 - paw - INFO - HOST: https://api.ibm.com/geospatial/run/na/core/v3
[1]:
dataset_id data_layer_id data_layer_name data_layer_description_short data_layer_description_long data_layer_level data_layer_type data_layer_unit data_set_id data_set_name data_set_description_short data_set_description_long
0 176 51648 Band 11 (SWIR 1612 nm) Central wavelength 1613.7/1610.4 nm, bandwidth... 22 Raster 176 High res imagery (ESA Sentinel 2) (TOA) This dataset contains layers from the Level-1C... Images from the European Space Agency Sentinel...
1 176 50364 hollstein A cloud mask as defined in a paper by Hollstei... A cloud mask as defined in a paper by Hollstei... 23 Raster 176 High res imagery (ESA Sentinel 2) (TOA) This dataset contains layers from the Level-1C... Images from the European Space Agency Sentinel...
2 176 49358 Band 4 (red) Central wavelength 664.5/665.0 nm, bandwidth 3... 23 Raster 176 High res imagery (ESA Sentinel 2) (TOA) This dataset contains layers from the Level-1C... Images from the European Space Agency Sentinel...
3 176 49359 Band 8 (NIR) Central wavelength 835.1/833.0 nm, bandwidth 1... 23 Raster 176 High res imagery (ESA Sentinel 2) (TOA) This dataset contains layers from the Level-1C... Images from the European Space Agency Sentinel...
4 176 50096 Band 10 (SWIR 1370 nm) Central wavelength 1373.5/1376.9 nm, bandwidth... 20 Raster 176 High res imagery (ESA Sentinel 2) (TOA) This dataset contains layers from the Level-1C... Images from the European Space Agency Sentinel...
5 176 51649 Band 12 (SWIR 2202 nm) Central wavelength 2202.4/2185.7 nm, bandwidth... 22 Raster 176 High res imagery (ESA Sentinel 2) (TOA) This dataset contains layers from the Level-1C... Images from the European Space Agency Sentinel...
6 177 49464 Normalized difference vegetation index A measure of the amount of vegetation at the p... NDVI is generally calculated as (NIR - VIR) / ... 23 Raster 177 High res imagery (ESA Sentinel 2) Images from the European Space Agency Sentinel... Sentinel-2 is a set of two satellites in polar...
7 177 49683 Band 6 (vegetation red edge) Central wavelength 740.2/739.1 nm, bandwidth 1... 22 Raster 177 High res imagery (ESA Sentinel 2) Images from the European Space Agency Sentinel... Sentinel-2 is a set of two satellites in polar...
8 177 49680 Band 2 (blue) Central wavelength 496.6/492.1 nm, bandwidth 9... 23 Raster 177 High res imagery (ESA Sentinel 2) Images from the European Space Agency Sentinel... Sentinel-2 is a set of two satellites in polar...
9 177 49689 Water vapor Atmospheric water vapor content derived from b... "Water vapour retrieval over land is performed... 22 Raster 177 High res imagery (ESA Sentinel 2) Images from the European Space Agency Sentinel... Sentinel-2 is a set of two satellites in polar...
10 177 49360 Band 4 (red) Central wavelength 664.5/665.0 nm, bandwidth 3... 23 Raster 177 High res imagery (ESA Sentinel 2) Images from the European Space Agency Sentinel... Sentinel-2 is a set of two satellites in polar...
11 177 49361 Band 8 (NIR) Central wavelength 835.1/833.0 nm, bandwidth 1... 23 Raster 177 High res imagery (ESA Sentinel 2) Images from the European Space Agency Sentinel... Sentinel-2 is a set of two satellites in polar...
12 177 50250 Cloud probability map A 20m mask indicating the calculated probabili... 22 Raster 177 High res imagery (ESA Sentinel 2) Images from the European Space Agency Sentinel... Sentinel-2 is a set of two satellites in polar...
13 177 49686 Band 11 (SWIR 1610 nm) Central wavelength 1613.7/1610.4 nm, bandwidth... 22 Raster 177 High res imagery (ESA Sentinel 2) Images from the European Space Agency Sentinel... Sentinel-2 is a set of two satellites in polar...
14 177 49687 Band 12 (SWIR 2200 nm) Central wavelength 2202.4/2185.7 nm, bandwidth... 22 Raster 177 High res imagery (ESA Sentinel 2) Images from the European Space Agency Sentinel... Sentinel-2 is a set of two satellites in polar...
15 177 49690 Band 1 (coastal aerosol) Central wavelength 443.9/442.3 nm, bandwidth 2... 20 Raster 177 High res imagery (ESA Sentinel 2) Images from the European Space Agency Sentinel... Sentinel-2 is a set of two satellites in polar...
16 177 49688 Aerosol optical thickness "AOT describes attenuation of sunlight by a co... For Sentinel 2 level 2A products, the "aerosol... 22 Raster 177 High res imagery (ESA Sentinel 2) Images from the European Space Agency Sentinel... Sentinel-2 is a set of two satellites in polar...
17 177 49691 Band 9 (water vapor) Central wavelength 945.0/943.2 nm, bandwidth 2... 20 Raster 177 High res imagery (ESA Sentinel 2) Images from the European Space Agency Sentinel... Sentinel-2 is a set of two satellites in polar...
18 177 49685 Band 8a (narrow IR) Central wavelength 864.8/864.0 nm, bandwidth 3... 22 Raster 177 High res imagery (ESA Sentinel 2) Images from the European Space Agency Sentinel... Sentinel-2 is a set of two satellites in polar...
19 177 49684 Band 7 (vegetation red edge) Central wavelength 782.5/779.7 nm, bandwidth 2... 22 Raster 177 High res imagery (ESA Sentinel 2) Images from the European Space Agency Sentinel... Sentinel-2 is a set of two satellites in polar...
20 177 49681 Band 3 (green) Central wavelength 560.0/559.0 nm, bandwidth 4... 23 Raster 177 High res imagery (ESA Sentinel 2) Images from the European Space Agency Sentinel... Sentinel-2 is a set of two satellites in polar...
21 177 49682 Band 5 (vegetation red edge) Central wavelength 703.9/703.8 nm, bandwidth 1... 22 Raster 177 High res imagery (ESA Sentinel 2) Images from the European Space Agency Sentinel... Sentinel-2 is a set of two satellites in polar...
22 177 49362 Scene classification Pixel-by-pixel classification in image of 4 ty... The different labels and classifications are: ... 22 Raster 177 High res imagery (ESA Sentinel 2) Images from the European Space Agency Sentinel... Sentinel-2 is a set of two satellites in polar...
23 335 50254 VH polarization Synthetic Aperture Radar with VH Partial polar... The data is preprocessed following correction ... 23 Raster 335 Satellite based radar (ESA Sentinel 1) Sentinel-1 is an imaging radar mission providi... Sentinel-1 provides dual polarization capabili...
24 335 50253 VV polarization Synthetic Aperture Radar with VV Partial polar... The data is preprocessed following correction ... 23 Raster 335 Satellite based radar (ESA Sentinel 1) Sentinel-1 is an imaging radar mission providi... Sentinel-1 provides dual polarization capabili...

The full metadata for the dataset or datalayer can then be retrieved by subsequent methods, e.g.:

[2]:
dl = catalog.get_data_layer(id = "49464")
print(dl)
{
    "color_table": {
        "colors": "153A91,84F588,FFF787,FF7C3B,FF1921",
        "id": "4",
        "name": "Spectral"
    },
    "created_at": "1593733829000",
    "crs": "",
    "data_layer_response": {},
    "dataset_id": "177",
    "datatype": "sh",
    "description_long": "NDVI is generally calculated as (NIR - VIR) / (NIR + VIR). For Sentinel 2, this translates to (band 8 - band 4) / (band 8 + band 4).",
    "description_short": "A measure of the amount of vegetation at the pixel.",
    "id": "49464",
    "interpolation": "bilinear",
    "latitude_max": 90.0,
    "latitude_min": -90.0,
    "level": 23,
    "longitude_max": 180.0,
    "longitude_min": -180.0,
    "name": "Normalized difference vegetation index",
    "name_alternate": "Normalized difference vegetation index",
    "permanence": true,
    "properties": {},
    "rating": 1.0,
    "spatial_coverage": {
        "country": [
            "Belgium",
            "Bolivia",
            "France",
            "Germany",
            "India",
            "Indonesia",
            "Luxembourg",
            "Netherlands",
            "Switzerland",
            "Thailand",
            "United Kingdom",
            "United States of America"
        ]
    },
    "temporal_max": "1665604800000",
    "temporal_min": "1438387200000",
    "type": "R",
    "units": "[-1, 1]",
    "updated_at": "1665648134000"
}

Search by ID

In the event that you already know the Geospatial APIs ID for a data set or data layer the search method can also be used to retrieve the limited metadata returned by the search method:

[3]:
search_by_id = catalog.search("49464")
search_by_id
[3]:
dataset_id data_layer_id data_layer_name data_layer_description_short data_layer_description_long data_layer_level data_layer_type data_layer_unit data_set_id data_set_name data_set_description_short data_set_description_long
0 177 49464 Normalized difference vegetation index A measure of the amount of vegetation at the p... NDVI is generally calculated as (NIR - VIR) / ... 23 Raster 177 High res imagery (ESA Sentinel 2) Images from the European Space Agency Sentinel... Sentinel-2 is a set of two satellites in polar...

Retrieve Metadata

A series of helper methods can be used to retrieve the metadata concerning Data Sets, Data Layers and Data Layer Dimensions. The results for these catalog methods can be displayed (returned in a truncated form as a dataframe):

ds_list = catalog.get_data_sets()
ds_list.display()

or printed (which returns a string representation of an object):

ds = catalog.get_data_set(id = <data_set_id>)
print(ds)

Where applicable, the methods also allow for return of lists of embedded objects (e.g. Data Layers per Data Set):

catalog.get_data_layers(data_set_id = <data_set_id>)

Get a List of Data Sets

In order to return all data sets available to a user, you can execute the get_data_sets method:

[4]:
ds_list = catalog.get_data_sets()
ds_list.display()
[4]:
id name description_short description_long
0 574 15-46 day ECMWF weather forecast (ML post-proc... ML Post-processed temperature and precipitatio... ML Post-processed temperature and precipitatio...
1 575 1-15 day ECMWF weather forecast (ML post-proce... ML Post-processed temperature and precipitatio... ML Post-processed temperature and precipitatio...
2 306 Atmospheric weather (ERA5) A global reanalysis data set produced by ECMWF... ERA5 is the direct successor to the ERA Interi...
3 63 High resolution aerial imagery (USDA NAIP) High resolution (<1m) aerial imagery from the ... National Agriculture Imagery Program (NAIP) ac...
4 369 Buoy Data Wave Summary Precise wave conditions around bouys belonging... Local measurements of wave attributes and thei...
... ... ... ... ...
93 379 US healthcare infrastructure Dataset includes data layers with relevant inf... NaN
94 392 US mobility (Descartes Labs) Mobility data derived from mobile devices. Note that the exact source of the data -- i.e....
95 93 Soil properties USA The USA soil property data is derived from the... It contains information about soil as collecte...
96 332 Ocean wave forecast (ECMWF ENS) 15-day ahead forecast of ocean conditions. The ECMWF Ensemble Prediction System (EPS) cre...
97 284 Wildfire risk potential Wildfire Hazard Potential can help to inform e... Wildfire Hazard Potential* for the conterminou...

98 rows × 4 columns

Get a Data Set

In order to return all metadata about a Data Set, the get_data_set method can be used with a provided Data Set ID:

[5]:
ds = catalog.get_data_set(id = "177")
print(ds)
{
    "category": {
        "id": 1,
        "name": "Satellite"
    },
    "created_at": "1593733829000",
    "crs": "",
    "data_set_response": {},
    "data_source_attribution": "Source: European Space Agency - ESA; Contains modified Copernicus Sentinel data [2018 and Ongoing]",
    "data_source_description": "Level-2A is generated by the Payload Data Ground Segment using the Sen2Cor processor. Level-2A products are made available to users via the Copernicus Open Access Hub: https://scihub.copernicus.eu/dhus/#/home",
    "data_source_name": "European Space Agency Sentinel-2",
    "description_long": "Sentinel-2 is a set of two satellites in polar orbit 180 degrees apart. It monitors land surface and coastal waters every 5 days at the equator and more frequently at mid-latitudes. The coverage is between latitudes 56\u00b0 south and 84\u00b0 north. Images are in 13 spectral bands at various ground resolutions: 4 bands at 10 m, 6 at 20 m and 3 at 60 m; the orbital swath is 290 km wide. Level 2A (L2A) images are 100x100 km ortho-rectified and spatially registered on a  global reference system; they are corrected for the atmosphere so they represent ground conditions. Currently Geospatial APIs ingests Bands 4 (red), 8 (NIR) and SCL (Scene Classification). An NDVI layer, called \"NDVI sh\", is calculated from Bands 4 and 8. Tiles are ingested on request. Currently there is some coverage for tiles in USA, Brazil, India and the Netherlands for selected days in 2018 and 2019. Timestamps in this dataset are rounded down to 0:00 UTC from the Satellite's sensing time.",
    "description_short": "Images from the European Space Agency Sentinel 2 satellite pair which view land surface regions in 13 spectral bands every 5 days or faster.",
    "id": "177",
    "key": "esa-sentinel-2-l2a",
    "lag_horizon": "0 years 0 mons 0 days 0 hours 0 mins 432000.0 secs",
    "lag_horizon_description": "Data is available within 24 hours.",
    "latitude_max": 90.0,
    "latitude_min": -90.0,
    "level": 23,
    "longitude_max": 180.0,
    "longitude_min": -180.0,
    "max_layers": 30,
    "name": "High res  imagery (ESA Sentinel 2)",
    "name_alternate": "ESA Sentinel 2 Level-2A",
    "offering_status": "Commercial Use",
    "permanence": true,
    "properties": {
        "application": [
            "Agriculture"
        ],
        "domain": [
            "Land surface"
        ],
        "sector": [
            "Animals/livestock",
            "Transportation/infrastructure",
            "Vegetation/crops"
        ],
        "source": [
            "Satellite",
            "Survey"
        ],
        "type": [
            "Data product"
        ]
    },
    "rating": 4.0,
    "spatial_coverage": {
        "country": [
            "Belgium",
            "Bolivia",
            "France",
            "Germany",
            "India",
            "Indonesia",
            "Luxembourg",
            "Netherlands",
            "Switzerland",
            "Thailand",
            "United Kingdom",
            "United States of America"
        ]
    },
    "status": "Active",
    "temporal_max": "1665604800000",
    "temporal_min": "1438387200000",
    "temporal_resolution": "0 years 0 mons 0 days 0 hours 0 mins 432000.0 secs",
    "temporal_resolution_description": "5 days at the equator, less at mid latitudes.",
    "update_interval_description": "Uploads are run daily. However, note the temporal resolution.",
    "update_interval_max": "0 years 0 mons 0 days 0 hours 0 mins 86400.0 secs",
    "updated_at": "1665645277000"
}

Get a List of Data Layers per Data Set

As discussed above in §. The Storage Model, Data Layers belong to Data Sets. The get_data_layers method can be used to return a list of all Data Layers in a specific Data Set by providing the Data Set ID:

[6]:
dl_list_by_set = catalog.get_data_layers(data_set_id = "177")
dl_list_by_set.display()
[6]:
dataset_id id name description_short description_long level type unit
0 177 49464 Normalized difference vegetation index A measure of the amount of vegetation at the p... NDVI is generally calculated as (NIR - VIR) / ... NaN nan NaN
1 177 49683 Band 6 (vegetation red edge) Central wavelength 740.2/739.1 nm, bandwidth 1... NaN NaN nan NaN
2 177 49680 Band 2 (blue) Central wavelength 496.6/492.1 nm, bandwidth 9... NaN NaN nan NaN
3 177 49689 Water vapor Atmospheric water vapor content derived from b... "Water vapour retrieval over land is performed... NaN nan NaN
4 177 49360 Band 4 (red) Central wavelength 664.5/665.0 nm, bandwidth 3... NaN NaN nan NaN
5 177 49361 Band 8 (NIR) Central wavelength 835.1/833.0 nm, bandwidth 1... NaN NaN nan NaN
6 177 50250 Cloud probability map A 20m mask indicating the calculated probabili... NaN NaN nan NaN
7 177 49686 Band 11 (SWIR 1610 nm) Central wavelength 1613.7/1610.4 nm, bandwidth... NaN NaN nan NaN
8 177 49687 Band 12 (SWIR 2200 nm) Central wavelength 2202.4/2185.7 nm, bandwidth... NaN NaN nan NaN
9 177 49690 Band 1 (coastal aerosol) Central wavelength 443.9/442.3 nm, bandwidth 2... NaN NaN nan NaN
10 177 49688 Aerosol optical thickness "AOT describes attenuation of sunlight by a co... For Sentinel 2 level 2A products, the "aerosol... NaN nan NaN
11 177 49691 Band 9 (water vapor) Central wavelength 945.0/943.2 nm, bandwidth 2... NaN NaN nan NaN
12 177 49685 Band 8a (narrow IR) Central wavelength 864.8/864.0 nm, bandwidth 3... NaN NaN nan NaN
13 177 49684 Band 7 (vegetation red edge) Central wavelength 782.5/779.7 nm, bandwidth 2... NaN NaN nan NaN
14 177 49681 Band 3 (green) Central wavelength 560.0/559.0 nm, bandwidth 4... NaN NaN nan NaN
15 177 49682 Band 5 (vegetation red edge) Central wavelength 703.9/703.8 nm, bandwidth 1... NaN NaN nan NaN
16 177 49362 Scene classification Pixel-by-pixel classification in image of 4 ty... The different labels and classifications are: ... NaN nan NaN

Get a List of Data Layers

In the same way as the get_data_sets method can be used to return all Data Sets a user has access to, the get_data_layers method can be used to return all Data Layers a user has access to:

[7]:
dl_list = catalog.get_data_layers()
dl_list.display()
[7]:
dataset_id id name description_short description_long level type unit
0 5 55 Mid infrared (band 7) MODIS Aqua 16 Day Spectral Image of Band 7 (mi... 250m resolution Surface Reflectance Band 7 (21... 18 Raster NaN
1 5 51 Normalized difference vegetation index (NDVI) MODIS Aqua 16 day normalized vegetation index The NDVI is calculated from the near-infrared ... 18 Raster [0-1]
2 5 53 Near infrared (band 2) MODIS Aqua 16 Day Spectral Image of Band 2 (Ne... 250m resolution Surface Reflectance Band 2 (84... 18 Raster NaN
3 5 56 Composite day of the year MODIS Aqua 16 Days Composite Day of the Year This is a day number, from 1 to 366 18 Raster NaN
4 5 54 Blue (band 3) MODIS Aqua 16 Day Spectral Image of Band 3 (blue) 250m resolution Surface Reflectance Band 3 (45... 18 Raster NaN
... ... ... ... ... ... ... ... ...
892 580 51586 LIDAR Composite DSM 1m 2017 Environment Agency LIDAR Composite Digital Sur... NaN 26 Raster NaN
893 580 51583 LIDAR Composite DTM 10m 2019 Environment Agency LIDAR Composite Digital Ter... NaN 23 Raster NaN
894 581 51628 Risk of Surface Water Flooding Depth Surface water flood depth in integer categorie... NaN 25 Raster NaN
895 1020 49554 Maximum temperature NaN NaN 11 Raster NaN
896 1020 49555 Minimum temperature NaN NaN 11 Raster NaN

897 rows × 8 columns

Get a Data Layer

The metadata about a specific Data Layer can be returned by providing the get_data_layer method a Data Layer ID:

[8]:
dl = catalog.get_data_layer(id = "49464")
print(dl)
{
    "color_table": {
        "colors": "153A91,84F588,FFF787,FF7C3B,FF1921",
        "id": "4",
        "name": "Spectral"
    },
    "created_at": "1593733829000",
    "crs": "",
    "data_layer_response": {},
    "dataset_id": "177",
    "datatype": "sh",
    "description_long": "NDVI is generally calculated as (NIR - VIR) / (NIR + VIR). For Sentinel 2, this translates to (band 8 - band 4) / (band 8 + band 4).",
    "description_short": "A measure of the amount of vegetation at the pixel.",
    "id": "49464",
    "interpolation": "bilinear",
    "latitude_max": 90.0,
    "latitude_min": -90.0,
    "level": 23,
    "longitude_max": 180.0,
    "longitude_min": -180.0,
    "name": "Normalized difference vegetation index",
    "name_alternate": "Normalized difference vegetation index",
    "permanence": true,
    "properties": {},
    "rating": 1.0,
    "spatial_coverage": {
        "country": [
            "Belgium",
            "Bolivia",
            "France",
            "Germany",
            "India",
            "Indonesia",
            "Luxembourg",
            "Netherlands",
            "Switzerland",
            "Thailand",
            "United Kingdom",
            "United States of America"
        ]
    },
    "temporal_max": "1665604800000",
    "temporal_min": "1438387200000",
    "type": "R",
    "units": "[-1, 1]",
    "updated_at": "1665648134000"
}

Get a List of Data Layer Dimensions per Data Layer

To list all Data Layer Dimensions belonging to a Data Layer, the get_data_layer_dimensions method is provided a Data Layer ID:

[9]:
dlds = catalog.get_data_layer_dimensions(data_layer_id = "49166")
dlds.display()
2023-08-15 09:06:08 - paw - INFO - https://api.ibm.com/geospatial/run/na/core/v3/datalayers/49166/datalayer_dimensions
[9]:
id short_name identifier order full_name type unit
0 243 issuetime A 1 NaN NaN NaN
1 244 horizon B 2 NaN NaN NaN

Get a Data Layer Dimension

To find out more about a Data Layer Dimension, once the Data Layer Dimension ID is known, the get_data_layer_dimension method is provided a Data Layer Dimension ID:

[10]:
dld = catalog.get_data_layer_dimension(id = "243")
print(dld)
{
    "data_layer_dimension_response": {},
    "full_name": "Issuetime",
    "id": "243",
    "identifier": "A",
    "order": 1,
    "short_name": "issuetime",
    "type": "integer",
    "unit": "hour"
}