OpenEO Platform logo

Introduction to openEO using ILWISPy as processing backend¶

Notebook prepared by Ben Maathuis and Bas Retsios. ITC-University of Twente, Enschede. The Netherlands. Note that authentication details for GEE access was obtained from internet resources (source: https://github.com/Open-EO/openeo-earthengine-driver)

To get started with openEO Platform review a number of online resources first.¶

Review the article "The openEO API–Harmonising the Use of Earth Observation Cloud Services Using Virtual Data Cube Functionalities" https://www.researchgate.net/publication/350109855_The_openEO_API-Harmonising_the_Use_of_Earth_Observation_Cloud_Services_Using_Virtual_Data_Cube_Functionalities

Review:¶

A list of all known openEO providers and their services: https://hub.openeo.org/

Review:¶

Check the collections and editor functionality at: https://editor.openeo.cloud/

Review:¶

Get some more information on the data cube concepts: https://openeo.org/documentation/1.0/datacubes.html

Check the required site packages, if not installed already, ensure that they are available before you continue. Install required site packages with command 'pip install package'

This notebook will create within this notebook folder a sub-directory 'Intro_openEO_ILWISPy' used to store the downloaded data and will be assigned as your ILWISPy working-directory.

Connect to openEO Platform and print list of available collections¶

In [1]:
import os
import ilwis
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
import openeo
from zipfile import ZipFile
from datetime import date, timedelta, datetime
import numpy as np
from pathlib import Path

Import ILWISPy and set working folder¶

In [2]:
ilwis.version()
Out[2]:
'1.0 build 20240531'
In [3]:
Path('./Intro_openEO_ILWISPy').mkdir(parents=True, exist_ok=True)
In [4]:
work_dir = os.getcwd() + '/Intro_openEO_ILWISPy'

#set the working directory for ILWISPy
ilwis.setWorkingCatalog(work_dir)
print(work_dir)
/home/ilwispy/notebooks/ilwispy_tutorial/Intro_openEO_ILWISPy

Check OpenEO version and connect to the Earth Engine OpenEO Demo Version¶

In [5]:
openeo.__version__
Out[5]:
'0.35.0'
In [6]:
connection = openeo.connect("https://earthengine.openeo.org/v1.0")
In [7]:
#https://openeo.org/documentation/1.0/python/#full-example
#connection.authenticate_basic("username", "password")

print("Authenticate with Basic authentication")
connection.authenticate_basic("group1", "test123")
Authenticate with Basic authentication
Out[7]:
<Connection to 'https://earthengine.openeo.org/v1.0' with BasicBearerAuth>

Get started with the openEO Python Client.¶

Before you continue review the information provided at: https://docs.openeo.cloud/getting-started/python/#connect-to-openeo-platform-and-explore

Processes in openEO are operations that can be applied on (EO) data (e.g. calculate the mean of an array, or mask out observations outside a given polygon). The output of one process can be used as the input of another process, and by doing so, multiple processes can be connected that way in a larger "process graph" that implements a certain algorithm.

In [8]:
connection.list_processes()
Out[8]:

Obtain information about available collections - data sources¶

In [9]:
print(connection.list_collection_ids())
['USGS/3DEP/10m', 'USGS/3DEP/1m', 'AAFC/ACI', 'ACA/reef_habitat/v1_0', 'ACA/reef_habitat/v2_0', 'AHN/AHN2_05M_INT', 'AHN/AHN2_05M_NON', 'AHN/AHN2_05M_RUW', 'AHN/AHN3', 'AHN/AHN4', 'ASTER/AST_L1T_003', 'NASA/ASTER_GED/AG100_003', 'AU/GA/AUSTRALIA_5M_DEM', 'AU/GA/DEM_1SEC/v10/DEM-H', 'AU/GA/DEM_1SEC/v10/DEM-S', 'BIOPAMA/GlobalOilPalm/v1', 'BNETD/land_cover/v1', 'BNU/FGS/CCNL/v1', 'CAS/IGSNRR/PML/V2', 'CAS/IGSNRR/PML/V2_v017', 'CAS/IGSNRR/PML/V2_v018', 'CANADA/NFIS/NTEMS/CA_FOREST_AGE', 'NOAA/CDR/ATMOS_NEAR_SURFACE/V2', 'NOAA/CDR/AVHRR/AOT/V3', 'NOAA/CDR/AVHRR/LAI_FAPAR/V4', 'NOAA/CDR/AVHRR/LAI_FAPAR/V5', 'NOAA/CDR/AVHRR/NDVI/V4', 'NOAA/CDR/AVHRR/NDVI/V5', 'NOAA/CDR/AVHRR/SR/V4', 'NOAA/CDR/AVHRR/SR/V5', 'NOAA/CDR/GRIDSAT-B1/V2', 'NOAA/CDR/HEAT_FLUXES/V2', 'NOAA/CDR/OISST/V2', 'NOAA/CDR/OISST/V2_1', 'NOAA/CDR/PATMOSX/V53', 'NOAA/CDR/SST_PATHFINDER/V53', 'NOAA/CDR/SST_WHOI/V2', 'NOAA/CFSV2/FOR6H', 'CGIAR/SRTM90_V4', 'CIESIN/GPWv411/GPW_Basic_Demographic_Characteristics', 'CIESIN/GPWv411/GPW_Land_Area', 'CIESIN/GPWv411/GPW_Mean_Administrative_Unit_Area', 'CIESIN/GPWv411/GPW_National_Identifier_Grid', 'CIESIN/GPWv411/GPW_Population_Count', 'CIESIN/GPWv411/GPW_Population_Density', 'CIESIN/GPWv411/GPW_UNWPP-Adjusted_Population_Count', 'CIESIN/GPWv411/GPW_UNWPP-Adjusted_Population_Density', 'CIESIN/GPWv411/GPW_Water_Area', 'CIESIN/GPWv411/GPW_Water_Mask', 'CIESIN/GPWv4/ancillary-data-grids', 'CIESIN/GPWv4/population-count', 'CIESIN/GPWv4/population-density', 'CIESIN/GPWv4/unwpp-adjusted-population-count', 'CIESIN/GPWv4/unwpp-adjusted-population-density', 'COPERNICUS/CORINE/V18_5_1/100m', 'COPERNICUS/DEM/GLO30', 'COPERNICUS/Landcover/100m/Proba-V-C3/Global', 'COPERNICUS/Landcover/100m/Proba-V/Global', 'COPERNICUS/S1_GRD', 'COPERNICUS/S2', 'COPERNICUS/CORINE/V20/100m', 'COPERNICUS/S2_SR', 'COPERNICUS/S3/OLCI', 'CIESIN/GPWv411/GPW_Data_Context', 'COPERNICUS/S5P/NRTI/L3_AER_AI', 'COPERNICUS/S5P/NRTI/L3_AER_LH', 'COPERNICUS/S5P/NRTI/L3_CLOUD', 'COPERNICUS/S2_CLOUD_PROBABILITY', 'COPERNICUS/S2_SR_HARMONIZED', 'COPERNICUS/S5P/NRTI/L3_NO2', 'COPERNICUS/S5P/NRTI/L3_O3', 'COPERNICUS/S5P/OFFL/L3_AER_AI', 'COPERNICUS/S5P/OFFL/L3_AER_LH', 'COPERNICUS/S5P/OFFL/L3_CH4', 'COPERNICUS/S5P/NRTI/L3_HCHO', 'COPERNICUS/S5P/NRTI/L3_CO', 'COPERNICUS/S5P/OFFL/L3_HCHO', 'COPERNICUS/S5P/OFFL/L3_CO', 'COPERNICUS/S5P/OFFL/L3_O3', 'COPERNICUS/S5P/OFFL/L3_O3_TCL', 'COPERNICUS/S5P/NRTI/L3_SO2', 'COPERNICUS/S5P/OFFL/L3_SO2', 'CPOM/CryoSat2/ANTARCTICA_DEM', 'CSIC/SPEI/2_10', 'CSIC/SPEI/2_8', 'COPERNICUS/S5P/OFFL/L3_CLOUD', 'CSIRO/SLGA', 'CSP/ERGo/1_0/Global/ALOS_CHILI', 'COPERNICUS/S2_HARMONIZED', 'CSP/ERGo/1_0/Global/ALOS_mTPI', 'COPERNICUS/S5P/OFFL/L3_NO2', 'CSP/ERGo/1_0/Global/SRTM_CHILI', 'CSIC/SPEI/2_9', 'CSP/ERGo/1_0/Global/SRTM_mTPI', 'CSP/ERGo/1_0/Global/SRTM_topoDiversity', 'CSP/ERGo/1_0/US/CHILI', 'CSP/ERGo/1_0/US/landforms', 'CSP/ERGo/1_0/US/lithology', 'CSP/ERGo/1_0/US/mTPI', 'CSP/ERGo/1_0/US/physioDiversity', 'DLR/WSF/WSF2015/v1', 'NOAA/DMSP-OLS/CALIBRATED_LIGHTS_V4', 'NOAA/DMSP-OLS/NIGHTTIME_LIGHTS', 'DOE/ORNL/LandScan_HD/Ukraine_202201', 'CSP/ERGo/1_0/Global/SRTM_landforms', 'CSP/ERGo/1_0/Global/ALOS_topoDiversity', 'CSP/ERGo/1_0/Global/ALOS_landforms', 'ECMWF/ERA5_LAND/DAILY_AGGR', 'ECMWF/ERA5_LAND/MONTHLY_AGGR', 'ECMWF/CAMS/NRT', 'ECMWF/ERA5/MONTHLY', 'ECMWF/ERA5_LAND/MONTHLY_BY_HOUR', 'EDF/MethaneSAT/MethaneAIR/L3concentration', 'EDF/MethaneSAT/MethaneAIR/L4area', 'EDF/MethaneSAT/MethaneAIR/methaneair-L4area-2021', 'EO1/HYPERION', 'ESA/CCI/FireCCI/5_1', 'ESA/GLOBCOVER_L4_200901_200912_V2_3', 'ESA/WorldCereal/2021/MARKERS/v100', 'ECMWF/ERA5/DAILY', 'ESA/WorldCover/v100', 'ESA/WorldCover/v200', 'Estonia/Maamet/orthos/mono', 'Estonia/Maamet/orthos/mono_low_flying', 'Estonia/Maamet/orthos/rgb', 'Estonia/Maamet/orthos/rgb_low_flying', 'FAO/GHG/1/DROSA_A', 'FAO/GHG/1/DROSE_A', 'FAO/SOFO/1/FPP', 'FAO/SOFO/1/TPP', 'FAO/WAPOR/2/L1_AETI_D', 'FAO/WAPOR/2/L1_E_D', 'FAO/WAPOR/2/L1_I_D', 'FAO/WAPOR/2/L1_NPP_D', 'FAO/WAPOR/2/L1_RET_D', 'FAO/WAPOR/2/L1_RET_E', 'FAO/WAPOR/2/L1_T_D', 'FIRMS', 'NASA/FLDAS/NOAH01/C/GL/M/V001', 'FORMA/FORMA_500m', 'Finland/MAVI/VV/50cm', 'Finland/SMK/VV/50cm', 'Finland/SMK/V/50cm', 'ESA/WorldCereal/2021/MODELS/v100', 'ECMWF/ERA5_LAND/MONTHLY', 'USGS/GAP/CONUS/2011', 'USGS/GAP/HI/2001', 'USGS/GAP/PR/2001', 'LARSE/GEDI/GEDI02_A_002_MONTHLY', 'NASA/GEOS-CF/v1/fcst/htf', 'NASA/GEOS-CF/v1/rpl/htf', 'USGS/GFSAD1000_V0', 'USGS/GFSAD1000_V1', 'GFW/GFF/V1/fishing_hours', 'GFW/GFF/V1/vessel_hours', 'NASA/GIMMS/3GV0', 'GLCF/GLS_TCC', 'GLCF/GLS_WATER', 'NASA/GLDAS/V021/NOAH/G025/T3H', 'NASA/GLDAS/V022/CLSM/G025/DA1D', 'NASA/GLDAS/V20/NOAH/G025/T3H', 'NASA/GEOS-CF/v1/rpl/tavg1hr', 'GLOBAL_FLOOD_DB/MODIS_EVENTS/V1', 'NOAA/GOES/16/FDCC', 'NOAA/GOES/16/FDCF', 'NOAA/GOES/16/MCMIPC', 'NOAA/GOES/16/MCMIPF', 'NOAA/GOES/17/FDCF', 'USGS/GAP/AK/2001', 'NOAA/GOES/17/MCMIPC', 'NOAA/GOES/17/MCMIPF', 'NOAA/GOES/17/MCMIPM', 'NOAA/GOES/18/FDCC', 'NOAA/GOES/18/FDCF', 'ECMWF/ERA5_LAND/HOURLY', 'NOAA/GOES/17/FDCC', 'NOAA/GOES/16/MCMIPM', 'NOAA/GOES/18/MCMIPF', 'NOAA/GOES/18/MCMIPM', 'GOOGLE/CLOUD_SCORE_PLUS/V1/S2_HARMONIZED', 'GOOGLE/GLOBAL_CCDC/V1', 'GOOGLE/Research/open-buildings-temporal/v1', 'NASA/GPM_L3/IMERG_MONTHLY_V06', 'NASA/GPM_L3/IMERG_V06', 'NASA/GRACE/MASS_GRIDS/LAND', 'GOOGLE/DYNAMICWORLD/V1', 'NOAA/GOES/18/MCMIPC', 'NASA/GRACE/MASS_GRIDS/MASCON', 'NASA/GRACE/MASS_GRIDS/MASCON_CRI', 'NASA/GRACE/MASS_GRIDS/OCEAN', 'NASA/GRACE/MASS_GRIDS/OCEAN_EOFR', 'GRIDMET/DROUGHT', 'NASA/GSFC/MERRA/aer/2', 'NASA/GSFC/MERRA/flx/2', 'NASA/GSFC/MERRA/lnd/2', 'NASA/GSFC/MERRA/rad/2', 'NASA/GSFC/MERRA/slv/2', 'Germany/Brandenburg/orthos/20cm', 'HYCOM/GLBu0_08/sea_surface_elevation', 'HYCOM/GLBu0_08/sea_temp_salinity', 'HYCOM/GLBu0_08/sea_water_velocity', 'HYCOM/sea_surface_elevation', 'HYCOM/sea_temp_salinity', 'HYCOM/sea_water_velocity', 'IDAHO_EPSCOR/GRIDMET', 'IDAHO_EPSCOR/MACAv2_METDATA_MONTHLY', 'IDAHO_EPSCOR/PDSI', 'IDAHO_EPSCOR/MACAv2_METDATA', 'IDAHO_EPSCOR/TERRACLIMATE', 'IGN/RGE_ALTI/1M/2_0', 'IPCC/AR6/SLP', 'ISDASOIL/Africa/v1/aluminium_extractable', 'ISDASOIL/Africa/v1/bedrock_depth', 'ISDASOIL/Africa/v1/bulk_density', 'ISDASOIL/Africa/v1/calcium_extractable', 'ISDASOIL/Africa/v1/carbon_organic', 'ISDASOIL/Africa/v1/carbon_total', 'ISDASOIL/Africa/v1/cation_exchange_capacity', 'ISDASOIL/Africa/v1/clay_content', 'ISDASOIL/Africa/v1/fcc', 'ISDASOIL/Africa/v1/iron_extractable', 'ISDASOIL/Africa/v1/magnesium_extractable', 'ISDASOIL/Africa/v1/nitrogen_total', 'ISDASOIL/Africa/v1/ph', 'ISDASOIL/Africa/v1/potassium_extractable', 'ISDASOIL/Africa/v1/sand_content', 'ISDASOIL/Africa/v1/silt_content', 'ISDASOIL/Africa/v1/stone_content', 'ISDASOIL/Africa/v1/sulphur_extractable', 'ISDASOIL/Africa/v1/texture_class', 'ISDASOIL/Africa/v1/zinc_extractable', 'ISDASOIL/Africa/v1/phosphorus_extractable', 'JAXA/ALOS/AVNIR-2/ORI', 'JAXA/ALOS/AW3D30/V1_1', 'JAXA/ALOS/AW3D30/V2_1', 'JAXA/ALOS/AW3D30/V2_2', 'JAXA/ALOS/AW3D30/V3_2', 'JAXA/ALOS/PALSAR-2/Level2_1/StripMap_202401', 'JAXA/ALOS/PALSAR-2/Level2_2/ScanSAR', 'JAXA/ALOS/PALSAR/YEARLY/FNF', 'JAXA/ALOS/PALSAR/YEARLY/FNF4', 'JAXA/ALOS/PALSAR/YEARLY/SAR', 'JAXA/ALOS/PALSAR/YEARLY/SAR_EPOCH', 'JAXA/GCOM-C/L3/LAND/LAI/V1', 'JAXA/GCOM-C/L3/LAND/LAI/V2', 'JAXA/GCOM-C/L3/LAND/LAI/V3', 'JAXA/GCOM-C/L3/LAND/LST/V1', 'JAXA/GCOM-C/L3/LAND/LST/V2', 'JAXA/GCOM-C/L3/LAND/LST/V3', 'JAXA/GCOM-C/L3/OCEAN/CHLA/V1', 'JAXA/GCOM-C/L3/OCEAN/CHLA/V2', 'JAXA/GCOM-C/L3/OCEAN/CHLA/V3', 'JAXA/GCOM-C/L3/OCEAN/SST/V1', 'JAXA/GCOM-C/L3/OCEAN/SST/V2', 'JAXA/GCOM-C/L3/OCEAN/SST/V3', 'JAXA/GPM_L3/GSMaP/v6/operational', 'JAXA/GPM_L3/GSMaP/v6/reanalysis', 'JAXA/GPM_L3/GSMaP/v7/operational', 'JAXA/GPM_L3/GSMaP/v8/operational', 'JCU/Murray/GIC/global_tidal_wetland_change/2019', 'NASA/JPL/global_forest_canopy_height_2005', 'JRC/D5/EUCROPMAP/V1', 'JRC/CEMS_GLOFAS/FloodHazard/v1', 'JRC/GFC2020/V1', 'JRC/GFC2020/V2', 'JRC/GFC2020_subtypes/V0', 'JRC/GHSL/P2016/BUILT_LDSMT_GLOBE_V1', 'JRC/GHSL/P2016/POP_GPW_GLOBE_V1', 'JRC/GHSL/P2016/SMOD_POP_GLOBE_V1', 'JRC/GHSL/P2023A/GHS_BUILT_H', 'JRC/GHSL/P2023A/GHS_BUILT_S', 'JRC/GHSL/P2023A/GHS_BUILT_S_10m', 'JRC/GHSL/P2023A/GHS_BUILT_V', 'JRC/GHSL/P2023A/GHS_POP', 'JRC/GHSL/P2023A/GHS_SMOD', 'JRC/GHSL/P2023A/GHS_SMOD_V2-0', 'JRC/GHSL/P2023A/GHS_BUILT_C', 'JRC/GSW1_0/GlobalSurfaceWater', 'JRC/GSW1_0/Metadata', 'JRC/GSW1_0/MonthlyHistory', 'JRC/GSW1_0/MonthlyRecurrence', 'JRC/GSW1_0/YearlyHistory', 'JRC/GSW1_1/Metadata', 'JRC/GSW1_1/GlobalSurfaceWater', 'JRC/GSW1_1/MonthlyHistory', 'JRC/GSW1_1/MonthlyRecurrence', 'JRC/GSW1_1/YearlyHistory', 'JRC/GSW1_2/GlobalSurfaceWater', 'JRC/GSW1_2/Metadata', 'JRC/GSW1_2/MonthlyHistory', 'JRC/GSW1_2/MonthlyRecurrence', 'JRC/GSW1_3/GlobalSurfaceWater', 'JRC/GSW1_3/Metadata', 'JRC/GSW1_3/MonthlyHistory', 'JRC/GSW1_3/MonthlyRecurrence', 'JRC/GSW1_3/YearlyHistory', 'JRC/GSW1_4/GlobalSurfaceWater', 'JRC/GSW1_2/YearlyHistory', 'JRC/GSW1_4/Metadata', 'JRC/GSW1_4/MonthlyRecurrence', 'JRC/GSW1_4/YearlyHistory', 'JRC/GSW1_4/MonthlyHistory', 'KNTU/LiDARLab/IranLandCover/V1', 'LANDFIRE/Fire/FRG/v1_2_0', 'LANDFIRE/Fire/MFRI/v1_2_0', 'LANDFIRE/Fire/PMS/v1_2_0', 'LANDFIRE/Fire/PRS/v1_2_0', 'LANDFIRE/Fire/SClass/v1_4_0', 'LANDFIRE/Fire/VCC/v1_4_0', 'LANDFIRE/Fire/VDep/v1_4_0', 'LANDFIRE/Vegetation/BPS/v1_4_0', 'LANDFIRE/Vegetation/EVC/v1_4_0', 'LANDFIRE/Fire/PLS/v1_2_0', 'LANDFIRE/Vegetation/EVH/v1_4_0', 'LANDSAT/COMPOSITES/C02/T1_L2_32DAY_BAI', 'LANDSAT/COMPOSITES/C02/T1_L2_32DAY_EVI', 'LANDSAT/COMPOSITES/C02/T1_L2_32DAY_NBR', 'LANDSAT/COMPOSITES/C02/T1_L2_32DAY_NDVI', 'LANDSAT/COMPOSITES/C02/T1_L2_32DAY_NDWI', 'LANDSAT/COMPOSITES/C02/T1_L2_8DAY_BAI', 'LANDSAT/COMPOSITES/C02/T1_L2_8DAY_EVI', 'LANDSAT/COMPOSITES/C02/T1_L2_8DAY_NDVI', 'LANDSAT/COMPOSITES/C02/T1_L2_8DAY_NDWI', 'LANDSAT/COMPOSITES/C02/T1_L2_ANNUAL_BAI', 'LANDSAT/COMPOSITES/C02/T1_L2_ANNUAL_EVI', 'LANDSAT/COMPOSITES/C02/T1_L2_ANNUAL_NBR', 'LANDSAT/COMPOSITES/C02/T1_L2_ANNUAL_NDVI', 'LANDSAT/GLS1975', 'LANDSAT/COMPOSITES/C02/T1_L2_ANNUAL_NDWI', 'LANDSAT/GLS1975_MOSAIC', 'LANDSAT/GLS2005', 'LANDSAT/GLS2005_L5', 'LANDSAT/GLS2005_L7', 'LANDSAT/COMPOSITES/C02/T1_L2_8DAY_NBR', 'LANDSAT/LC08/C02/T1_L2', 'LANDSAT/LC08/C02/T1_RT', 'LANDSAT/LC08/C02/T1_RT_TOA', 'LANDSAT/LC08/C02/T1_TOA', 'LANDSAT/LC08/C02/T2', 'LANDSAT/LC08/C02/T2_L2', 'LANDSAT/LC08/C02/T2_TOA', 'LANDSAT/LC09/C02/T1', 'LANDSAT/LC09/C02/T1_L2', 'LANDSAT/LC09/C02/T1_TOA', 'LANDSAT/LC09/C02/T2', 'LANDSAT/LC09/C02/T2_L2', 'LANDSAT/LC09/C02/T2_TOA', 'LANDSAT/LE07/C02/T1', 'LANDSAT/LE07/C02/T1_L2', 'LANDSAT/LE07/C02/T1_RT', 'LANDSAT/LE07/C02/T1_RT_TOA', 'LANDSAT/LE07/C02/T1_TOA', 'LANDSAT/LE07/C02/T2', 'LANDSAT/LE07/C02/T2_L2', 'LANDSAT/LE07/C02/T2_TOA', 'LANDSAT/LM01/C02/T1', 'LANDSAT/LM01/C02/T2', 'LANDSAT/LM02/C02/T1', 'LANDSAT/LM02/C02/T2', 'LANDSAT/LM03/C02/T1', 'LANDSAT/LM03/C02/T2', 'LANDSAT/LM04/C02/T1', 'LANDSAT/LM04/C02/T2', 'LANDSAT/LM05/C02/T1', 'LANDSAT/LM05/C02/T2', 'LANDSAT/LT04/C02/T1', 'LANDSAT/LT04/C02/T1_L2', 'LANDSAT/LT04/C02/T1_TOA', 'LANDSAT/LT04/C02/T2', 'LANDSAT/LT04/C02/T2_L2', 'LANDFIRE/Vegetation/EVT/v1_4_0', 'LANDSAT/LT05/C02/T1', 'LANDSAT/LT05/C02/T1_L2', 'LANDSAT/LT05/C02/T1_TOA', 'LANDSAT/LT05/C02/T2', 'LANDSAT/LT05/C02/T2_L2', 'LANDSAT/LT05/C02/T2_TOA', 'LANDSAT/MANGROVE_FORESTS', 'LARSE/GEDI/GEDI02_B_002_MONTHLY', 'LARSE/GEDI/GEDI04_A_002_MONTHLY', 'LARSE/GEDI/GEDI04_B_002', 'LARSE/GEDI/GRIDDEDVEG_002/COUNTS/V1/12KM', 'LARSE/GEDI/GRIDDEDVEG_002/COUNTS/V1/1KM', 'LARSE/GEDI/GRIDDEDVEG_002/COUNTS/V1/6KM', 'LARSE/GEDI/GRIDDEDVEG_002/V1/12KM', 'LARSE/GEDI/GRIDDEDVEG_002/V1/1KM', 'LARSE/GEDI/GRIDDEDVEG_002/V1/6KM', 'USGS/LIMA/MOSAIC', 'USGS/LIMA/SR', 'Latvia/Maamet/orthos/cir', 'Latvia/Maamet/orthos/rgb', 'NASA/MEASURES/GFCC/TC/v3', 'MERIT/DEM/v1_0_3', 'MERIT/Hydro_reduced/v1_0_1', 'MERIT/Hydro/v1_0_1', 'MODIS/006/MCD12Q2', 'MODIS/006/MCD12Q1', 'MODIS/006/MCD15A3H', 'MODIS/006/MCD19A2_GRANULES', 'MODIS/006/MCD43A1', 'MODIS/006/MCD43A2', 'MODIS/006/MCD43A3', 'MODIS/006/MCD43A4', 'MODIS/006/MCD64A1', 'MODIS/006/MCD43C3', 'MODIS/006/MOD08_M3', 'MODIS/006/MOD09A1', 'MODIS/006/MOD09GQ', 'MODIS/006/MOD09GA', 'MODIS/006/MOD11A1', 'MODIS/006/MOD09Q1', 'MODIS/006/MOD10A1', 'MODIS/006/MOD11A2', 'MODIS/006/MOD13A1', 'MODIS/006/MOD13A2', 'MODIS/006/MOD13Q1', 'MODIS/006/MOD14A1', 'MODIS/006/MOD15A2H', 'MODIS/006/MOD14A2', 'MODIS/006/MOD16A2', 'MODIS/006/MOD17A2H', 'MODIS/006/MOD17A3H', 'MODIS/006/MOD17A3HGF', 'MODIS/006/MOD44W', 'MODIS/006/MOD44B', 'MODIS/006/MODOCGA', 'MODIS/006/MYD08_M3', 'MODIS/006/MYD09A1', 'MODIS/006/MYD09GQ', 'MODIS/006/MYD09GA', 'MODIS/006/MYD10A1', 'MODIS/006/MYD09Q1', 'MODIS/006/MYD11A1', 'MODIS/006/MYD11A2', 'MODIS/006/MYD13A1', 'MODIS/006/MYD13A2', 'MODIS/006/MYD14A1', 'MODIS/006/MYD13Q1', 'MODIS/006/MYD14A2', 'CSP/ERGo/1_0/US/topoDiversity', 'MODIS/006/MYD17A3H', 'MODIS/006/MYDOCGA', 'MODIS/006/MYD17A3HGF', 'MODIS/055/MOD17A3', 'MODIS/061/MCD12C1', 'MODIS/006/MYD17A2H', 'MODIS/061/MCD12Q1', 'MODIS/061/MCD12Q2', 'MODIS/061/MCD18A1', 'MODIS/061/MCD15A3H', 'MODIS/061/MCD18C2', 'MODIS/061/MCD19A1_GRANULES', 'MODIS/061/MCD19A2_GRANULES', 'MODIS/061/MCD43A1', 'MODIS/061/MCD43A2', 'MODIS/061/MCD43A4', 'MODIS/061/MCD43A3', 'MODIS/061/MCD43C3', 'MODIS/061/MCD64A1', 'MODIS/061/MOD08_M3', 'MODIS/061/MOD09A1', 'MODIS/061/MOD09CMG', 'MODIS/061/MOD09GQ', 'MODIS/061/MOD09GA', 'MODIS/061/MOD10A2', 'MODIS/061/MOD09Q1', 'MODIS/061/MOD10A1', 'MODIS/061/MOD11A1', 'MODIS/061/MOD13A1', 'MODIS/061/MOD11A2', 'MODIS/061/MOD13A2', 'MODIS/061/MOD13A3', 'MODIS/061/MOD13C1', 'MODIS/061/MOD13Q1', 'MODIS/061/MOD14A2', 'MODIS/061/MOD14A1', 'MODIS/061/MOD15A2H', 'MODIS/061/MOD16A2', 'MODIS/061/MOD16A2GF', 'MODIS/061/MOD17A2HGF', 'MODIS/061/MOD17A2H', 'MODIS/061/MOD17A3HGF', 'MODIS/061/MOD21A1D', 'MODIS/061/MOD21A1N', 'MODIS/061/MOD21C1', 'MODIS/061/MOD21C2', 'MODIS/061/MOD21C3', 'MODIS/061/MOD44B', 'MODIS/061/MYD08_M3', 'MODIS/061/MYD09A1', 'MODIS/061/MYD09CMG', 'MODIS/061/MYD09GQ', 'MODIS/061/MYD09GA', 'MODIS/061/MYD09Q1', 'MODIS/061/MYD10A1', 'MODIS/061/MYD11A1', 'MODIS/061/MYD11A2', 'MODIS/061/MYD13A1', 'MODIS/061/MYD13A3', 'MODIS/061/MYD13A2', 'MODIS/061/MYD13C1', 'MODIS/061/MYD13Q1', 'MODIS/061/MYD14A1', 'MODIS/061/MYD14A2', 'MODIS/061/MYD15A2H', 'MODIS/061/MYD17A3HGF', 'MODIS/061/MYD17A2H', 'MODIS/061/MYD21A1D', 'MODIS/061/MYD21A1N', 'MODIS/061/MYD21C1', 'MODIS/061/MYD21C2', 'MODIS/062/MCD18A1', 'MODIS/062/MCD18C2', 'MODIS/061/MYD21C3', 'MODIS/MCD43A1', 'MODIS/MCD43A2', 'MODIS/MCD43A4_006_BAI', 'MODIS/MCD43A4', 'MODIS/MCD43A4_006_NDSI', 'MODIS/MCD43A4_006_EVI', 'MODIS/MCD43A4_006_NDVI', 'MODIS/MCD43A4_006_NDWI', 'MODIS/MCD43A4_BAI', 'MODIS/MCD43A4_EVI', 'MODIS/MCD43A4_NDSI', 'MODIS/MCD43A4_NDVI', 'MODIS/MCD43A4_NDWI', 'MODIS/MOD09A1', 'MODIS/MOD09GA', 'MODIS/MOD09GA_006_BAI', 'MODIS/MOD09GA_006_EVI', 'MODIS/MOD09GA_006_NDVI', 'MODIS/MOD09GA_006_NDSI', 'MODIS/MOD09GA_006_NDWI', 'MODIS/MOD09GA_BAI', 'MODIS/MOD09GA_EVI', 'MODIS/MOD09GA_NDSI', 'MODIS/MOD09GA_NDWI', 'MODIS/MOD09GA_NDVI', 'MODIS/MOD09GQ', 'MODIS/MOD09Q1', 'MODIS/MOD11A1', 'MODIS/MOD10A1', 'MODIS/MOD11A2', 'MODIS/MOD13A1', 'MODIS/MOD44W/MOD44W_005_2000_02_24', 'MODIS/MOD13Q1', 'MODIS/MYD09A1', 'MODIS/MYD09GA', 'MODIS/MYD09GA_006_BAI', 'MODIS/MYD09GA_006_EVI', 'MODIS/MYD09GA_006_NDSI', 'MODIS/MYD09GA_006_NDWI', 'MODIS/MYD09GA_006_NDVI', 'MODIS/MYD09GA_BAI', 'MODIS/MYD09GA_EVI', 'MODIS/MYD09GA_NDSI', 'MODIS/MYD09GA_NDVI', 'MODIS/MYD09GA_NDWI', 'MODIS/MYD09GQ', 'MODIS/MYD09Q1', 'MODIS/MYD11A1', 'MODIS/MYD10A1', 'MODIS/MYD11A2', 'MODIS/MYD13A1', 'MODIS/MYD13Q1', 'MODIS/NTSG/MOD16A2/105', 'NASA/NASADEM_HGT/001', 'NASA/EMIT/L1B/RAD', 'NASA/EMIT/L2B/CH4ENH', 'NASA/EMIT/L2B/CH4PLM', 'NASA/GDDP-CMIP6', 'NASA/GEOS-CF/v1/fcst/tavg1hr', 'NASA/EMIT/L2A/RFL', 'NASA/GPM_L3/IMERG_MONTHLY_V07', 'NASA/GPM_L3/IMERG_V07', 'NASA/GRACE/MASS_GRIDS_V03/MASCON', 'NASA/GRACE/MASS_GRIDS_V03/MASCON_CRI', 'NASA/GRACE/MASS_GRIDS_V04/LAND', 'NASA/GRACE/MASS_GRIDS_V04/MASCON', 'NASA/GRACE/MASS_GRIDS_V04/MASCON_CRI', 'NASA/GRACE/MASS_GRIDS_V04/OCEAN', 'NASA/HLS/HLSL30/v002', 'NASA/HLS/HLSS30/v002', 'NASA/LANCE/NOAA20_VIIRS/C2', 'CSP/ERGo/1_0/US/physiography', 'NASA/NEX-DCP30', 'NASA/NEX-DCP30_ENSEMBLE_STATS', 'LANDSAT/LC08/C02/T1', 'NASA/GSFC/MERRA/aer_nv/2', 'LANDSAT/LT04/C02/T2_TOA', 'NASA/NEX-GDDP', 'NASA/NLDAS/FORA0125_H002', 'NASA/OCEANDATA/MODIS-Aqua/L3SMI', 'NASA/OCEANDATA/MODIS-Terra/L3SMI', 'NASA/OCEANDATA/SeaWiFS/L3SMI', 'NASA/ORNL/DAYMET_V3', 'NASA/ORNL/DAYMET_V4', 'NASA/ORNL/biomass_carbon_density/v1', 'NASA/ORNL/global_forest_classification_2020/V1', 'NASA/SMAP/SPL3SMP_E/005', 'NASA/SMAP/SPL3SMP_E/006', 'NASA/SMAP/SPL4SMGP/007', 'NASA/VIIRS/002/VNP09GA', 'NASA/VIIRS/002/VNP09H1', 'NASA/VIIRS/002/VNP13A1', 'NASA/VIIRS/002/VNP14A1', 'NASA/VIIRS/002/VNP15A2H', 'NASA/VIIRS/002/VNP21A1D', 'NASA/VIIRS/002/VNP21A1N', 'NASA_USDA/HSL/SMAP10KM_soil_moisture', 'NASA_USDA/HSL/SMAP_soil_moisture', 'NASA_USDA/HSL/soil_moisture', 'NCEP_RE/sea_level_pressure', 'NCEP_RE/surface_temp', 'NCEP_RE/surface_wv', 'NOAA/NGDC/ETOPO1', 'USGS/NLCD_RELEASES/2016_REL', 'USGS/NLCD_RELEASES/2019_REL/NLCD', 'USGS/NLCD_RELEASES/2019_REL/RCMAP/V4/COVER', 'USGS/NLCD_RELEASES/2019_REL/RCMAP/V5/COVER', 'NOAA/CDR/AVHRR/AOT/V4', 'NOAA/CDR/VIIRS/LAI_FAPAR/V1', 'NOAA/CDR/VIIRS/NDVI/V1', 'NOAA/CFSR', 'NOAA/CPC/Temperature', 'NOAA/CPC/Precipitation', 'NOAA/GFS0P25', 'NOAA/NCEP_DOE_RE2/total_cloud_coverage', 'NOAA/NWS/RTMA', 'NOAA/PERSIANN-CDR', 'NOAA/VIIRS/001/VNP09GA', 'NOAA/VIIRS/001/VNP09H1', 'NOAA/VIIRS/001/VNP13A1', 'NOAA/VIIRS/001/VNP14A1', 'NOAA/VIIRS/001/VNP15A2H', 'NOAA/VIIRS/001/VNP21A1D', 'NOAA/VIIRS/001/VNP21A1N', 'NOAA/VIIRS/001/VNP43IA1', 'NOAA/VIIRS/001/VNP46A1', 'NOAA/VIIRS/001/VNP43IA2', 'NOAA/VIIRS/001/VNP46A2', 'NOAA/VIIRS/001/VNP64A1', 'NOAA/VIIRS/DNB/ANNUAL_V21', 'NOAA/VIIRS/DNB/ANNUAL_V22', 'NOAA/VIIRS/DNB/MONTHLY_V1/VCMCFG', 'NOAA/VIIRS/DNB/MONTHLY_V1/VCMSLCFG', 'NRCan/CDEM', 'Netherlands/Beeldmateriaal/LUCHTFOTO_RGB', 'OREGONSTATE/PRISM/AN81d', 'OREGONSTATE/PRISM/AN81m', 'OREGONSTATE/PRISM/Norm81m', 'OREGONSTATE/PRISM/Norm91m', 'OSU/GIMP/2000_ICE_OCEAN_MASK', 'OSU/GIMP/DEM', 'NOAA/VIIRS/001/VNP22Q2', 'OSU/GIMP/ICE_VELOCITY_OPT', 'OpenET/DISALEXI/CONUS/GRIDMET/MONTHLY/v2_0', 'OpenET/EEMETRIC/CONUS/GRIDMET/MONTHLY/v2_0', 'OpenET/GEESEBAL/CONUS/GRIDMET/MONTHLY/v2_0', 'OpenET/PTJPL/CONUS/GRIDMET/MONTHLY/v2_0', 'OpenET/SIMS/CONUS/GRIDMET/MONTHLY/v2_0', 'OpenET/SSEBOP/CONUS/GRIDMET/MONTHLY/v2_0', 'OpenLandMap/CLM/CLM_LST_MOD11A2-DAYNIGHT_M/v01', 'OpenLandMap/CLM/CLM_LST_MOD11A2-DAY_M/v01', 'OpenLandMap/CLM/CLM_LST_MOD11A2-DAY_SD/v01', 'OpenLandMap/CLM/CLM_PRECIPITATION_SM2RAIN_M/v01', 'OpenLandMap/PNV/PNV_BIOME-TYPE_BIOME00K_C/v01', 'OpenLandMap/PNV/PNV_FAPAR_PROBA-V_D/v01', 'OpenLandMap/SOL/SOL_BULKDENS-FINEEARTH_USDA-4A1H_M/v02', 'OpenLandMap/SOL/SOL_CLAY-WFRACTION_USDA-3A1A1A_M/v02', 'OpenLandMap/SOL/SOL_GRTGROUP_USDA-SOILTAX-HAPLUDALFS_P/v01', 'OpenLandMap/SOL/SOL_GRTGROUP_USDA-SOILTAX_C/v01', 'OpenLandMap/SOL/SOL_ORGANIC-CARBON_USDA-6A1C_M/v02', 'OpenLandMap/SOL/SOL_PH-H2O_USDA-4C1A2A_M/v02', 'OpenLandMap/SOL/SOL_SAND-WFRACTION_USDA-3A1A1A_M/v02', 'OpenLandMap/SOL/SOL_TEXTURE-CLASS_USDA-TT_M/v02', 'Oxford/MAP/EVI_5km_Monthly', 'OSU/GIMP/2000_IMAGERY_MOSAIC', 'Oxford/MAP/LST_Day_5km_Monthly', 'Oxford/MAP/LST_Night_5km_Monthly', 'OpenLandMap/SOL/SOL_WATERCONTENT-33KPA_USDA-4B1C_M/v01', 'Oxford/MAP/TCB_5km_Monthly', 'Oxford/MAP/accessibility_to_healthcare_2019', 'Oxford/MAP/accessibility_to_cities_2015_v1_0', 'Oxford/MAP/friction_surface_2015_v1_0', 'Oxford/MAP/friction_surface_2019', 'RUB/RUBCLIM/LCZ/global_lcz_map/latest', 'RUB/RUBCLIM/LCZ/global_lcz_map/v1', 'SKYSAT/GEN-A/PUBLIC/ORTHO/MULTISPECTRAL', 'SKYSAT/GEN-A/PUBLIC/ORTHO/RGB', 'SNU/ESL/BESS/Rad/v1', 'Slovakia/orthos/25cm', 'Spain/PNOA/PNOA10', 'Switzerland/SWISSIMAGE/orthos/10cm', 'OpenET/ENSEMBLE/CONUS/GRIDMET/MONTHLY/v2_0', 'TEMPLATE/IMAGE_V2_1', 'TERN/AET/CMRSET_LANDSAT_V2_1', 'TERN/AET/CMRSET_LANDSAT_V2_2', 'TOMS/MERGED', 'TRMM/3B42', 'TRMM/3B43V7', 'TUBerlin/BigEarthNet/v1', 'Tsinghua/DESS/ChinaTerraceMap/v1', 'Tsinghua/FROM-GLC/GAIA/v10', 'UCSB-CHG/CHIRPS/DAILY', 'UCSB-CHG/CHIRPS/PENTAD', 'UCSB-CHG/CHIRTS/DAILY', 'UK/EA/ENGLAND_1M_TERRAIN/2022', 'UK/NHM/BII/V1', 'UMD/GLAD/PRIMARY_HUMID_TROPICAL_FORESTS/v1', 'UMD/hansen/global_forest_change_2013', 'UMD/hansen/global_forest_change_2014', 'UMD/hansen/global_forest_change_2015', 'UMD/hansen/global_forest_change_2015_v1_3', 'Oxford/MAP/IGBP_Fractional_Landcover_5km_Annual', 'TEMPLATE/IMAGE_COLLECTION_V2_3', 'Oxford/MAP/TCW_5km_Monthly', 'UMD/hansen/global_forest_change_2017_v1_5', 'UMD/hansen/global_forest_change_2020_v1_8', 'UMD/hansen/global_forest_change_2018_v1_6', 'UMD/hansen/global_forest_change_2021_v1_9', 'UMD/hansen/global_forest_change_2022_v1_10', 'UMN/PGC/ArcticDEM/V2/2m', 'UMD/hansen/global_forest_change_2023_v1_11', 'UMN/PGC/ArcticDEM/V2/5m', 'UMN/PGC/ArcticDEM/V3/2m', 'UMN/PGC/ArcticDEM/V3/2m_mosaic', 'UMN/PGC/REMA/V1_1/8m', 'UMN/PGC/REMA/V1/8m', 'UMN/PGC/REMA/V1/2m', 'UMT/Climate/IrrMapper_RF/v1_1', 'UMT/NTSG/v2/LANDSAT/GPP', 'UMT/Climate/IrrMapper_RF/v1_2', 'UMT/NTSG/v2/LANDSAT/NPP', 'UMT/NTSG/v2/MODIS/GPP', 'UMT/NTSG/v2/MODIS/NPP', 'UQ/murray/Intertidal/v1_1/data_mask', 'UQ/murray/Intertidal/v1_1/global_intertidal', 'UQ/murray/Intertidal/v1_1/qa_pixel_count', 'USDA/NAIP/DOQQ', 'UMD/hansen/global_forest_change_2019_v1_7', 'UMD/hansen/global_forest_change_2016_v1_4', 'USDA/NASS/CDL', 'USDA/WRC/v0', 'USFS/GTAC/LCMS/v2020-6', 'USFS/GTAC/LCMS/v2021-7', 'USFS/GTAC/LCMS/v2023-9', 'USFS/GTAC/TreeMap/v2016', 'USFS/GTAC/LCMS/v2020-5', 'USFS/GTAC/MTBS/annual_burn_severity_mosaics/v1', 'USGS/GMTED2010', 'USGS/GMTED2010_FULL', 'USGS/GTOPO30', 'USGS/NED', 'USGS/NLCD_RELEASES/2019_REL/RCMAP/V5/TRENDS', 'USGS/NLCD_RELEASES/2019_REL/RCMAP/V5/TRENDS_YEAR', 'USGS/NLCD_RELEASES/2020_REL/NALCMS', 'USFS/GTAC/LCMS/v2022-8', 'USGS/NLCD', 'USGS/NLCD_RELEASES/2023_REL/RCMAP/V6/COVER', 'USGS/NLCD_RELEASES/2023_REL/RCMAP/V6/TRENDS', 'USGS/SRTMGL1_003', 'USGS/NLCD_RELEASES/2023_REL/RCMAP/V6/TRENDS_YEAR', 'UTOKYO/WTLAB/KBDI/v1', 'USGS/NLCD_RELEASES/2021_REL/TCC/v2021-4', 'VITO/PROBAV/C1/S1_TOC_100M', 'VITO/PROBAV/C1/S1_TOC_333M', 'VITO/PROBAV/S1_TOC_100M', 'VITO/PROBAV/S1_TOC_333M', 'USGS/NLCD_RELEASES/2021_REL/NLCD', 'WCMC/biomass_carbon_density/v1_0', 'WHBU/NBAR_1YEAR', 'WHBU/NBAR_2YEAR', 'WHBU/NBAR_3YEAR', 'WHRC/biomass/tropical', 'WORLDCLIM/V1/BIO', 'WORLDCLIM/V1/MONTHLY', 'WRI/Aqueduct_Flood_Hazard_Maps/V2', 'WRI/GFW/FORMA/alerts', 'WRI/GFW/FORMA/raw_output_firms', 'WRI/GFW/FORMA/raw_output_ndvi', 'WRI/GFW/FORMA/thresholds', 'WRI/GFW/FORMA/vegetation_tstats', 'WRI/SBTN/naturalLands/v1', 'WRI/SBTN/naturalLands/v1_1/2020', 'WRI/SBTN/naturalLands/v1/2020', 'WWF/HydroSHEDS/03CONDEM', 'WWF/HydroSHEDS/03DIR', 'WWF/HydroSHEDS/03VFDEM', 'WWF/HydroSHEDS/15ACC', 'WWF/HydroSHEDS/15CONDEM', 'WWF/HydroSHEDS/15DIR', 'WWF/HydroSHEDS/30ACC', 'NASA/LANCE/SNPP_VIIRS/C2', 'MODIS/006/MYD15A2H', 'CSP/HM/GlobalHumanModification', 'WorldPop/GP/100m/pop', 'WorldPop/GP/100m/pop_age_sex', 'WorldPop/GP/100m/pop_age_sex_cons_unadj', 'WorldPop/POP', 'YALE/YCEO/UHI/Summer_UHI_yearly_pixel/v4', 'YALE/YCEO/UHI/UHI_all_averaged/v4', 'YALE/YCEO/UHI/UHI_monthly_averaged/v4', 'YALE/YCEO/UHI/UHI_yearly_averaged/v4', 'YALE/YCEO/UHI/UHI_yearly_pixel/v4', 'projects/forestdatapartnership/assets/cocoa/model_2024a', 'projects/forestdatapartnership/assets/community_palm/20240312', 'projects/forestdatapartnership/assets/community_forests/ForestPersistence_2020', 'projects/forestdatapartnership/assets/palm/model_2024a', 'projects/forestdatapartnership/assets/rubber/model_2024a', 'projects/gcp-public-data-weathernext/assets/126478713_1_0', 'projects/gcp-public-data-weathernext/assets/59572747_4_0', 'projects/geoscience-aus-cat/assets/NIDEM', 'projects/geoscience-aus-cat/assets/ga_ls7e_nbart_gm_cyear_3', 'projects/geoscience-aus-cat/assets/ga_ls5t_nbart_gm_cyear_3', 'projects/geoscience-aus-cat/assets/ga_ls8c_nbart_gm_cyear_3', 'projects/geoscience-aus-cat/assets/ga_ls8cls9c_gm_cyear_3', 'projects/geoscience-aus-cat/assets/ga_ls_wo_fq_cyear_3', 'projects/geoscience-aus-cat/assets/ga_ls_landcover_class_cyear_2', 'projects/global-pasture-watch/assets/ggc-30m/v1/cultiv-grassland_p', 'projects/global-pasture-watch/assets/ggc-30m/v1/grassland_c', 'projects/global-pasture-watch/assets/ggc-30m/v1/nat-semi-grassland_p', 'projects/neon-prod-earthengine/assets/CHM/001', 'projects/neon-prod-earthengine/assets/DEM/001', 'projects/neon-prod-earthengine/assets/HSI_REFL/001', 'projects/neon-prod-earthengine/assets/HSI_REFL/002', 'projects/neon-prod-earthengine/assets/RGB/001', 'projects/ngis-cat/assets/DEA/NIDEM', 'projects/planet-nicfi/assets/basemaps/africa', 'projects/planet-nicfi/assets/basemaps/americas', 'projects/planet-nicfi/assets/basemaps/asia', 'projects/sat-io/open-datasets/GLOBathy/GLOBathy_bathymetry', 'projects/sat-io/open-datasets/ORNL/LANDSCAN_GLOBAL', 'projects/sat-io/open-datasets/us-drought-monitor', 'YALE/YCEO/UHI/Winter_UHI_yearly_pixel/v4', 'WWF/HydroSHEDS/30DIR', 'WWF/HydroSHEDS/30CONDEM', 'LANDFIRE/Vegetation/ESP/v1_2_0/CONUS', 'LANDFIRE/Vegetation/ESP/v1_2_0/AK', 'LANDFIRE/Vegetation/ESP/v1_2_0/HI']
In [10]:
print(connection.list_collections()[0])
{'stac_version': '1.0.0', 'stac_extensions': [], 'type': 'Collection', 'id': 'USGS/3DEP/10m', 'title': 'USGS 3DEP 10m National Map Seamless (1/3 Arc-Second)', 'description': 'This is the seamless 3DEP DEM dataset for the U.S.\nwith full coverage of the 48 conterminous states, Hawaii, and\nU.S. territories. Alaska coverage is partially available now and is being\nexpanded to statewide coverage as part of the Alaska Mapping Initiative.\nGround spacing is approximately 10 meters north/south, but variable\neast/west due to convergence of meridians with latitude.\n\nSpatial metadata dataset is ingested as a separate asset\n[USGS_3DEP_10m_metadata](USGS_3DEP_10m_metadata).\n\nThe 1m dataset is ingested\nas [USGS_3DEP_1m](USGS_3DEP_1m).\n\nDataset uploaded by [Farmers Business Network](https://fbn.com).\n', 'license': 'proprietary', 'extent': {'spatial': {'bbox': [[-171, -16.6, 164, 76.9]]}, 'temporal': {'interval': [['1998-08-16T00:00:00Z', '2020-05-06T00:00:00Z']]}}, 'links': [{'href': 'https://earthengine.openeo.org/v1.0/collections/USGS/3DEP/10m', 'rel': 'self', 'type': 'application/json'}, {'href': 'https://earthengine.openeo.org/v1.0/', 'rel': 'parent', 'type': 'application/json'}, {'href': 'https://earthengine.openeo.org/v1.0/', 'rel': 'root', 'type': 'application/json'}, {'code': 'JavaScript', 'href': 'https://code.earthengine.google.com/?scriptPath=Examples:Datasets/USGS/USGS_3DEP_10m', 'rel': 'related', 'title': 'Run the example for USGS/3DEP/10m in the Earth Engine Code Editor', 'type': 'text/html'}, {'href': 'https://developers.google.com/earth-engine/datasets/images/USGS/USGS_3DEP_10m_sample.png', 'rel': 'preview', 'type': 'image/png'}, {'href': 'https://developers.google.com/earth-engine/datasets/catalog/USGS_3DEP_10m#terms-of-use', 'rel': 'license', 'type': 'text/html'}, {'href': 'https://www.usgs.gov/information-policies-and-instructions/crediting-usgs', 'rel': 'license', 'type': 'text/html'}, {'href': 'https://storage.googleapis.com/earthengine-stac/catalog/USGS/USGS_3DEP_10m.json', 'rel': 'latest-version', 'title': 'USGS/3DEP/10m', 'type': 'application/json'}, {'href': 'https://storage.googleapis.com/earthengine-stac/catalog/USGS/USGS_NED.json', 'rel': 'predecessor-version', 'title': 'USGS/NED', 'type': 'application/json'}, {'rel': 'http://www.opengis.net/def/rel/ogc/1.0/queryables', 'href': 'https://earthengine.openeo.org/v1.0/collections/USGS/3DEP/10m/queryables', 'title': 'Queryables', 'type': 'application/schema+json'}]}

Print 1st collection from the list¶

Note the index number, it starts from 0

In [11]:
print(connection.list_collections()[0:3])
[{'stac_version': '1.0.0', 'stac_extensions': [], 'type': 'Collection', 'id': 'USGS/3DEP/10m', 'title': 'USGS 3DEP 10m National Map Seamless (1/3 Arc-Second)', 'description': 'This is the seamless 3DEP DEM dataset for the U.S.\nwith full coverage of the 48 conterminous states, Hawaii, and\nU.S. territories. Alaska coverage is partially available now and is being\nexpanded to statewide coverage as part of the Alaska Mapping Initiative.\nGround spacing is approximately 10 meters north/south, but variable\neast/west due to convergence of meridians with latitude.\n\nSpatial metadata dataset is ingested as a separate asset\n[USGS_3DEP_10m_metadata](USGS_3DEP_10m_metadata).\n\nThe 1m dataset is ingested\nas [USGS_3DEP_1m](USGS_3DEP_1m).\n\nDataset uploaded by [Farmers Business Network](https://fbn.com).\n', 'license': 'proprietary', 'extent': {'spatial': {'bbox': [[-171, -16.6, 164, 76.9]]}, 'temporal': {'interval': [['1998-08-16T00:00:00Z', '2020-05-06T00:00:00Z']]}}, 'links': [{'href': 'https://earthengine.openeo.org/v1.0/collections/USGS/3DEP/10m', 'rel': 'self', 'type': 'application/json'}, {'href': 'https://earthengine.openeo.org/v1.0/', 'rel': 'parent', 'type': 'application/json'}, {'href': 'https://earthengine.openeo.org/v1.0/', 'rel': 'root', 'type': 'application/json'}, {'code': 'JavaScript', 'href': 'https://code.earthengine.google.com/?scriptPath=Examples:Datasets/USGS/USGS_3DEP_10m', 'rel': 'related', 'title': 'Run the example for USGS/3DEP/10m in the Earth Engine Code Editor', 'type': 'text/html'}, {'href': 'https://developers.google.com/earth-engine/datasets/images/USGS/USGS_3DEP_10m_sample.png', 'rel': 'preview', 'type': 'image/png'}, {'href': 'https://developers.google.com/earth-engine/datasets/catalog/USGS_3DEP_10m#terms-of-use', 'rel': 'license', 'type': 'text/html'}, {'href': 'https://www.usgs.gov/information-policies-and-instructions/crediting-usgs', 'rel': 'license', 'type': 'text/html'}, {'href': 'https://storage.googleapis.com/earthengine-stac/catalog/USGS/USGS_3DEP_10m.json', 'rel': 'latest-version', 'title': 'USGS/3DEP/10m', 'type': 'application/json'}, {'href': 'https://storage.googleapis.com/earthengine-stac/catalog/USGS/USGS_NED.json', 'rel': 'predecessor-version', 'title': 'USGS/NED', 'type': 'application/json'}, {'rel': 'http://www.opengis.net/def/rel/ogc/1.0/queryables', 'href': 'https://earthengine.openeo.org/v1.0/collections/USGS/3DEP/10m/queryables', 'title': 'Queryables', 'type': 'application/schema+json'}]}, {'stac_version': '1.0.0', 'stac_extensions': [], 'type': 'Collection', 'id': 'USGS/3DEP/1m', 'title': 'USGS 3DEP 1m National Map', 'description': 'This is a tiled collection of images with 1m pixel size from the 3D\nElevation Program (3DEP). The 3DEP data holdings serve as the elevation\nlayer of The National Map and provide foundational elevation information for\nearth science studies and mapping applications in the United States.\n\nThe elevations in this DEM represent the topographic bare-earth surface.\nUSGS standard 1m pixel size DEMs are produced exclusively from high\nresolution light detection and ranging (lidar) source data of images with 1m\npixel size or higher resolution. 1m pixel size DEM surfaces are seamless\nwithin collection projects but not necessarily seamless across projects.\nThe spatial reference used for tiles of the 1m pixel size DEM within the\nconterminous United States (CONUS) is Universal Transverse Mercator (UTM) in\nunits of meters and in conformance with the North American Datum of 1983\n(NAD83). All bare earth elevation values are in meters and are referenced to\nthe North American Vertical Datum of 1988 (NAVD88). Each tile is distributed\nin the UTM Zone in which it lies. If a tile crosses two UTM zones, it is\ndelivered in both zones.\nIn this and other cases of image overlaps, elevation values might be\nslightly different in different images covering the same area.\n\nThe 1m pixel size DEM is the highest resolution standard DEM offered in the\n3DEP product suite. The 10m 3DEP dataset is available at\n[USGS_3DEP_10m](USGS_3DEP_10m).\n', 'license': 'proprietary', 'extent': {'spatial': {'bbox': [[-171, -16.6, 164, 76.9]]}, 'temporal': {'interval': [['2015-01-01T00:00:00Z', '2006-01-01T00:00:00Z']]}}, 'links': [{'href': 'https://earthengine.openeo.org/v1.0/collections/USGS/3DEP/1m', 'rel': 'self', 'type': 'application/json'}, {'href': 'https://earthengine.openeo.org/v1.0/', 'rel': 'parent', 'type': 'application/json'}, {'href': 'https://earthengine.openeo.org/v1.0/', 'rel': 'root', 'type': 'application/json'}, {'code': 'JavaScript', 'href': 'https://code.earthengine.google.com/?scriptPath=Examples:Datasets/USGS/USGS_3DEP_1m', 'rel': 'related', 'title': 'Run the example for USGS/3DEP/1m in the Earth Engine Code Editor', 'type': 'text/html'}, {'href': 'https://developers.google.com/earth-engine/datasets/images/USGS/USGS_3DEP_1m_sample.png', 'rel': 'preview', 'type': 'image/png'}, {'href': 'https://developers.google.com/earth-engine/datasets/catalog/USGS_3DEP_1m#terms-of-use', 'rel': 'license', 'type': 'text/html'}, {'href': 'https://www.usgs.gov/information-policies-and-instructions/crediting-usgs', 'rel': 'license', 'type': 'text/html'}, {'href': 's3://prd-tnm/StagedProducts/Elevation/1m/Projects', 'rel': 'source'}, {'rel': 'http://www.opengis.net/def/rel/ogc/1.0/queryables', 'href': 'https://earthengine.openeo.org/v1.0/collections/USGS/3DEP/1m/queryables', 'title': 'Queryables', 'type': 'application/schema+json'}, {'rel': 'items', 'href': 'https://earthengine.openeo.org/v1.0/collections/USGS/3DEP/1m/items', 'type': 'application/geo+json'}]}, {'stac_version': '1.0.0', 'stac_extensions': [], 'type': 'Collection', 'id': 'AAFC/ACI', 'title': 'Canada AAFC Annual Crop Inventory', 'description': 'Starting in 2009, the Earth Observation Team of the Science and Technology\nBranch (STB) at Agriculture and Agri-Food Canada (AAFC) began the process\nof generating annual crop type digital maps. Focusing on the Prairie\nProvinces in 2009 and 2010, a Decision Tree (DT) based methodology was\napplied using optical (Landsat-5, AWiFS, DMC) and radar (Radarsat-2) based\nsatellite images. Beginning with the 2011 growing season, this activity has\nbeen extended to other provinces in support of a national crop inventory.\nTo date this approach can consistently deliver a crop inventory that meets\nthe overall target accuracy of at least 85% at a final spatial resolution of\n30m (56m in 2009 and 2010).\n', 'license': 'OGL-Canada-2.0', 'extent': {'spatial': {'bbox': [[-135.17, 36.83, -51.24, 62.25]]}, 'temporal': {'interval': [['2009-01-01T00:00:00Z', '2023-01-01T00:00:00Z']]}}, 'links': [{'href': 'https://earthengine.openeo.org/v1.0/collections/AAFC/ACI', 'rel': 'self', 'type': 'application/json'}, {'href': 'https://earthengine.openeo.org/v1.0/', 'rel': 'parent', 'type': 'application/json'}, {'href': 'https://earthengine.openeo.org/v1.0/', 'rel': 'root', 'type': 'application/json'}, {'code': 'JavaScript', 'href': 'https://code.earthengine.google.com/?scriptPath=Examples:Datasets/AAFC/AAFC_ACI', 'rel': 'related', 'title': 'Run the example for AAFC/ACI in the Earth Engine Code Editor', 'type': 'text/html'}, {'href': 'https://developers.google.com/earth-engine/datasets/images/AAFC/AAFC_ACI_sample.png', 'rel': 'preview', 'type': 'image/png'}, {'href': 'https://developers.google.com/earth-engine/datasets/catalog/AAFC_ACI#terms-of-use', 'rel': 'license', 'type': 'text/html'}, {'href': 'https://spdx.org/licenses/OGL-Canada-2.0.html', 'rel': 'license', 'type': 'text/html'}, {'href': 'https://www.agr.gc.ca/atlas/data_donnees/agr/annualCropInventory/tif/', 'rel': 'source'}, {'rel': 'http://www.opengis.net/def/rel/ogc/1.0/queryables', 'href': 'https://earthengine.openeo.org/v1.0/collections/AAFC/ACI/queryables', 'title': 'Queryables', 'type': 'application/schema+json'}, {'rel': 'items', 'href': 'https://earthengine.openeo.org/v1.0/collections/AAFC/ACI/items', 'type': 'application/geo+json'}]}]

Get detailed information about a collection¶

In [12]:
print(connection.describe_collection("COPERNICUS/Landcover/100m/Proba-V-C3/Global")) #text listing

connection.describe_collection("COPERNICUS/Landcover/100m/Proba-V-C3/Global") #web listing
{'description': 'The Copernicus Global Land Service (CGLS) is earmarked as a component of\nthe Land service to operate a multi-purpose service component that provides\na series of bio-geophysical products on the status and evolution of land\nsurface at global scale.\n\nThe Dynamic Land Cover map at 100 m resolution (CGLS-LC100) is a new product\nin the portfolio of the CGLS and delivers a global land cover map at 100 m\nspatial resolution. The CGLS Land Cover product provides a primary land\ncover scheme. Next to these discrete classes, the product also includes\ncontinuous field layers for all basic land cover classes that provide\nproportional estimates for vegetation/ground cover for the land cover types.\nThis continuous classification scheme may depict areas of heterogeneous\nland cover better than the standard classification scheme and, as such,\ncan be tailored for application use (e.g. forest monitoring, crop monitoring,\nbiodiversity and conservation, monitoring environment and security in Africa,\nclimate modelling, etc.).\n\nThese consistent Land Cover maps (v3.0.1) are provided for the period\n2015-2019 over the entire Globe, derived from the PROBA-V 100 m time-series, a\ndatabase of high quality land cover training sites and several ancillary\ndatasets, reaching an accuracy of 80% at Level1 over al years.  It is planned\nto provide yearly updates from 2020 through the use of a Sentinel time-series.\n\nSee also:\n\n* [Algorithm Theoretical Basis Document](https://doi.org/10.5281/zenodo.3938968)\n\n* [Product User Manual](https://doi.org/10.5281/zenodo.3938963)\n\n* [Validation Report](https://doi.org/10.5281/zenodo.3938974)\n', 'extent': {'spatial': {'bbox': [[-180, -90, 180, 90]]}, 'temporal': {'interval': [['2015-01-01T00:00:00Z', '2019-12-31T23:59:59Z']]}}, 'gee:terms_of_use': 'As official product of the global component of the Copernicus Land Service,\naccess to this land cover dataset is fully free and open to all users.\n', 'gee:type': 'image_collection', 'gee:user_uploaded': True, 'id': 'COPERNICUS/Landcover/100m/Proba-V-C3/Global', 'keywords': ['copernicus', 'eea', 'esa', 'eu', 'landcover', 'proba', 'probav', 'vito'], 'license': 'proprietary', 'links': [{'href': 'https://earthengine.openeo.org/v1.0/collections/COPERNICUS/Landcover/100m/Proba-V-C3/Global', 'rel': 'self', 'type': 'application/json'}, {'href': 'https://earthengine.openeo.org/v1.0/', 'rel': 'parent', 'type': 'application/json'}, {'href': 'https://earthengine.openeo.org/v1.0/', 'rel': 'root', 'type': 'application/json'}, {'code': 'JavaScript', 'href': 'https://code.earthengine.google.com/?scriptPath=Examples:Datasets/COPERNICUS/COPERNICUS_Landcover_100m_Proba-V-C3_Global', 'rel': 'related', 'title': 'Run the example for COPERNICUS/Landcover/100m/Proba-V-C3/Global in the Earth Engine Code Editor', 'type': 'text/html'}, {'href': 'https://developers.google.com/earth-engine/datasets/images/COPERNICUS/COPERNICUS_Landcover_100m_Proba-V-C3_Global_sample.png', 'rel': 'preview', 'type': 'image/png'}, {'href': 'https://developers.google.com/earth-engine/datasets/catalog/COPERNICUS_Landcover_100m_Proba-V-C3_Global#terms-of-use', 'rel': 'license', 'type': 'text/html'}, {'href': 'https://lcviewer.vito.be/download', 'rel': 'source'}, {'href': 'https://doi.org/10.5281/zenodo.3518026', 'rel': 'cite-as'}, {'href': 'https://doi.org/10.5281/zenodo.3518036', 'rel': 'cite-as'}, {'href': 'https://doi.org/10.5281/zenodo.3518038', 'rel': 'cite-as'}, {'href': 'https://doi.org/10.5281/zenodo.3939038', 'rel': 'cite-as'}, {'href': 'https://doi.org/10.5281/zenodo.3939050', 'rel': 'cite-as'}, {'href': 'https://storage.googleapis.com/earthengine-stac/catalog/COPERNICUS/COPERNICUS_Landcover_100m_Proba-V-C3_Global.json', 'rel': 'latest-version', 'title': 'COPERNICUS/Landcover/100m/Proba-V-C3/Global', 'type': 'application/json'}, {'href': 'https://storage.googleapis.com/earthengine-stac/catalog/COPERNICUS/COPERNICUS_Landcover_100m_Proba-V_Global.json', 'rel': 'predecessor-version', 'title': 'COPERNICUS/Landcover/100m/Proba-V/Global', 'type': 'application/json'}, {'rel': 'http://www.opengis.net/def/rel/ogc/1.0/queryables', 'href': 'https://earthengine.openeo.org/v1.0/collections/COPERNICUS/Landcover/100m/Proba-V-C3/Global/queryables', 'title': 'Queryables', 'type': 'application/schema+json'}, {'rel': 'items', 'href': 'https://earthengine.openeo.org/v1.0/collections/COPERNICUS/Landcover/100m/Proba-V-C3/Global/items', 'type': 'application/geo+json'}], 'providers': [{'name': 'Copernicus', 'roles': ['licensor', 'producer'], 'url': 'https://land.copernicus.eu/global/lcviewer'}, {'name': 'Google Earth Engine', 'roles': ['host'], 'url': 'https://developers.google.com/earth-engine/datasets/catalog/COPERNICUS_Landcover_100m_Proba-V-C3_Global'}], 'sci:citation': 'Buchhorn, M. ; Lesiv, M. ; Tsendbazar, N. - E. ; Herold, M. ; Bertels, L. ; Smets, B.\nCopernicus Global Land Cover Layers-Collection 2. Remote Sensing 2020, 12Volume 108, 1044.\n[doi:10.3390/rs12061044](https://doi.org/10.3390/rs12061044)\n', 'sci:doi': '10.5281/zenodo.3518026', 'sci:publications': [{'citation': 'Buchhorn, M., Smets, B., Bertels, L., Roo, B. D., Lesiv, M., Tsendbazar,\nN.-E., Herold, M., &amp; Fritz, S. (2020). <i>Copernicus Global Land\nService: Land Cover 100m: collection 3: epoch 2017: Globe</i> (Version\nV3.0.1) [Data set]. Zenodo.\n', 'doi': '10.5281/ZENODO.3518036'}, {'citation': 'Buchhorn, M., Smets, B., Bertels, L., Roo, B. D., Lesiv, M., Tsendbazar,\nN.-E., Herold, M., &amp; Fritz, S. (2020). <i>Copernicus Global Land\nService: Land Cover 100m: collection 3: epoch 2018: Globe</i> (Version\nV3.0.1) [Data set]. Zenodo.\n', 'doi': '10.5281/ZENODO.3518038'}, {'citation': 'Buchhorn, M., Smets, B., Bertels, L., Roo, B. D., Lesiv, M., Tsendbazar,\nN.-E., Herold, M., &amp; Fritz, S. (2020). <i>Copernicus Global Land\nService: Land Cover 100m: collection 3: epoch 2015: Globe</i> (Version\nV3.0.1) [Data set]. Zenodo.\n', 'doi': '10.5281/ZENODO.3939038'}, {'citation': 'Buchhorn, M., Smets, B., Bertels, L., Roo, B. D., Lesiv, M., Tsendbazar,\nN.-E., Herold, M., &amp; Fritz, S. (2020). <i>Copernicus Global Land\nService: Land Cover 100m: collection 3: epoch 2019: Globe</i> (Version\nV3.0.1) [Data set]. Zenodo.\n', 'doi': '10.5281/ZENODO.3939050'}], 'stac_extensions': ['https://stac-extensions.github.io/datacube/v2.2.0/schema.json'], 'stac_version': '1.0.0', 'summaries': {'bare-coverfraction': {'gee:estimated_range': False, 'maximum': 100, 'minimum': 0}, 'change-confidence': {'gee:estimated_range': False, 'maximum': 3, 'minimum': 0}, 'crops-coverfraction': {'gee:estimated_range': False, 'maximum': 100, 'minimum': 0}, 'data-density-indicator': {'gee:estimated_range': False, 'maximum': 100, 'minimum': 0}, 'discrete_classification': {'gee:estimated_range': False, 'maximum': 200, 'minimum': 0}, 'discrete_classification-proba': {'gee:estimated_range': False, 'maximum': 100, 'minimum': 0}, 'eo:bands': [{'description': 'Land cover classification', 'gee:classes': [{'color': '282828', 'description': 'Unknown. No or not enough satellite data available.', 'value': 0}, {'color': 'ffbb22', 'description': 'Shrubs. Woody perennial plants with persistent and woody stems\nand without any defined main stem being less than 5 m tall. The\nshrub foliage can be either evergreen or deciduous.\n', 'value': 20}, {'color': 'ffff4c', 'description': 'Herbaceous vegetation. Plants without persistent stem or shoots above ground\nand lacking definite firm structure. Tree and shrub cover is less\nthan 10 %.\n', 'value': 30}, {'color': 'f096ff', 'description': 'Cultivated and managed vegetation / agriculture. Lands covered with temporary crops followed by harvest\nand a bare soil period (e.g., single and multiple cropping systems).\nNote that perennial woody crops will be classified as the appropriate\nforest or shrub land cover type.\n', 'value': 40}, {'color': 'fa0000', 'description': 'Urban / built up. Land covered by buildings and other man-made structures.', 'value': 50}, {'color': 'b4b4b4', 'description': 'Bare / sparse vegetation. Lands with exposed soil, sand, or rocks and never has\nmore than 10 % vegetated cover during any time of the year.\n', 'value': 60}, {'color': 'f0f0f0', 'description': 'Snow and ice. Lands under snow or ice cover throughout the year.', 'value': 70}, {'color': '0032c8', 'description': 'Permanent water bodies. Lakes, reservoirs, and rivers. Can be either fresh or salt-water bodies.', 'value': 80}, {'color': '0096a0', 'description': 'Herbaceous wetland. Lands with a permanent mixture of water and herbaceous\nor woody vegetation. The vegetation can be present in either salt,\nbrackish, or fresh water.\n', 'value': 90}, {'color': 'fae6a0', 'description': 'Moss and lichen.', 'value': 100}, {'color': '58481f', 'description': 'Closed forest, evergreen needle leaf. Tree canopy >70 %, almost all needle leaf trees remain\ngreen all year. Canopy is never without green foliage.\n', 'value': 111}, {'color': '009900', 'description': 'Closed forest, evergreen broad leaf. Tree canopy >70 %, almost all broadleaf trees remain\ngreen year round. Canopy is never without green foliage.\n', 'value': 112}, {'color': '70663e', 'description': 'Closed forest, deciduous needle leaf. Tree canopy >70 %, consists of seasonal needle leaf\ntree communities with an annual cycle of leaf-on and leaf-off\nperiods.\n', 'value': 113}, {'color': '00cc00', 'description': 'Closed forest, deciduous broad leaf. Tree canopy >70 %, consists of seasonal broadleaf\ntree communities with an annual cycle of leaf-on and leaf-off periods.\n', 'value': 114}, {'color': '4e751f', 'description': 'Closed forest, mixed.', 'value': 115}, {'color': '007800', 'description': 'Closed forest, not matching any of the other definitions.', 'value': 116}, {'color': '666000', 'description': 'Open forest, evergreen needle leaf. Top layer- trees 15-70 % and second layer- mixed of shrubs\nand grassland, almost all needle leaf trees remain green all year.\nCanopy is never without green foliage.\n', 'value': 121}, {'color': '8db400', 'description': 'Open forest, evergreen broad leaf. Top layer- trees 15-70 % and second layer- mixed of shrubs\nand grassland, almost all broadleaf trees remain green year round.\nCanopy is never without green foliage.\n', 'value': 122}, {'color': '8d7400', 'description': 'Open forest, deciduous needle leaf. Top layer- trees 15-70 % and second layer- mixed of shrubs\nand grassland, consists of seasonal needle leaf tree communities with\nan annual cycle of leaf-on and leaf-off periods.\n', 'value': 123}, {'color': 'a0dc00', 'description': 'Open forest, deciduous broad leaf. Top layer- trees 15-70 % and second layer- mixed of shrubs\nand grassland, consists of seasonal broadleaf tree communities with\nan annual cycle of leaf-on and leaf-off periods.\n', 'value': 124}, {'color': '929900', 'description': 'Open forest, mixed.', 'value': 125}, {'color': '648c00', 'description': 'Open forest, not matching any of the other definitions.', 'value': 126}, {'color': '000080', 'description': 'Oceans, seas. Can be either fresh or salt-water bodies.', 'value': 200}], 'name': 'discrete_classification'}, {'description': 'Quality indicator (classification probability) of the discrete classification', 'gee:units': '%', 'name': 'discrete_classification-proba'}, {'description': 'Forest type for all pixels with tree percentage vegetation cover bigger than 1 %', 'gee:classes': [{'color': '282828', 'description': 'Unknown', 'value': 0}, {'color': '666000', 'description': 'Evergreen needle leaf', 'value': 1}, {'color': '009900', 'description': 'Evergreen broad leaf', 'value': 2}, {'color': '70663e', 'description': 'Deciduous needle leaf', 'value': 3}, {'color': 'a0dc00', 'description': 'Deciduous broad leaf', 'value': 4}, {'color': '929900', 'description': 'Mix of forest types', 'value': 5}], 'name': 'forest_type'}, {'description': 'Percent vegetation cover for bare-sparse-vegetation land cover class', 'gee:units': '%', 'name': 'bare-coverfraction'}, {'description': 'Percent vegetation cover for cropland land cover class', 'gee:units': '%', 'name': 'crops-coverfraction'}, {'description': 'Percent vegetation cover for herbaceous vegetation land cover class', 'gee:units': '%', 'name': 'grass-coverfraction'}, {'description': 'Percent vegetation cover for moss and lichen land cover class', 'gee:units': '%', 'name': 'moss-coverfraction'}, {'description': 'Percent vegetation cover for shrubland land cover class', 'gee:units': '%', 'name': 'shrub-coverfraction'}, {'description': 'Percent vegetation cover for forest land cover class', 'gee:units': '%', 'name': 'tree-coverfraction'}, {'description': 'Percent ground cover for snow and ice land cover class', 'gee:units': '%', 'name': 'snow-coverfraction'}, {'description': 'Percent ground cover for built-up land cover class', 'gee:units': '%', 'name': 'urban-coverfraction'}, {'description': 'Percent ground cover for permanent water land cover class', 'gee:units': '%', 'name': 'water-permanent-coverfraction'}, {'description': 'Percent ground cover for seasonal water land cover class', 'gee:units': '%', 'name': 'water-seasonal-coverfraction'}, {'description': 'Data density indicator for algorithm input data', 'name': 'data-density-indicator'}, {'description': "This layer is only provided for years after the BaseYear 2015.\n\n* 0 - No change. No change in discrete class between year and previous year\n  detected.\n* 1 - Potential change. BFASTmon detected break in second half of NRT year -\n  potential change.\n* 2 - Medium confidence. Imprint of urban, permanent water, snow or wetland\n  OR change detected by BFAST but HMM model didn't confirm this break\n  in higher resolution OR change detected by BFASTmon in the first half\n  of NRT year.\n* 3 - High confidence. BFAST detected a change and HMM confirmed\n  this change in higher resolution.\n", 'name': 'change-confidence'}], 'forest_type': {'gee:estimated_range': False, 'maximum': 5, 'minimum': 0}, 'gee:visualizations': [{'display_name': 'Land Cover', 'image_visualization': {'band_vis': {'bands': ['discrete_classification']}}, 'lookat': {'lat': 26.4, 'lon': -88.6, 'zoom': 1}}], 'grass-coverfraction': {'gee:estimated_range': False, 'maximum': 100, 'minimum': 0}, 'gsd': [100], 'moss-coverfraction': {'gee:estimated_range': False, 'maximum': 100, 'minimum': 0}, 'shrub-coverfraction': {'gee:estimated_range': False, 'maximum': 100, 'minimum': 0}, 'snow-coverfraction': {'gee:estimated_range': False, 'maximum': 100, 'minimum': 0}, 'tree-coverfraction': {'gee:estimated_range': False, 'maximum': 100, 'minimum': 0}, 'urban-coverfraction': {'gee:estimated_range': False, 'maximum': 100, 'minimum': 0}, 'water-permanent-coverfraction': {'gee:estimated_range': False, 'maximum': 100, 'minimum': 0}, 'water-seasonal-coverfraction': {'gee:estimated_range': False, 'maximum': 100, 'minimum': 0}}, 'title': 'Copernicus Global Land Cover Layers: CGLS-LC100 Collection 3', 'type': 'Collection', 'version': '3.01', 'cube:dimensions': {'x': {'type': 'spatial', 'axis': 'x', 'extent': [-180, 180]}, 'y': {'type': 'spatial', 'axis': 'y', 'extent': [-90, 90]}, 't': {'type': 'temporal', 'extent': ['2015-01-01T00:00:00Z', '2019-12-31T23:59:59Z']}, 'bands': {'type': 'bands', 'values': ['discrete_classification', 'discrete_classification-proba', 'forest_type', 'bare-coverfraction', 'crops-coverfraction', 'grass-coverfraction', 'moss-coverfraction', 'shrub-coverfraction', 'tree-coverfraction', 'snow-coverfraction', 'urban-coverfraction', 'water-permanent-coverfraction', 'water-seasonal-coverfraction', 'data-density-indicator', 'change-confidence']}}, 'assets': {'preview_4': {'href': 'https://developers.google.com/earth-engine/datasets/images/COPERNICUS/COPERNICUS_Landcover_100m_Proba-V-C3_Global_sample.png', 'type': 'image/png', 'roles': ['thumbnail']}}}
Out[12]:

Load the selected collection, here the spatial extent used is over the Cape Verde islands¶

In [13]:
# Load data cube from GEE collection.
cube = connection.load_collection(
    "COPERNICUS/Landcover/100m/Proba-V-C3/Global",
    spatial_extent={"west": -25.5, "south": 14.5, "east": -22.5, "north": 17.25},
    temporal_extent=["2015-01-01", "2019-12-31"],
    bands=["discrete_classification"],
)
In [14]:
cube.download(r'./Intro_openEO_ILWISPy/lc.tif')
In [15]:
#load raster in ILWISPy
rcDC = ilwis.RasterCoverage('lc.tif')
In [16]:
# probe its size
print(rcDC.size().xsize)
print(rcDC.size().ysize)
print(rcDC.size().zsize)
3341
3062
1
In [17]:
#transform raster from ILWIS to Numpy
rcDC2np = np.fromiter(iter(rcDC), np.ubyte, rcDC.size().linearSize()) 
rcDC2np = rcDC2np.reshape((rcDC.size().zsize, rcDC.size().ysize, rcDC.size().xsize))
print(rcDC2np.shape)
(1, 3062, 3341)
In [18]:
#dispay numpy array
plt.imshow(rcDC2np[0], interpolation='none', cmap=ListedColormap(['#00BB22','#00FF4C', '#F096FF', '#FA0000', '#B4B4B4', '#0032C8', '#009696', '#648C00', '#000080'])) 
plt.axis('on')
plt.colorbar(shrink=0.8)
plt.title('LCC over Cape Verde');
No description has been provided for this image
In [19]:
#Export as ILWIS raster map
rcDC.store('CapeVerde_LCC.mpr')

Extract rainfall for a region in Zambia for a single day¶

In [20]:
connection.describe_collection("UCSB-CHG/CHIRPS/DAILY")
Out[20]:
In [21]:
# create time stamp for single CHIRPS Daily Rainfall map retrieval
year = 2018
month = 1
day_start = 1

date_start = date(year, month, day_start)
start_string = date_start.strftime('%Y%m%d')
print(start_string)

one_day = timedelta(days=1)

date_end = date_start + one_day
end_string = date_end.strftime('%Y%m%d')
print(end_string)
20180101
20180102
In [22]:
#note that there are limitiations to the size of the spatial extent, so here a small (2 by 2 degree) window is selected over Zambia

cube = connection.load_collection(
    "UCSB-CHG/CHIRPS/DAILY",
    spatial_extent={"west": 26, "south": -14, "east": 28, "north": -12},
    temporal_extent=[date_start, date_end],
    bands=["precipitation"],
)
In [23]:
cube.download(work_dir+'/pcp_chirps_'+start_string+'_single.tif')
In [24]:
#load precipitation raster in ILWIS
pcp_in = ilwis.RasterCoverage('pcp_chirps_'+start_string+'_single.tif')
print(pcp_in)
pcp_chirps_20180101_single.tif
In [25]:
# probe its size
print(pcp_in.size().xsize)
print(pcp_in.size().ysize)
print(pcp_in.size().zsize)
2227
2227
1
In [26]:
#calculate basis image statistics and show histogram
stats_input = pcp_in.statistics(ilwis.PropertySets.pHISTOGRAM)
print(stats_input.histogram())
print()
print('Minimum: ',stats_input[ilwis.PropertySets.pMIN]) 
print('Maximum: ',stats_input[ilwis.PropertySets.pMAX]) 
print('Mean: ',stats_input[ilwis.PropertySets.pMEAN]) 
print('No pixels - also nodata: ',stats_input[ilwis.PropertySets.pCOUNT]) 
print('No pixels - no nodata: ',stats_input[ilwis.PropertySets.pNETTOCOUNT]) 
print('Sum all: ',stats_input[ilwis.PropertySets.pSUM]) 

print()
x=[a for (a,b) in stats_input.histogram()][:-1] 
y=[b for (a,b) in stats_input.histogram()][:-1]

plt.bar(x,y,label='Rainfall values')
plt.xlabel('Data Range')
plt.ylabel('Data Frequency')
plt.title('Raster Histogram')
plt.ylim(0,60000)
plt.legend()
[(0.0, 2696604.0), (0.1144029901382771, 0.0), (0.2288059802765542, 0.0), (0.3432089704148313, 0.0), (0.4576119605531084, 0.0), (0.5720149506913854, 0.0), (0.6864179408296626, 0.0), (0.8008209309679397, 0.0), (0.9152239211062168, 0.0), (1.0296269112444938, 0.0), (1.1440299013827708, 0.0), (1.258432891521048, 0.0), (1.3728358816593251, 0.0), (1.4872388717976022, 0.0), (1.6016418619358794, 0.0), (1.7160448520741565, 0.0), (1.8304478422124335, 0.0), (1.9448508323507105, 0.0), (2.0592538224889876, 0.0), (2.173656812627265, 0.0), (2.2880598027655417, 0.0), (2.402462792903819, 0.0), (2.516865783042096, 0.0), (2.631268773180373, 0.0), (2.7456717633186503, 0.0), (2.8600747534569275, 0.0), (2.9744777435952043, 0.0), (3.0888807337334816, 0.0), (3.203283723871759, 0.0), (3.3176867140100357, 0.0), (3.432089704148313, 3080.0), (3.5464926942865898, 0.0), (3.660895684424867, 3080.0), (3.7752986745631443, 3136.0), (3.889701664701421, 0.0), (4.004104654839698, 0.0), (4.118507644977975, 0.0), (4.232910635116252, 0.0), (4.34731362525453, 3136.0), (4.461716615392807, 3136.0), (4.576119605531083, 0.0), (4.690522595669361, 12321.0), (4.804925585807638, 12377.0), (4.919328575945915, 3080.0), (5.033731566084192, 15623.0), (5.14813455622247, 9186.0), (5.262537546360746, 6161.0), (5.376940536499023, 3136.0), (5.4913435266373005, 9352.0), (5.605746516775578, 34105.0), (5.720149506913855, 6216.0), (5.834552497052131, 12321.0), (5.948955487190409, 18593.0), (6.063358477328686, 34105.0), (6.177761467466963, 21784.0), (6.2921644576052405, 15457.0), (6.406567447743518, 9130.0), (6.520970437881794, 15567.0), (6.635373428020071, 18648.0), (6.749776418158349, 25032.0), (6.864179408296626, 21672.0), (6.978582398434903, 24920.0), (7.0929853885731795, 15512.0), (7.207388378711457, 28000.0), (7.321791368849734, 18482.0), (7.436194358988011, 55834.0), (7.5505973491262885, 37017.0), (7.665000339264565, 12377.0), (7.779403329402842, 21784.0), (7.893806319541119, 27945.0), (8.008209309679396, 24864.0), (8.122612299817673, 12432.0), (8.23701528995595, 18592.0), (8.351418280094228, 21673.0), (8.465821270232505, 12600.0), (8.580224260370782, 15568.0), (8.69462725050906, 18705.0), (8.809030240647337, 18537.0), (8.923433230785614, 15456.0), (9.037836220923891, 31081.0), (9.152239211062167, 24975.0), (9.266642201200444, 24808.0), (9.381045191338721, 21784.0), (9.495448181476998, 24698.0), (9.609851171615276, 27889.0), (9.724254161753553, 12432.0), (9.83865715189183, 9185.0), (9.953060142030107, 18538.0), (10.067463132168385, 15401.0), (10.181866122306662, 21728.0), (10.29626911244494, 24642.0), (10.410672102583215, 27779.0), (10.525075092721492, 12376.0), (10.63947808285977, 6050.0), (10.753881072998047, 15346.0), (10.868284063136324, 21728.0), (10.982687053274601, 24865.0), (11.097090043412878, 30969.0), (11.211493033551156, 24809.0), (11.325896023689433, 21561.0), (11.44029901382771, 24697.0), (11.554702003965987, 6272.0), (11.669104994104263, 24586.0), (11.78350798424254, 12432.0), (11.897910974380817, 27946.0), (12.012313964519095, 12433.0), (12.126716954657372, 12376.0), (12.24111994479565, 21729.0), (12.355522934933926, 9408.0), (12.469925925072204, 18705.0), (12.584328915210481, 6161.0), (12.698731905348758, 15569.0), (12.813134895487035, 15624.0), (12.927537885625311, 24697.0), (13.041940875763588, 9352.0), (13.156343865901865, 3192.0), (13.270746856040143, 6216.0), (13.38514984617842, 6216.0), (13.499552836316697, 9352.0), (13.613955826454974, 24585.0), (13.728358816593252, 3080.0), (13.842761806731529, 12488.0), (13.957164796869806, 21729.0), (14.071567787008082, 0.0), (14.185970777146359, 18482.0), (14.300373767284636, 9296.0), (14.414776757422914, 15512.0), (14.52917974756119, 9185.0), (14.643582737699468, 12488.0), (14.757985727837745, 18426.0), (14.872388717976023, 6160.0), (14.9867917081143, 6216.0), (15.101194698252577, 6272.0), (15.215597688390854, 12377.0), (15.33000067852913, 15568.0), (15.444403668667407, 9296.0), (15.558806658805684, 15400.0), (15.673209648943962, 9352.0), (15.787612639082239, 12488.0), (15.902015629220516, 18592.0), (16.01641861935879, 15568.0), (16.13082160949707, 6216.0), (16.245224599635346, 33994.0), (16.359627589773623, 24809.0), (16.4740305799119, 9241.0), (16.588433570050178, 12488.0), (16.702836560188455, 12433.0), (16.817239550326732, 15624.0), (16.93164254046501, 12321.0), (17.046045530603287, 12210.0), (17.160448520741564, 24808.0), (17.27485151087984, 18481.0), (17.38925450101812, 6160.0), (17.503657491156396, 9352.0), (17.618060481294673, 9296.0), (17.73246347143295, 3080.0), (17.846866461571228, 15457.0), (17.961269451709505, 12432.0), (18.075672441847782, 9352.0), (18.19007543198606, 15513.0), (18.304478422124333, 9185.0), (18.41888141226261, 6160.0), (18.533284402400888, 15456.0), (18.647687392539165, 9297.0), (18.762090382677442, 12432.0), (18.87649337281572, 18648.0), (18.990896362953997, 18425.0), (19.105299353092274, 6105.0), (19.21970234323055, 3136.0), (19.33410533336883, 6272.0), (19.448508323507106, 12432.0), (19.562911313645383, 0.0), (19.67731430378366, 6272.0), (19.791717293921938, 9241.0), (19.906120284060215, 15456.0), (20.020523274198492, 9408.0), (20.13492626433677, 6216.0), (20.249329254475047, 0.0), (20.363732244613324, 9352.0), (20.4781352347516, 0.0), (20.59253822488988, 3080.0), (20.706941215028156, 3136.0), (20.82134420516643, 3136.0), (20.935747195304707, 6160.0), (21.050150185442984, 3136.0), (21.16455317558126, 3191.0), (21.27895616571954, 0.0), (21.393359155857816, 6216.0), (21.507762145996093, 9352.0), (21.62216513613437, 0.0), (21.736568126272648, 6160.0), (21.850971116410925, 3025.0), (21.965374106549202, 0.0), (22.07977709668748, 3136.0), (22.194180086825757, 0.0), (22.308583076964034, 9297.0), (22.42298606710231, 6216.0), (22.53738905724059, 0.0), (22.651792047378866, 9240.0), (22.766195037517143, 6216.0), (22.88059802765542, 3136.0), (22.995001017793697, 3136.0), (23.109404007931975, 3080.0), (23.22380699807025, 0.0), (23.338209988208526, 3136.0), (23.452612978346803, 0.0), (23.56701596848508, 0.0), (23.681418958623357, 6160.0), (23.795821948761635, 0.0), (23.910224938899912, 0.0), (24.02462792903819, 6216.0), (24.139030919176466, 0.0), (24.253433909314744, 9352.0), (24.36783689945302, 3025.0), (24.4822398895913, 0.0), (24.596642879729576, 3136.0), (24.711045869867853, 0.0), (24.82544886000613, 0.0), (24.939851850144407, 0.0), (25.054254840282685, 0.0), (25.168657830420962, 0.0), (25.28306082055924, 0.0), (25.397463810697516, 0.0), (25.511866800835794, 0.0), (25.62626979097407, 0.0), (25.740672781112345, 56.0), (25.855075771250622, 0.0), (25.9694787613889, 3025.0), (26.083881751527176, 0.0), (26.198284741665454, 0.0), (26.31268773180373, 0.0), (26.427090721942008, 55.0), (26.541493712080285, 0.0), (26.655896702218563, 0.0), (26.77029969235684, 0.0), (26.884702682495117, 56.0), (-1e+308, 0.0)]

Minimum:  0.0
Maximum:  26.884702682495117
Mean:  5.562142786822455
No pixels - also nodata:  4959529.0
No pixels - no nodata:  4959529.0
Sum all:  27585608.453386784

Out[26]:
<matplotlib.legend.Legend at 0x72b23f9e6bc0>
No description has been provided for this image
In [27]:
#transform from ilwis to numpy array to be able to show it using imshow
pcp_in2np = np.fromiter(iter(pcp_in), np.ubyte, pcp_in.size().linearSize()) 
pcp_in2np = pcp_in2np.reshape((pcp_in.size().zsize, pcp_in.size().ysize, pcp_in.size().xsize))
print(pcp_in2np.shape)
(1, 2227, 2227)
In [28]:
plt.imshow(pcp_in2np[0], interpolation='none', vmin = 0, vmax = 60, cmap = 'turbo') 
plt.axis('on')
plt.colorbar(shrink=0.8).set_label('mm/day')
plt.title('Rainfall on '+start_string+' over a selected region in Zambia');
No description has been provided for this image

Multi temporal import - extract CHIRPS rainfall for a full month¶

Currently GEE in OpenEO does not facilitate multiband tif file creation and download. Now a loop is used to import single time steps to lateron create a multitemporal dataset

In [29]:
# Load data cube from GEE collection, example CHIRPS - Daily.

def download(date_start, date_end, date_start_fn):
    cube = connection.load_collection(
        "UCSB-CHG/CHIRPS/DAILY",
        spatial_extent={"west": 26, "south": -14, "east": 28, "north": -12},
        temporal_extent=[date_start, date_end],
        bands=["precipitation"],
    )
    cube.download(work_dir+'/pcp_chirps_'+date_start_fn+'.tif')
In [30]:
#for temporal extent: "2018-01-01", "2018-01-31"
#if you want to change specify appropriate year, month, day_start and day_end (of specified month)

year = 2018
month = 1
day_start = 1
day_end = 31

one_day = timedelta(days=1)

for day in range(day_start,day_end + 1):
    date_start = date(year, month, day)
    date_end = date_start + one_day
    date_start_fn = date_start.strftime('%Y%m%d')
    print('Downloading', date_start_fn)
    download(date_start,date_end,date_start_fn)    
Downloading 20180101
Downloading 20180102
Downloading 20180103
Downloading 20180104
Downloading 20180105
Downloading 20180106
Downloading 20180107
Downloading 20180108
Downloading 20180109
Downloading 20180110
Downloading 20180111
Downloading 20180112
Downloading 20180113
Downloading 20180114
Downloading 20180115
Downloading 20180116
Downloading 20180117
Downloading 20180118
Downloading 20180119
Downloading 20180120
Downloading 20180121
Downloading 20180122
Downloading 20180123
Downloading 20180124
Downloading 20180125
Downloading 20180126
Downloading 20180127
Downloading 20180128
Downloading 20180129
Downloading 20180130
Downloading 20180131
Data check using the same time stamp as for the single image download¶
In [31]:
rcday1 = ilwis.RasterCoverage('pcp_chirps_20180101.tif')
In [32]:
# probe its size
print(rcday1.size().xsize)
print(rcday1.size().ysize)
print(rcday1.size().zsize)
2227
2227
1
In [33]:
rcRain2np = np.fromiter(iter(rcday1), np.float64, rcday1.size().linearSize()) 
rcRain2np = rcRain2np.reshape((rcday1.size().zsize, rcday1.size().ysize, rcday1.size().xsize))
print(rcRain2np.shape)
(1, 2227, 2227)
In [34]:
stats_rain = rcday1.statistics(ilwis.PropertySets.pHISTOGRAM)
print('PCP-Minimum: ',stats_rain[ilwis.PropertySets.pMIN]) 
print('PCP-Maximum: ',stats_rain[ilwis.PropertySets.pMAX]) 

x=[a for (a,b) in stats_rain.histogram()][:-1] 
y=[b for (a,b) in stats_rain.histogram()][:-1]
PCP-Minimum:  0.0
PCP-Maximum:  26.884702682495117
In [35]:
fig, (ax1, ax2) = plt.subplots(ncols=2, figsize=(14, 10))
im = ax1.imshow(rcRain2np[0], cmap = 'turbo')
plt.colorbar(im, ax=ax1, orientation="horizontal")
ax1.set_title("PCP Map")
ax2.plot(x,y,label='Raster Map values')
ax2.set_title("PCP Histogram")
ax2.set_xlabel("PCP value")
ax2.set_ylabel("frequency");
No description has been provided for this image
In [36]:
print(rcday1.size())
print(rcday1.envelope())
coordSys = rcday1.coordinateSystem()
coordSys.toWKT()
Size(2227, 2227, 1)
25.999939 -14.000244 28.000487 -11.999696
Out[36]:
'PROJCS["pcp_chirps_20180101.tif",GEOCS["pcp_chirps_20180101.tif",DATUM[" WGS 84",[DWGS84],ELLIPSOID["WGS 84",6378137.000000000000,298.257223563000],PRIMEM["Greenwich",0, AUTHORITY["EPSG",8901"]]],PROJECTION[""],,UNIT[degrees,1.0]]'
In [37]:
pcpgrf = rcday1.geoReference()
print(pcpgrf)
pcp_chirps_20180101.tif
In [38]:
#create empty ilwis raster 
pcpAll = ilwis.RasterCoverage()
defNumr = ilwis.DataDefinition(ilwis.NumericDomain('code=value'), ilwis.NumericRange(0, 1000, 0))
pcpAll.setDataDef(defNumr)
pcpAll.setSize(ilwis.Size(1000, 918, 31))
pcpAll.setGeoReference(rcday1.geoReference())
In [39]:
pcpAllNp = []
for day in range(day_start,day_end + 1):
    date_start = date(year, month, day)
    date_start_fn = date_start.strftime('%Y%m%d')
    filename = 'pcp_chirps_' + date_start_fn + '.tif'
    print('Reading:', filename)
    rc = ilwis.RasterCoverage(filename) # open in ILWIS
    rc2Np = np.fromiter(iter(rc), np.float64, rc.size().linearSize()) #extract pixel data for all layers (1-D)
    rc2Np = rc2Np.reshape((rc.size().ysize, rc.size().xsize)) # reshape to 2-D
    pcpAllNp.append(rc2Np) # append all data to array
pcpAllNp = np.array(pcpAllNp) # create 3 D-array
print(np.shape(pcpAllNp))
Reading: pcp_chirps_20180101.tif
Reading: pcp_chirps_20180102.tif
Reading: pcp_chirps_20180103.tif
Reading: pcp_chirps_20180104.tif
Reading: pcp_chirps_20180105.tif
Reading: pcp_chirps_20180106.tif
Reading: pcp_chirps_20180107.tif
Reading: pcp_chirps_20180108.tif
Reading: pcp_chirps_20180109.tif
Reading: pcp_chirps_20180110.tif
Reading: pcp_chirps_20180111.tif
Reading: pcp_chirps_20180112.tif
Reading: pcp_chirps_20180113.tif
Reading: pcp_chirps_20180114.tif
Reading: pcp_chirps_20180115.tif
Reading: pcp_chirps_20180116.tif
Reading: pcp_chirps_20180117.tif
Reading: pcp_chirps_20180118.tif
Reading: pcp_chirps_20180119.tif
Reading: pcp_chirps_20180120.tif
Reading: pcp_chirps_20180121.tif
Reading: pcp_chirps_20180122.tif
Reading: pcp_chirps_20180123.tif
Reading: pcp_chirps_20180124.tif
Reading: pcp_chirps_20180125.tif
Reading: pcp_chirps_20180126.tif
Reading: pcp_chirps_20180127.tif
Reading: pcp_chirps_20180128.tif
Reading: pcp_chirps_20180129.tif
Reading: pcp_chirps_20180130.tif
Reading: pcp_chirps_20180131.tif
(31, 2227, 2227)
In [40]:
pcpAll.array2raster(pcpAllNp)
print(pcpAll.size())
Size(2227, 2227, 31)

Check imported data, it's size and value for a given pixel

In [41]:
print(pcpAll.size())
for day in range(31):
    print(pcpAll.pix2value(ilwis.Pixel(100,101,day)))#just to show that data is there
Size(2227, 2227, 31)
9.946399688720703
0.0
19.892799377441406
0.0
0.0
6.721532821655273
0.0
0.0
6.721532821655273
20.16459846496582
0.0
0.0
3.435541868209839
13.742167472839355
6.871083736419678
11.944055557250977
15.925407409667969
3.981351852416992
7.962703704833984
7.962703704833984
5.222626686096191
10.445253372192383
5.222626686096191
0.0
0.0
9.403274536132812
14.104913711547852
9.403274536132812
4.701637268066406
14.104913711547852
4.701637268066406

Uncomment the line below if you want to store the map stack in ILWIS format, you can use the ILWIS386 animation option to review the monthly rainfall product

In [42]:
#pcpAll.store('pcp_201801.mpl')

From a daily time step the total precipitation for the month retrieved is calculated using the 'aggregate - sum' function

In [43]:
ilwis.operationMetaData('aggregaterasterstatistics')
Out[43]:
'aggregaterasterstatistics(inputraster,statisticalmarker=mean|variance|standarddev|totalsumsquares|skew|kurtosis|max|min|maxindex|minindex|median|sum)'
In [44]:
rcSum = ilwis.do('aggregaterasterstatistics', pcpAll, 'sum')

Review raster size and some statistics

In [45]:
print(rcSum.size())
stats_pcpsum = rcSum.statistics(ilwis.PropertySets.pHISTOGRAM)
print()
print('Minimum: ',stats_pcpsum[ilwis.PropertySets.pMIN]) 
print('Maximum: ',stats_pcpsum[ilwis.PropertySets.pMAX])
Size(2227, 2227, 1)

Minimum:  72.3739185333252
Maximum:  213.02986216545105

Uncomment the line below to write your result to disk

In [46]:
#rcSum.store('pcpsum_201801.mpr')

Transform your result to a Numpy array so it can be visualized using Matplotlib

In [47]:
rcSum2np = np.fromiter(iter(rcSum), np.float64, rcSum.size().linearSize()) 
rcSum2np = rcSum2np.reshape((rcSum.size().zsize, rcSum.size().ysize, rcSum.size().xsize))
print(rcSum2np.shape)
(1, 2227, 2227)
In [48]:
plt.imshow(rcSum2np[0], interpolation='none', vmin = 0, vmax = 225, cmap = 'turbo') 
plt.axis('on')
plt.colorbar(shrink=0.8)
plt.title('Rainfall over Zambia')
Out[48]:
Text(0.5, 1.0, 'Rainfall over Zambia')
No description has been provided for this image

Continue with another selected collection or create your own code further below.

In [49]:
datacube = connection.load_collection(
  "COPERNICUS/S1_GRD",
  spatial_extent={"west": 16.06, "south": 48.06, "east": 16.65, "north": 48.35},
  temporal_extent=["2017-03-01", "2017-04-01"],
  bands=["VV", "VH"]
)
In [50]:
datacube.download(work_dir+'/S1.tif')
In [51]:
rcSelect = ilwis.RasterCoverage('S1.tif')
In [52]:
VV = ilwis.do('selection',rcSelect,"rasterbands(0)")
VH = ilwis.do('selection',rcSelect,"rasterbands(1)")
In [53]:
#calculate the cross polarized image (vv/vh)
VC = ilwis.do('mapcalc','(@1/@2)', VV, VH)
In [54]:
#create histogram using large number of bins, given the fact that the input image is a float64, with both positive and negative numbers
hist = VC.statistics(ilwis.PropertySets.pHISTOGRAM, 65535)
minPerc1, maxPerc1 = hist.calcStretchRange(1)
VCs = ilwis.do('linearstretch',VC, minPerc1, maxPerc1)
VCs = ilwis.do('setvaluerange', VCs, 0, 255, 1)
VCs.store('VCs.mpr')
In [55]:
VVs = ilwis.do('linearstretch',VV, 1)
VVs = ilwis.do('setvaluerange', VVs, 0, 255, 1)
VVs.store('VVs.mpr')
VV_2np = np.fromiter(iter(VVs), np.ubyte, VVs.size().linearSize()) 
VV_2np = VV_2np.reshape((VVs.size().ysize, VVs.size().xsize))

VHs = ilwis.do('linearstretch',VH, 1)
VHs = ilwis.do('setvaluerange', VHs, 0, 255, 1)
VHs.store('VHs.mpr')
VH_2np = np.fromiter(iter(VHs), np.ubyte, VHs.size().linearSize()) 
VH_2np = VH_2np.reshape((VHs.size().ysize, VHs.size().xsize))

#VCs = ilwis.do('linearstretch',VC_adjust, 1)
#VCs = ilwis.do('setvaluerange', VCs, 0, 255, 0.001)
#VCs.store('VCs.mpr')
VC_2np = np.fromiter(iter(VCs), np.ubyte, VCs.size().linearSize()) 
VC_2np = VC_2np.reshape((VCs.size().ysize, VCs.size().xsize))
In [56]:
# create  color composite (in RGB)
cc = np.dstack((VV_2np, VH_2np, VC_2np))
In [57]:
plt.figure(figsize=(10, 7))
plt.imshow(cc, interpolation ='nearest')
plt.title('S1 polarization composite showing the area in the neighborhood of Vienna')
Out[57]:
Text(0.5, 1.0, 'S1 polarization composite showing the area in the neighborhood of Vienna')
No description has been provided for this image

Now connect to dataspace.copernicus.eu¶

This requires registration at: https://dataspace.copernicus.eu/, select the option "Login" and if you don't have an account, create a new account and sign in.

In [58]:
connection = openeo.connect("openeo.dataspace.copernicus.eu").authenticate_oidc()
Authenticated using refresh token.
In [59]:
print(connection.list_collection_ids())
['SENTINEL3_OLCI_L1B', 'SENTINEL3_SLSTR', 'SENTINEL_5P_L2', 'COPERNICUS_VEGETATION_PHENOLOGY_PRODUCTIVITY_10M_SEASON1', 'COPERNICUS_VEGETATION_PHENOLOGY_PRODUCTIVITY_10M_SEASON2', 'COPERNICUS_PLANT_PHENOLOGY_INDEX', 'ESA_WORLDCOVER_10M_2020_V1', 'ESA_WORLDCOVER_10M_2021_V2', 'COPERNICUS_VEGETATION_INDICES', 'SENTINEL2_L1C', 'SENTINEL2_L2A', 'SENTINEL1_GRD', 'COPERNICUS_30', 'LANDSAT8_L2', 'SENTINEL3_SYN_L2_SYN', 'SENTINEL3_SLSTR_L2_LST', 'SENTINEL1_GLOBAL_MOSAICS']
In [60]:
connection.describe_collection("SENTINEL2_L2A")
Out[60]:

Retrieve Sentinel 2 data¶

Select for a given temporal range and area of interest, using a cloud cover threshold the 10 meter spatial resolution channels, b2, b3, b4 and b8 (visible blue, green and red as well as the near infrared spectral channels)

In [61]:
t = ["2023-04-01", "2023-06-30"]
s2_cube = connection.load_collection("SENTINEL2_L2A",
    spatial_extent={'west': 5.00, 'east': 5.38, 'south': 52.58, 'north': 52.80,"crs": "EPSG:4326",},
    temporal_extent= t,
    bands=['B02', 'B03', 'B04', 'B08'],
    max_cloud_cover=1,
)

Temporal aggregation¶

From the selected images, perform a temporal aggregation, using the 'median' value for each pixel in your time series

In [62]:
s2_cube_red = s2_cube.median_time()

Download the selected dataset¶

In [63]:
s2_cube_red.download(work_dir+'/Enkhuizen.tif')

Further raster image processing¶

Load the downloaded image in ILWISPy, select the 4 spectral channels as Blue, Green, Red and IR, calculate statistics and conduct a linear stretch operation

In [64]:
raster = ilwis.RasterCoverage ('Enkhuizen.tif')
print(raster.size())
Size(2643, 2526, 4)
In [65]:
Blue =  ilwis.do('selection',raster,"rasterbands(0)")
Green = ilwis.do('selection',raster,"rasterbands(1)")
Red = ilwis.do('selection',raster,"rasterbands(2)")
IR = ilwis.do('selection',raster,"rasterbands(3)")
print(IR.size().xsize)
print(IR.size().ysize)
print(IR.size().zsize)
2643
2526
1
In [66]:
stat_blue = Blue.statistics(ilwis.PropertySets.pHISTOGRAM, 65535)
minPerc1, maxPerc1 = stat_blue.calcStretchRange(1)
Blues = ilwis.do('linearstretch',Blue, minPerc1, maxPerc1)
Blues = ilwis.do('setvaluerange', Blues, 0, 255, 1)
In [67]:
stat_green = Green.statistics(ilwis.PropertySets.pHISTOGRAM, 65535)
minPerc1, maxPerc1 = stat_green.calcStretchRange(1)
Greens = ilwis.do('linearstretch',Green, minPerc1, maxPerc1)
Greens = ilwis.do('setvaluerange', Greens, 0, 255, 1)
In [68]:
stat_red = Red.statistics(ilwis.PropertySets.pHISTOGRAM, 65535)
minPerc1, maxPerc1 = stat_red.calcStretchRange(1)
Reds = ilwis.do('linearstretch',Red, minPerc1, maxPerc1)
Reds = ilwis.do('setvaluerange', Reds, 0, 255, 1)
In [69]:
stat_ir = IR.statistics(ilwis.PropertySets.pHISTOGRAM, 65535)
minPerc1, maxPerc1 = stat_ir.calcStretchRange(1)
IRs = ilwis.do('linearstretch',IR, minPerc1, maxPerc1)
IRs = ilwis.do('setvaluerange', IRs, 0, 255, 1)

Transform to a Numpy array¶

Transform your stretched layers to a Numpy array, in order to visualize your image as a colour composite, using imshow

In [70]:
Blues_2np = np.fromiter(iter(Blues), np.ubyte, IRs.size().linearSize()) 
Blues_2np = Blues_2np.reshape((IRs.size().ysize, IRs.size().xsize))

Greens_2np = np.fromiter(iter(Greens), np.ubyte, IRs.size().linearSize()) 
Greens_2np = Greens_2np.reshape((IRs.size().ysize, IRs.size().xsize))

Reds_2np = np.fromiter(iter(Reds), np.ubyte, IRs.size().linearSize()) 
Reds_2np = Reds_2np.reshape((IRs.size().ysize, IRs.size().xsize))

IRs_2np = np.fromiter(iter(IRs), np.ubyte, IRs.size().linearSize()) 
IRs_2np = IRs_2np.reshape((IRs.size().ysize, IRs.size().xsize))
In [71]:
# create  color composite (in RGB)
fc_S2 = np.dstack((IRs_2np, Reds_2np, Greens_2np))
nc_S2 = np.dstack((Reds_2np, Greens_2np, Blues_2np))
S2ALL = np.array([IRs_2np, Reds_2np, Greens_2np, Blues_2np])
In [72]:
fig1 = plt.figure(figsize=(15, 10))
plt.subplot(1, 2, 1)
plt.imshow(nc_S2)
plt.title('NC - S2 image retrieved from DataSpace.Copernicus.EU')
plt.subplot(1, 2, 2)
plt.imshow(fc_S2)
plt.title('FC - S2 image retrieved from DataSpace.Copernicus.EU');
No description has been provided for this image

Export results as a new ILWIS image¶

Create a new / empty image and as second step load the data and write the output to disk. Review your results using ILWIS386

In [73]:
#create empty ilwis raster 
S2_ilw = ilwis.RasterCoverage()
defNumr = ilwis.DataDefinition(ilwis.NumericDomain('code=value'), ilwis.NumericRange(0, 255, 1))
S2_ilw.setDataDef(defNumr)
S2_ilw.setSize(ilwis.Size(2643, 2526, 4))
S2_ilw.setGeoReference(raster.geoReference())
In [74]:
S2_ilw.array2raster(S2ALL.flatten())
In [75]:
S2_ilw.store('Enkhuizen.mpl')

Four Seasons¶

Derive the NDVI for the four seasons (summer, autumn, winter and spring) and calulate the Standard Deviation over the different seasons to get an idea of the variability

In [76]:
#summer
t = ["2022-06-01", "2022-08-31"]
summer = connection.load_collection("SENTINEL2_L2A",
    spatial_extent={'west': 5.00, 'east': 5.38, 'south': 52.58, 'north': 52.80,"crs": "EPSG:4326",},
    temporal_extent= t,
    bands=['B02', 'B03', 'B04', 'B08'],
    max_cloud_cover=1,
)
In [77]:
summer_red = summer.median_time()
In [78]:
summer_red.download(work_dir+'/summer.tif')
In [79]:
#autumn - note cloud cover has been set differently elso no image would qualify!
t = ["2022-09-01", "2022-11-30"]
autumn = connection.load_collection("SENTINEL2_L2A",
    spatial_extent={'west': 5.00, 'east': 5.38, 'south': 52.58, 'north': 52.80,"crs": "EPSG:4326",},
    temporal_extent= t,
    bands=['B02', 'B03', 'B04', 'B08'],
    max_cloud_cover=20,
)
In [80]:
autumn_red = autumn.median_time()
In [81]:
autumn_red.download(work_dir+'/autumn.tif')
In [82]:
#winter
t = ["2022-12-01", "2023-02-28"]
winter = connection.load_collection("SENTINEL2_L2A",
    spatial_extent={'west': 5.00, 'east': 5.38, 'south': 52.58, 'north': 52.80,"crs": "EPSG:4326",},
    temporal_extent= t,
    bands=['B02', 'B03', 'B04', 'B08'],
    max_cloud_cover=1,
)
In [83]:
winter_red = winter.median_time()
In [84]:
winter_red.download(work_dir+'/winter.tif')
In [85]:
#spring - note cloud cover has been set differently elso no image would qualify!
t = ["2023-03-01", "2023-03-31"]
spring = connection.load_collection("SENTINEL2_L2A",
    spatial_extent={'west': 5.00, 'east': 5.38, 'south': 52.58, 'north': 52.80,"crs": "EPSG:4326",},
    temporal_extent= t,
    bands=['B02', 'B03', 'B04', 'B08'],
    max_cloud_cover=20,
)
In [86]:
spring_red = spring.median_time()
In [87]:
spring_red.download(work_dir+'/spring.tif')
In [88]:
summer = ilwis.RasterCoverage ('summer.tif')
autumn = ilwis.RasterCoverage ('autumn.tif')
winter = ilwis.RasterCoverage ('winter.tif')
spring = ilwis.RasterCoverage ('spring.tif')
In [89]:
summer_Red = ilwis.do('selection',summer,"rasterbands(2)")
summer_IR = ilwis.do('selection',summer,"rasterbands(3)")
summer_ndvi = ilwis.do('mapcalc','(@1 - @2)/(@1 + @2)', summer_IR, summer_Red)
summer_ndvi = ilwis.do('setvaluerange', summer_ndvi, -1, 1, 0.001)
In [90]:
autumn_Red = ilwis.do('selection',autumn,"rasterbands(2)")
autumn_IR = ilwis.do('selection',autumn,"rasterbands(3)")
autumn_ndvi = ilwis.do('mapcalc','(@1 - @2)/(@1 + @2)', autumn_IR, autumn_Red)
autumn_ndvi = ilwis.do('setvaluerange', autumn_ndvi, -1, 1, 0.001)
In [91]:
winter_Red = ilwis.do('selection',winter,"rasterbands(2)")
winter_IR = ilwis.do('selection',winter,"rasterbands(3)")
winter_ndvi = ilwis.do('mapcalc','(@1 - @2)/(@1 + @2)', winter_IR, winter_Red)
winter_ndvi = ilwis.do('setvaluerange', winter_ndvi, -1, 1, 0.001)
In [92]:
spring_Red = ilwis.do('selection',spring,"rasterbands(2)")
spring_IR = ilwis.do('selection',spring,"rasterbands(3)")
spring_ndvi = ilwis.do('mapcalc','(@1 - @2)/(@1 + @2)', spring_IR, spring_Red)
spring_ndvi = ilwis.do('setvaluerange', spring_ndvi, -1, 1, 0.001)
In [93]:
summer_ndvi_2np = np.fromiter(iter(summer_ndvi), np.float64, summer_ndvi.size().linearSize()) 
summer_ndvi_2np = summer_ndvi_2np.reshape((summer_ndvi.size().ysize, summer_ndvi.size().xsize))

autumn_ndvi_2np = np.fromiter(iter(autumn_ndvi), np.float64, summer_ndvi.size().linearSize()) 
autumn_ndvi_2np = autumn_ndvi_2np.reshape((summer_ndvi.size().ysize, summer_ndvi.size().xsize))

winter_ndvi_2np = np.fromiter(iter(winter_ndvi), np.float64, summer_ndvi.size().linearSize()) 
winter_ndvi_2np = winter_ndvi_2np.reshape((summer_ndvi.size().ysize, summer_ndvi.size().xsize))

spring_ndvi_2np = np.fromiter(iter(spring_ndvi), np.float64, summer_ndvi.size().linearSize()) 
spring_ndvi_2np = spring_ndvi_2np.reshape((summer_ndvi.size().ysize, summer_ndvi.size().xsize))
In [94]:
print(summer_ndvi.size())
Size(2643, 2526, 1)
In [95]:
#create empty ilwis raster 
S2_ndvi_all = ilwis.RasterCoverage()
defNumr = ilwis.DataDefinition(ilwis.NumericDomain('code=value'), ilwis.NumericRange(-1, 1, 0.001))
S2_ndvi_all.setDataDef(defNumr)
S2_ndvi_all.setSize(ilwis.Size(2643, 2526, 4))
S2_ndvi_all.setGeoReference(summer_ndvi.geoReference())
In [96]:
S2_ndvi = np.array([summer_ndvi_2np, autumn_ndvi_2np, winter_ndvi_2np, spring_ndvi_2np])
In [97]:
S2_ndvi_all.array2raster(S2_ndvi.flatten())
In [98]:
S2_ndvi_all.store('S2_ndvi.mpl')
In [99]:
ilwis.operationMetaData('aggregaterasterstatistics')
Out[99]:
'aggregaterasterstatistics(inputraster,statisticalmarker=mean|variance|standarddev|totalsumsquares|skew|kurtosis|max|min|maxindex|minindex|median|sum)'
In [100]:
ndvi_std = ilwis.do('aggregaterasterstatistics', S2_ndvi_all, 'standarddev')
ndvi_var = ilwis.do('aggregaterasterstatistics', S2_ndvi_all, 'variance')
In [101]:
#masking the water using the cloud free composite IR band
ndvi_mask = ilwis.do('mapcalc','iff(@1 < 13,0,1)', IRs)
ndvi_mask = ilwis.do('setvaluerange', ndvi_mask, 0, 1, 1)
ndvi_mask.store('Enkhuizen_mask.mpr')
In [102]:
ndvi_std_mask = ilwis.do('mapcalc','iff(@1 == 1,@2,0)', ndvi_mask, ndvi_std)
ndvi_var_mask = ilwis.do('mapcalc','iff(@1 == 1,@2,0)', ndvi_mask, ndvi_var)
ndvi_std_mask.store('S2_ndviSTD.mpl')
ndvi_var_mask.store('S2_ndviVAR.mpl')

What can be concluded if looking at the areas with the higher variances and standard deviations