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)
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
A list of all known openEO providers and their services: https://hub.openeo.org/
Check the collections and editor functionality at: https://editor.openeo.cloud/
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.
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
ilwis.version()
'1.0 build 20230714'
Path('./Intro_openEO_ILWISPy').mkdir(parents=True, exist_ok=True)
work_dir = os.getcwd() + '/Intro_openEO_ILWISPy'
#set the working directory for ILWISPy
ilwis.setWorkingCatalog(work_dir)
print(work_dir)
D:\jupyter\notebook_scripts\ilwispy_tutorial\tutorial_release/Intro_openEO_ILWISPy
openeo.__version__
'0.20.0'
connection = openeo.connect("https://earthengine.openeo.org")
#connection.authenticate_basic("username", "password")
print("Authenticate with Basic authentication")
connection.authenticate_basic("group1", "test123")
Authenticate with Basic authentication
<Connection to 'https://earthengine.openeo.org/v1.0' with BasicBearerAuth>
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.
connection.list_processes()
print(connection.list_collection_ids())
['AAFC/ACI', 'ACA/reef_habitat/v1_0', 'ACA/reef_habitat/v2_0', 'AHN/AHN2_05M_INT', 'AHN/AHN2_05M_NON', 'AHN/AHN2_05M_RUW', 'ASTER/AST_L1T_003', 'AU/GA/AUSTRALIA_5M_DEM', 'AU/GA/DEM_1SEC/v10/DEM-H', 'AU/GA/DEM_1SEC/v10/DEM-S', 'BIOPAMA/GlobalOilPalm/v1', 'BNU/FGS/CCNL/v1', 'CAS/IGSNRR/PML/V2', 'CAS/IGSNRR/PML/V2_v017', 'CGIAR/SRTM90_V4', 'CIESIN/GPWv411/GPW_Basic_Demographic_Characteristics', 'CIESIN/GPWv411/GPW_Data_Context', '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/CORINE/V20/100m', 'COPERNICUS/DEM/GLO30', 'COPERNICUS/Landcover/100m/Proba-V-C3/Global', 'COPERNICUS/Landcover/100m/Proba-V/Global', 'COPERNICUS/S1_GRD', 'COPERNICUS/S2', 'COPERNICUS/S2_CLOUD_PROBABILITY', 'COPERNICUS/S2_HARMONIZED', 'COPERNICUS/S2_SR', 'COPERNICUS/S2_SR_HARMONIZED', 'COPERNICUS/S3/OLCI', 'COPERNICUS/S5P/NRTI/L3_AER_AI', 'COPERNICUS/S5P/NRTI/L3_AER_LH', 'COPERNICUS/S5P/NRTI/L3_CLOUD', 'COPERNICUS/S5P/NRTI/L3_CO', 'COPERNICUS/S5P/NRTI/L3_HCHO', 'COPERNICUS/S5P/NRTI/L3_NO2', 'COPERNICUS/S5P/NRTI/L3_O3', 'COPERNICUS/S5P/NRTI/L3_SO2', 'COPERNICUS/S5P/OFFL/L3_AER_AI', 'COPERNICUS/S5P/OFFL/L3_AER_LH', 'COPERNICUS/S5P/OFFL/L3_CH4', 'COPERNICUS/S5P/OFFL/L3_CLOUD', 'COPERNICUS/S5P/OFFL/L3_CO', 'COPERNICUS/S5P/OFFL/L3_HCHO', 'COPERNICUS/S5P/OFFL/L3_NO2', 'COPERNICUS/S5P/OFFL/L3_O3', 'COPERNICUS/S5P/OFFL/L3_O3_TCL', 'COPERNICUS/S5P/OFFL/L3_SO2', 'CPOM/CryoSat2/ANTARCTICA_DEM', 'CSIRO/SLGA', 'CSP/ERGo/1_0/Global/ALOS_CHILI', 'CSP/ERGo/1_0/Global/ALOS_landforms', 'CSP/ERGo/1_0/Global/ALOS_mTPI', 'CSP/ERGo/1_0/Global/ALOS_topoDiversity', 'CSP/ERGo/1_0/Global/SRTM_CHILI', 'CSP/ERGo/1_0/Global/SRTM_landforms', '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', 'CSP/ERGo/1_0/US/physiography', 'CSP/ERGo/1_0/US/topoDiversity', 'CSP/HM/GlobalHumanModification', 'DLR/WSF/WSF2015/v1', 'DOE/ORNL/LandScan_HD/Ukraine_202201', 'ECMWF/CAMS/NRT', 'ECMWF/ERA5/DAILY', 'ECMWF/ERA5_LAND/DAILY_AGGR', 'ECMWF/ERA5_LAND/DAILY_RAW', 'ECMWF/ERA5_LAND/HOURLY', 'ECMWF/ERA5_LAND/MONTHLY', 'ECMWF/ERA5_LAND/MONTHLY_AGGR', 'ECMWF/ERA5_LAND/MONTHLY_BY_HOUR', 'ECMWF/ERA5/MONTHLY', 'EO1/HYPERION', 'ESA/CCI/FireCCI/5_1', 'ESA/GLOBCOVER_L4_200901_200912_V2_3', 'ESA/WorldCover/v100', 'ESA/WorldCover/v200', 'Estonia/Maamet/orthos/mono', 'Estonia/Maamet/orthos/rgb', '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', 'FORMA/FORMA_500m', 'Finland/MAVI/VV/50cm', 'Finland/SMK/VV/50cm', 'Finland/SMK/V/50cm', 'GFW/GFF/V1/fishing_hours', 'GFW/GFF/V1/vessel_hours', 'GLCF/GLS_TCC', 'GLCF/GLS_WATER', 'GLOBAL_FLOOD_DB/MODIS_EVENTS/V1', 'GLOBAL_FLOOD_DB/MODIS_EVENTS/V1_0', 'GOOGLE/DYNAMICWORLD/V1', 'GRIDMET/DROUGHT', 'Germany/Brandenburg/20cm', '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', 'IDAHO_EPSCOR/MACAv2_METDATA_MONTHLY', 'IDAHO_EPSCOR/PDSI', 'IDAHO_EPSCOR/TERRACLIMATE', 'IGN/RGE_ALTI/1M/2_0', 'ISDASOIL/Africa/aluminium_extractable', '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/phosphorus_extractable', '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', '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_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', 'JCU/Murray/GIC/global_tidal_wetland_change/2019', 'JRC/D5/EUCROPMAP/V1', 'JRC/GHSL/P2016/BUILT_LDSMT_GLOBE_V1', 'JRC/GHSL/P2016/POP_GPW_GLOBE_V1', 'JRC/GHSL/P2016/SMOD_POP_GLOBE_V1', 'JRC/GSW1_0/GlobalSurfaceWater', 'JRC/GSW1_0/Metadata', 'JRC/GSW1_0/MonthlyHistory', 'JRC/GSW1_0/MonthlyRecurrence', 'JRC/GSW1_0/YearlyHistory', 'JRC/GSW1_1/GlobalSurfaceWater', 'JRC/GSW1_1/Metadata', '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_2/YearlyHistory', '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_4/Metadata', 'JRC/GSW1_4/MonthlyHistory', 'JRC/GSW1_4/MonthlyRecurrence', 'JRC/GSW1_4/YearlyHistory', 'KNTU/LiDARLab/IranLandCover/V1', 'LANDFIRE/Fire/FRG/v1_2_0', 'LANDFIRE/Fire/MFRI/v1_2_0', 'LANDFIRE/Fire/PLS/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/ESP/v1_2_0/AK', 'LANDFIRE/Vegetation/ESP/v1_2_0/CONUS', 'LANDFIRE/Vegetation/ESP/v1_2_0/HI', 'LANDFIRE/Vegetation/EVC/v1_4_0', 'LANDFIRE/Vegetation/EVH/v1_4_0', 'LANDFIRE/Vegetation/EVT/v1_4_0', 'LANDSAT/GLS1975', 'LANDSAT/GLS1975_MOSAIC', 'LANDSAT/GLS2005', 'LANDSAT/GLS2005_L5', 'LANDSAT/GLS2005_L7', 'LANDSAT/LC08/C01/T1', 'LANDSAT/LC08/C01/T1_32DAY_BAI', 'LANDSAT/LC08/C01/T1_32DAY_EVI', 'LANDSAT/LC08/C01/T1_32DAY_NBRT', 'LANDSAT/LC08/C01/T1_32DAY_NDSI', 'LANDSAT/LC08/C01/T1_32DAY_NDVI', 'LANDSAT/LC08/C01/T1_32DAY_NDWI', 'LANDSAT/LC08/C01/T1_32DAY_RAW', 'LANDSAT/LC08/C01/T1_32DAY_TOA', 'LANDSAT/LC08/C01/T1_8DAY_BAI', 'LANDSAT/LC08/C01/T1_8DAY_EVI', 'LANDSAT/LC08/C01/T1_8DAY_NBRT', 'LANDSAT/LC08/C01/T1_8DAY_NDSI', 'LANDSAT/LC08/C01/T1_8DAY_NDVI', 'LANDSAT/LC08/C01/T1_8DAY_NDWI', 'LANDSAT/LC08/C01/T1_8DAY_RAW', 'LANDSAT/LC08/C01/T1_8DAY_TOA', 'LANDSAT/LC08/C01/T1_ANNUAL_BAI', 'LANDSAT/LC08/C01/T1_ANNUAL_EVI', 'LANDSAT/LC08/C01/T1_ANNUAL_GREENEST_TOA', 'LANDSAT/LC08/C01/T1_ANNUAL_NBRT', 'LANDSAT/LC08/C01/T1_ANNUAL_NDSI', 'LANDSAT/LC08/C01/T1_ANNUAL_NDVI', 'LANDSAT/LC08/C01/T1_ANNUAL_NDWI', 'LANDSAT/LC08/C01/T1_ANNUAL_RAW', 'LANDSAT/LC08/C01/T1_ANNUAL_TOA', 'LANDSAT/LC08/C01/T1_RT', 'LANDSAT/LC08/C01/T1_RT_TOA', 'LANDSAT/LC08/C01/T1_SR', 'LANDSAT/LC08/C01/T1_TOA', 'LANDSAT/LC08/C01/T2', 'LANDSAT/LC08/C01/T2_SR', 'LANDSAT/LC08/C01/T2_TOA', 'LANDSAT/LC08/C02/T1', '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_RT', 'LANDSAT/LC09/C02/T1_RT_TOA', 'LANDSAT/LC09/C02/T1_TOA', 'LANDSAT/LC09/C02/T2', 'LANDSAT/LC09/C02/T2_L2', 'LANDSAT/LC09/C02/T2_TOA', 'LANDSAT/LC8', 'LANDSAT/LC8_L1T', 'LANDSAT/LC8_L1T_32DAY_BAI', 'LANDSAT/LC8_L1T_32DAY_EVI', 'LANDSAT/LC8_L1T_32DAY_NBRT', 'LANDSAT/LC8_L1T_32DAY_NDSI', 'LANDSAT/LC8_L1T_32DAY_NDVI', 'LANDSAT/LC8_L1T_32DAY_NDWI', 'LANDSAT/LC8_L1T_32DAY_RAW', 'LANDSAT/LC8_L1T_32DAY_TOA', 'LANDSAT/LC8_L1T_8DAY_BAI', 'LANDSAT/LC8_L1T_8DAY_EVI', 'LANDSAT/LC8_L1T_8DAY_NBRT', 'LANDSAT/LC8_L1T_8DAY_NDSI', 'LANDSAT/LC8_L1T_8DAY_NDVI', 'LANDSAT/LC8_L1T_8DAY_NDWI', 'LANDSAT/LC8_L1T_8DAY_RAW', 'LANDSAT/LC8_L1T_8DAY_TOA', 'LANDSAT/LC8_L1T_ANNUAL_BAI', 'LANDSAT/LC8_L1T_ANNUAL_EVI', 'LANDSAT/LC8_L1T_ANNUAL_GREENEST_TOA', 'LANDSAT/LC8_L1T_ANNUAL_NBRT', 'LANDSAT/LC8_L1T_ANNUAL_NDSI', 'LANDSAT/LC8_L1T_ANNUAL_NDVI', 'LANDSAT/LC8_L1T_ANNUAL_NDWI', 'LANDSAT/LC8_L1T_ANNUAL_RAW', 'LANDSAT/LC8_L1T_ANNUAL_TOA', 'LANDSAT/LC8_L1T_TOA', 'LANDSAT/LE07/C01/T1', 'LANDSAT/LE07/C01/T1_32DAY_BAI', 'LANDSAT/LE07/C01/T1_32DAY_EVI', 'LANDSAT/LE07/C01/T1_32DAY_NBRT', 'LANDSAT/LE07/C01/T1_32DAY_NDSI', 'LANDSAT/LE07/C01/T1_32DAY_NDVI', 'LANDSAT/LE07/C01/T1_32DAY_NDWI', 'LANDSAT/LE07/C01/T1_32DAY_RAW', 'LANDSAT/LE07/C01/T1_32DAY_TOA', 'LANDSAT/LE07/C01/T1_8DAY_BAI', 'LANDSAT/LE07/C01/T1_8DAY_EVI', 'LANDSAT/LE07/C01/T1_8DAY_NBRT', 'LANDSAT/LE07/C01/T1_8DAY_NDSI', 'LANDSAT/LE07/C01/T1_8DAY_NDVI', 'LANDSAT/LE07/C01/T1_8DAY_NDWI', 'LANDSAT/LE07/C01/T1_8DAY_RAW', 'LANDSAT/LE07/C01/T1_8DAY_TOA', 'LANDSAT/LE07/C01/T1_ANNUAL_BAI', 'LANDSAT/LE07/C01/T1_ANNUAL_EVI', 'LANDSAT/LE07/C01/T1_ANNUAL_GREENEST_TOA', 'LANDSAT/LE07/C01/T1_ANNUAL_NBRT', 'LANDSAT/LE07/C01/T1_ANNUAL_NDSI', 'LANDSAT/LE07/C01/T1_ANNUAL_NDVI', 'LANDSAT/LE07/C01/T1_ANNUAL_NDWI', 'LANDSAT/LE07/C01/T1_ANNUAL_RAW', 'LANDSAT/LE07/C01/T1_ANNUAL_TOA', 'LANDSAT/LE07/C01/T1_RT', 'LANDSAT/LE07/C01/T1_RT_TOA', 'LANDSAT/LE07/C01/T1_SR', 'LANDSAT/LE07/C01/T1_TOA', 'LANDSAT/LE07/C01/T2', 'LANDSAT/LE07/C01/T2_SR', 'LANDSAT/LE07/C01/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/LE7', 'LANDSAT/LE7_L1T', 'LANDSAT/LE7_L1T_32DAY_BAI', 'LANDSAT/LE7_L1T_32DAY_EVI', 'LANDSAT/LE7_L1T_32DAY_NBRT', 'LANDSAT/LE7_L1T_32DAY_NDSI', 'LANDSAT/LE7_L1T_32DAY_NDVI', 'LANDSAT/LE7_L1T_32DAY_NDWI', 'LANDSAT/LE7_L1T_32DAY_RAW', 'LANDSAT/LE7_L1T_32DAY_TOA', 'LANDSAT/LE7_L1T_8DAY_BAI', 'LANDSAT/LE7_L1T_8DAY_EVI', 'LANDSAT/LE7_L1T_8DAY_NBRT', 'LANDSAT/LE7_L1T_8DAY_NDSI', 'LANDSAT/LE7_L1T_8DAY_NDVI', 'LANDSAT/LE7_L1T_8DAY_NDWI', 'LANDSAT/LE7_L1T_8DAY_RAW', 'LANDSAT/LE7_L1T_8DAY_TOA', 'LANDSAT/LE7_L1T_ANNUAL_BAI', 'LANDSAT/LE7_L1T_ANNUAL_EVI', 'LANDSAT/LE7_L1T_ANNUAL_GREENEST_TOA', 'LANDSAT/LE7_L1T_ANNUAL_NBRT', 'LANDSAT/LE7_L1T_ANNUAL_NDSI', 'LANDSAT/LE7_L1T_ANNUAL_NDVI', 'LANDSAT/LE7_L1T_ANNUAL_NDWI', 'LANDSAT/LE7_L1T_ANNUAL_RAW', 'LANDSAT/LE7_L1T_ANNUAL_TOA', 'LANDSAT/LE7_L1T_TOA', 'LANDSAT/LE7_TOA_1YEAR', 'LANDSAT/LE7_TOA_3YEAR', 'LANDSAT/LE7_TOA_5YEAR', 'LANDSAT/LM01/C01/T1', 'LANDSAT/LM01/C01/T2', 'LANDSAT/LM01/C02/T1', 'LANDSAT/LM01/C02/T2', 'LANDSAT/LM02/C01/T1', 'LANDSAT/LM02/C01/T2', 'LANDSAT/LM02/C02/T1', 'LANDSAT/LM02/C02/T2', 'LANDSAT/LM03/C01/T1', 'LANDSAT/LM03/C01/T2', 'LANDSAT/LM03/C02/T1', 'LANDSAT/LM03/C02/T2', 'LANDSAT/LM04/C01/T1', 'LANDSAT/LM04/C01/T2', 'LANDSAT/LM04/C02/T1', 'LANDSAT/LM04/C02/T2', 'LANDSAT/LM05/C01/T1', 'LANDSAT/LM05/C01/T2', 'LANDSAT/LM05/C02/T1', 'LANDSAT/LM05/C02/T2', 'LANDSAT/LM1', 'LANDSAT/LM1_L1T', 'LANDSAT/LM2', 'LANDSAT/LM2_L1T', 'LANDSAT/LM3', 'LANDSAT/LM3_L1T', 'LANDSAT/LM4', 'LANDSAT/LM4_L1T', 'LANDSAT/LM5', 'LANDSAT/LM5_L1T', 'LANDSAT/LO08/C01/T1', 'LANDSAT/LO08/C01/T1_RT', 'LANDSAT/LO08/C01/T2', 'LANDSAT/LT04/C01/T1', 'LANDSAT/LT04/C01/T1_32DAY_BAI', 'LANDSAT/LT04/C01/T1_32DAY_EVI', 'LANDSAT/LT04/C01/T1_32DAY_NBRT', 'LANDSAT/LT04/C01/T1_32DAY_NDSI', 'LANDSAT/LT04/C01/T1_32DAY_NDVI', 'LANDSAT/LT04/C01/T1_32DAY_NDWI', 'LANDSAT/LT04/C01/T1_32DAY_RAW', 'LANDSAT/LT04/C01/T1_32DAY_TOA', 'LANDSAT/LT04/C01/T1_8DAY_BAI', 'LANDSAT/LT04/C01/T1_8DAY_EVI', 'LANDSAT/LT04/C01/T1_8DAY_NBRT', 'LANDSAT/LT04/C01/T1_8DAY_NDSI', 'LANDSAT/LT04/C01/T1_8DAY_NDVI', 'LANDSAT/LT04/C01/T1_8DAY_NDWI', 'LANDSAT/LT04/C01/T1_8DAY_RAW', 'LANDSAT/LT04/C01/T1_8DAY_TOA', 'LANDSAT/LT04/C01/T1_ANNUAL_BAI', 'LANDSAT/LT04/C01/T1_ANNUAL_EVI', 'LANDSAT/LT04/C01/T1_ANNUAL_GREENEST_TOA', 'LANDSAT/LT04/C01/T1_ANNUAL_NBRT', 'LANDSAT/LT04/C01/T1_ANNUAL_NDSI', 'LANDSAT/LT04/C01/T1_ANNUAL_NDVI', 'LANDSAT/LT04/C01/T1_ANNUAL_NDWI', 'LANDSAT/LT04/C01/T1_ANNUAL_RAW', 'LANDSAT/LT04/C01/T1_ANNUAL_TOA', 'LANDSAT/LT04/C01/T1_SR', 'LANDSAT/LT04/C01/T1_TOA', 'LANDSAT/LT04/C01/T2', 'LANDSAT/LT04/C01/T2_SR', 'LANDSAT/LT04/C01/T2_TOA', 'LANDSAT/LT04/C02/T1', 'LANDSAT/LT04/C02/T1_L2', 'LANDSAT/LT04/C02/T1_TOA', 'LANDSAT/LT04/C02/T2', 'LANDSAT/LT04/C02/T2_L2', 'LANDSAT/LT04/C02/T2_TOA', 'LANDSAT/LT05/C01/T1', 'LANDSAT/LT05/C01/T1_32DAY_BAI', 'LANDSAT/LT05/C01/T1_32DAY_EVI', 'LANDSAT/LT05/C01/T1_32DAY_NBRT', 'LANDSAT/LT05/C01/T1_32DAY_NDSI', 'LANDSAT/LT05/C01/T1_32DAY_NDVI', 'LANDSAT/LT05/C01/T1_32DAY_NDWI', 'LANDSAT/LT05/C01/T1_32DAY_RAW', 'LANDSAT/LT05/C01/T1_32DAY_TOA', 'LANDSAT/LT05/C01/T1_8DAY_BAI', 'LANDSAT/LT05/C01/T1_8DAY_EVI', 'LANDSAT/LT05/C01/T1_8DAY_NBRT', 'LANDSAT/LT05/C01/T1_8DAY_NDSI', 'LANDSAT/LT05/C01/T1_8DAY_NDVI', 'LANDSAT/LT05/C01/T1_8DAY_NDWI', 'LANDSAT/LT05/C01/T1_8DAY_RAW', 'LANDSAT/LT05/C01/T1_8DAY_TOA', 'LANDSAT/LT05/C01/T1_ANNUAL_BAI', 'LANDSAT/LT05/C01/T1_ANNUAL_EVI', 'LANDSAT/LT05/C01/T1_ANNUAL_GREENEST_TOA', 'LANDSAT/LT05/C01/T1_ANNUAL_NBRT', 'LANDSAT/LT05/C01/T1_ANNUAL_NDSI', 'LANDSAT/LT05/C01/T1_ANNUAL_NDVI', 'LANDSAT/LT05/C01/T1_ANNUAL_NDWI', 'LANDSAT/LT05/C01/T1_ANNUAL_RAW', 'LANDSAT/LT05/C01/T1_ANNUAL_TOA', 'LANDSAT/LT05/C01/T1_SR', 'LANDSAT/LT05/C01/T1_TOA', 'LANDSAT/LT05/C01/T2', 'LANDSAT/LT05/C01/T2_SR', 'LANDSAT/LT05/C01/T2_TOA', '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/LT08/C01/T2', 'LANDSAT/LT4', 'LANDSAT/LT4_L1T', 'LANDSAT/LT4_L1T_32DAY_BAI', 'LANDSAT/LT4_L1T_32DAY_EVI', 'LANDSAT/LT4_L1T_32DAY_NBRT', 'LANDSAT/LT4_L1T_32DAY_NDSI', 'LANDSAT/LT4_L1T_32DAY_NDVI', 'LANDSAT/LT4_L1T_32DAY_NDWI', 'LANDSAT/LT4_L1T_32DAY_RAW', 'LANDSAT/LT4_L1T_32DAY_TOA', 'LANDSAT/LT4_L1T_8DAY_BAI', 'LANDSAT/LT4_L1T_8DAY_EVI', 'LANDSAT/LT4_L1T_8DAY_NBRT', 'LANDSAT/LT4_L1T_8DAY_NDSI', 'LANDSAT/LT4_L1T_8DAY_NDVI', 'LANDSAT/LT4_L1T_8DAY_NDWI', 'LANDSAT/LT4_L1T_8DAY_RAW', 'LANDSAT/LT4_L1T_8DAY_TOA', 'LANDSAT/LT4_L1T_ANNUAL_BAI', 'LANDSAT/LT4_L1T_ANNUAL_EVI', 'LANDSAT/LT4_L1T_ANNUAL_GREENEST_TOA', 'LANDSAT/LT4_L1T_ANNUAL_NBRT', 'LANDSAT/LT4_L1T_ANNUAL_NDSI', 'LANDSAT/LT4_L1T_ANNUAL_NDVI', 'LANDSAT/LT4_L1T_ANNUAL_NDWI', 'LANDSAT/LT4_L1T_ANNUAL_RAW', 'LANDSAT/LT4_L1T_ANNUAL_TOA', 'LANDSAT/LT4_L1T_TOA', 'LANDSAT/LT5', 'LANDSAT/LT5_L1T', 'LANDSAT/LT5_L1T_32DAY_BAI', 'LANDSAT/LT5_L1T_32DAY_EVI', 'LANDSAT/LT5_L1T_32DAY_NBRT', 'LANDSAT/LT5_L1T_32DAY_NDSI', 'LANDSAT/LT5_L1T_32DAY_NDVI', 'LANDSAT/LT5_L1T_32DAY_NDWI', 'LANDSAT/LT5_L1T_32DAY_RAW', 'LANDSAT/LT5_L1T_32DAY_TOA', 'LANDSAT/LT5_L1T_8DAY_BAI', 'LANDSAT/LT5_L1T_8DAY_EVI', 'LANDSAT/LT5_L1T_8DAY_NBRT', 'LANDSAT/LT5_L1T_8DAY_NDSI', 'LANDSAT/LT5_L1T_8DAY_NDVI', 'LANDSAT/LT5_L1T_8DAY_NDWI', 'LANDSAT/LT5_L1T_8DAY_RAW', 'LANDSAT/LT5_L1T_8DAY_TOA', 'LANDSAT/LT5_L1T_ANNUAL_BAI', 'LANDSAT/LT5_L1T_ANNUAL_EVI', 'LANDSAT/LT5_L1T_ANNUAL_GREENEST_TOA', 'LANDSAT/LT5_L1T_ANNUAL_NBRT', 'LANDSAT/LT5_L1T_ANNUAL_NDSI', 'LANDSAT/LT5_L1T_ANNUAL_NDVI', 'LANDSAT/LT5_L1T_ANNUAL_NDWI', 'LANDSAT/LT5_L1T_ANNUAL_RAW', 'LANDSAT/LT5_L1T_ANNUAL_TOA', 'LANDSAT/LT5_L1T_TOA', 'LANDSAT/MANGROVE_FORESTS', 'LARSE/GEDI/GEDI02_B_002_MONTHLY', 'LARSE/GEDI/GEDI04_A_002_MONTHLY', 'LARSE/GEDI/GEDI04_B_002', 'Latvia/Maamet/orthos/cir', 'Latvia/Maamet/orthos/rgb', 'MERIT/DEM/v1_0_3', 'MERIT/Hydro_reduced/v1_0_1', 'MERIT/Hydro/v1_0_1', 'MODIS/006/MCD12Q1', 'MODIS/006/MCD12Q2', 'MODIS/006/MCD15A3H', 'MODIS/006/MCD19A2_GRANULES', 'MODIS/006/MCD43A1', 'MODIS/006/MCD43A2', 'MODIS/006/MCD43A3', 'MODIS/006/MCD43A4', 'MODIS/006/MCD43C3', 'MODIS/006/MCD64A1', 'MODIS/006/MOD08_M3', 'MODIS/006/MOD09A1', 'MODIS/006/MOD09GA', 'MODIS/006/MOD09GQ', 'MODIS/006/MOD09Q1', 'MODIS/006/MOD10A1', 'MODIS/006/MOD11A1', 'MODIS/006/MOD11A2', 'MODIS/006/MOD13A1', 'MODIS/006/MOD13A2', 'MODIS/006/MOD13Q1', 'MODIS/006/MOD14A1', 'MODIS/006/MOD14A2', 'MODIS/006/MOD15A2H', 'MODIS/006/MOD16A2', 'MODIS/006/MOD17A2H', 'MODIS/006/MOD17A3H', 'MODIS/006/MOD17A3HGF', 'MODIS/006/MOD44B', 'MODIS/006/MOD44W', 'MODIS/006/MODOCGA', 'MODIS/006/MYD08_M3', 'MODIS/006/MYD09A1', 'MODIS/006/MYD09GA', 'MODIS/006/MYD09GQ', 'MODIS/006/MYD09Q1', 'MODIS/006/MYD10A1', 'MODIS/006/MYD11A1', 'MODIS/006/MYD11A2', 'MODIS/006/MYD13A1', 'MODIS/006/MYD13A2', 'MODIS/006/MYD13Q1', 'MODIS/006/MYD14A1', 'MODIS/006/MYD14A2', 'MODIS/006/MYD15A2H', 'MODIS/006/MYD17A2H', 'MODIS/006/MYD17A3H', 'MODIS/006/MYD17A3HGF', 'MODIS/006/MYDOCGA', 'MODIS/055/MOD17A3', 'MODIS/061/MCD12Q1', 'MODIS/061/MCD12Q2', 'MODIS/061/MCD15A3H', 'MODIS/061/MCD18C2', 'MODIS/061/MCD19A2_GRANULES', 'MODIS/061/MCD43A1', 'MODIS/061/MCD43A2', 'MODIS/061/MCD43A3', 'MODIS/061/MCD43A4', 'MODIS/061/MCD43C3', 'MODIS/061/MCD64A1', 'MODIS/061/MOD08_M3', 'MODIS/061/MOD09A1', 'MODIS/061/MOD09CMG', 'MODIS/061/MOD09GA', 'MODIS/061/MOD09GQ', 'MODIS/061/MOD09Q1', 'MODIS/061/MOD11A1', 'MODIS/061/MOD11A2', 'MODIS/061/MOD13A1', 'MODIS/061/MOD13A2', 'MODIS/061/MOD13Q1', 'MODIS/061/MOD14A1', 'MODIS/061/MOD14A2', 'MODIS/061/MOD15A2H', 'MODIS/061/MOD17A3HGF', 'MODIS/061/MOD21A1D', 'MODIS/061/MOD21A1N', 'MODIS/061/MOD21C1', 'MODIS/061/MOD21C2', 'MODIS/061/MOD21C3', 'MODIS/061/MYD08_M3', 'MODIS/061/MYD09A1', 'MODIS/061/MYD09GA', 'MODIS/061/MYD09GQ', 'MODIS/061/MYD09Q1', 'MODIS/061/MYD11A1', 'MODIS/061/MYD11A2', 'MODIS/061/MYD13A1', 'MODIS/061/MYD13A2', 'MODIS/061/MYD13Q1', 'MODIS/061/MYD14A1', 'MODIS/061/MYD14A2', 'MODIS/061/MYD15A2H', 'MODIS/061/MYD17A3HGF', 'MODIS/061/MYD21A1D', 'MODIS/061/MYD21A1N', 'MODIS/061/MYD21C1', 'MODIS/061/MYD21C2', 'MODIS/061/MYD21C3', 'MODIS/MCD43A1', 'MODIS/MCD43A2', 'MODIS/MCD43A4', 'MODIS/MCD43A4_006_BAI', 'MODIS/MCD43A4_006_EVI', 'MODIS/MCD43A4_006_NDSI', '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_NDSI', 'MODIS/MOD09GA_006_NDVI', 'MODIS/MOD09GA_006_NDWI', 'MODIS/MOD09GA_BAI', 'MODIS/MOD09GA_EVI', 'MODIS/MOD09GA_NDSI', 'MODIS/MOD09GA_NDVI', 'MODIS/MOD09GA_NDWI', 'MODIS/MOD09GQ', 'MODIS/MOD09Q1', 'MODIS/MOD10A1', 'MODIS/MOD11A1', 'MODIS/MOD11A2', 'MODIS/MOD13A1', 'MODIS/MOD13Q1', 'MODIS/MOD44W/MOD44W_005_2000_02_24', 'MODIS/MYD09A1', 'MODIS/MYD09GA', 'MODIS/MYD09GA_006_BAI', 'MODIS/MYD09GA_006_EVI', 'MODIS/MYD09GA_006_NDSI', 'MODIS/MYD09GA_006_NDVI', 'MODIS/MYD09GA_006_NDWI', 'MODIS/MYD09GA_BAI', 'MODIS/MYD09GA_EVI', 'MODIS/MYD09GA_NDSI', 'MODIS/MYD09GA_NDVI', 'MODIS/MYD09GA_NDWI', 'MODIS/MYD09GQ', 'MODIS/MYD09Q1', 'MODIS/MYD10A1', 'MODIS/MYD11A1', 'MODIS/MYD11A2', 'MODIS/MYD13A1', 'MODIS/MYD13Q1', 'MODIS/NTSG/MOD16A2/105', 'NASA/GDDP-CMIP6', 'NASA/GEOS-CF/v1/fcst/htf', 'NASA/GEOS-CF/v1/rpl/htf', 'NASA/GEOS-CF/v1/rpl/tavg1hr', 'NASA/NASADEM_HGT/001', 'NASA/NEX-DCP30', 'NASA/NEX-DCP30_ENSEMBLE_STATS', 'NASA/NEX-GDDP', 'NASA/NLDAS/FORA0125_H002', 'NASA/ORNL/DAYMET_V3', 'NASA/ORNL/DAYMET_V4', 'NASA/ORNL/biomass_carbon_density/v1', 'NASA/SMAP/SPL3SMP_E/005', 'NASA/SMAP/SPL4SMGP/007', '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/CDR/GRIDSAT-B1/V2', 'NOAA/CDR/PATMOSX/V53', 'NOAA/CFSR', 'NOAA/CFSV2/FOR6H', 'NOAA/GFS0P25', '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/VNP22Q2', 'NOAA/VIIRS/001/VNP43IA1', 'NOAA/VIIRS/001/VNP43IA2', 'NOAA/VIIRS/001/VNP46A1', 'NOAA/VIIRS/001/VNP46A2', 'NOAA/VIIRS/001/VNP64A1', 'NOAA/VIIRS/DNB/MONTHLY_V1/VCMCFG', 'NOAA/VIIRS/DNB/MONTHLY_V1/VCMSLCFG', 'NRCan/CDEM', 'OREGONSTATE/PRISM/AN81d', 'OREGONSTATE/PRISM/AN81m', 'OREGONSTATE/PRISM/Norm81m', 'OREGONSTATE/PRISM/Norm91m', 'ORTHO/Switzerland/SWISSIMAGE/10cm', 'OSU/GIMP/2000_ICE_OCEAN_MASK', 'OSU/GIMP/2000_IMAGERY_MOSAIC', 'OSU/GIMP/DEM', 'OSU/GIMP/ICE_VELOCITY_OPT', 'OpenET/DISALEXI/CONUS/GRIDMET/MONTHLY/v2_0', 'OpenET/EEMETRIC/CONUS/GRIDMET/MONTHLY/v2_0', 'OpenET/ENSEMBLE/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', 'OpenLandMap/SOL/SOL_WATERCONTENT-33KPA_USDA-4B1C_M/v01', 'Oxford/MAP/EVI_5km_Monthly', 'Oxford/MAP/IGBP_Fractional_Landcover_5km_Annual', 'Oxford/MAP/LST_Day_5km_Monthly', 'Oxford/MAP/LST_Night_5km_Monthly', 'Oxford/MAP/TCB_5km_Monthly', 'Oxford/MAP/TCW_5km_Monthly', 'Oxford/MAP/accessibility_to_cities_2015_v1_0', 'Oxford/MAP/accessibility_to_healthcare_2019', 'Oxford/MAP/friction_surface_2015_v1_0', 'Oxford/MAP/friction_surface_2019', 'RUB/RUBCLIM/LCZ/global_lcz_map/v1', 'SKYSAT/GEN-A/PUBLIC/ORTHO/MULTISPECTRAL', 'SKYSAT/GEN-A/PUBLIC/ORTHO/RGB', 'SNU/ESL/BESS/Rad/v1', 'Spain/PNOA/PNOA10', 'Switzerland/SWISSIMAGE/orthos/10cm', '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', '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', 'UMD/hansen/global_forest_change_2016_v1_4', 'UMD/hansen/global_forest_change_2017_v1_5', 'UMD/hansen/global_forest_change_2018_v1_6', 'UMD/hansen/global_forest_change_2019_v1_7', 'UMD/hansen/global_forest_change_2020_v1_8', 'UMD/hansen/global_forest_change_2021_v1_9', 'UMD/hansen/global_forest_change_2022_v1_10', 'UMN/PGC/ArcticDEM/V2/2m', '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/2m', 'UMN/PGC/REMA/V1/8m', 'UMT/Climate/IrrMapper_RF/v1_0', 'UMT/NTSG/v2/LANDSAT/GPP', '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', 'USDA/NASS/CDL', 'USFS/GTAC/LCMS/v2020-5', 'USFS/GTAC/LCMS/v2020-6', 'USFS/GTAC/LCMS/v2021-7', 'USFS/GTAC/LCMS/v2022-8', 'USFS/GTAC/MTBS/annual_burn_severity_mosaics/v1', 'USGS/GMTED2010', 'USGS/GTOPO30', 'USGS/NED', 'USGS/NLCD', 'USGS/SRTMGL1_003', 'UTOKYO/WTLAB/KBDI/v1', 'VITO/PROBAV/C1/S1_TOC_100M', 'VITO/PROBAV/C1/S1_TOC_333M', 'VITO/PROBAV/S1_TOC_100M', 'VITO/PROBAV/S1_TOC_333M', '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/GFW/FORMA/alerts', 'WRI/GFW/FORMA/raw_output_firms', 'WRI/GFW/FORMA/raw_output_ndvi', 'WRI/GFW/FORMA/thresholds', 'WRI/GFW/FORMA/vegetation_tstats', 'WWF/HydroSHEDS/03CONDEM', 'WWF/HydroSHEDS/03DIR', 'WWF/HydroSHEDS/03VFDEM', 'WWF/HydroSHEDS/15ACC', 'WWF/HydroSHEDS/15CONDEM', 'WWF/HydroSHEDS/15DIR', 'WWF/HydroSHEDS/30ACC', 'WWF/HydroSHEDS/30CONDEM', 'WWF/HydroSHEDS/30DIR', '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', 'YALE/YCEO/UHI/Winter_UHI_yearly_pixel/v4', 'projects/ngis-cat/assets/DEA/NIDEM', 'projects/planet-nicfi/assets/basemaps/africa', 'projects/planet-nicfi/assets/basemaps/americas', 'projects/planet-nicfi/assets/basemaps/asia']
print(connection.list_collections()[0])
{'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', 'providers': [{'name': 'Agriculture and Agri-Food Canada', 'roles': ['licensor', 'producer'], 'url': 'https://open.canada.ca/data/en/dataset/ba2645d5-4458-414d-b196-6303ac06c1c9'}, {'name': 'Google Earth Engine', 'roles': ['host'], 'url': 'https://developers.google.com/earth-engine/datasets/catalog/AAFC_ACI'}], 'extent': {'spatial': {'bbox': [[-135.17, 36.83, -51.24, 62.25]]}, 'temporal': {'interval': [['2009-01-01T00:00:00Z', '2020-01-01T00:00:00']]}}, 'links': [{'href': 'https://earthengine.openeo.org/v1.0/collections/AAFC/ACI', 'rel': 'self', 'type': 'application/json'}, {'href': 'https://earthengine.openeo.org/v1.0/collections', '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'}]}
Note the index number, it starts from 0
print(connection.list_collections()[0:3])
[{'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', 'providers': [{'name': 'Agriculture and Agri-Food Canada', 'roles': ['licensor', 'producer'], 'url': 'https://open.canada.ca/data/en/dataset/ba2645d5-4458-414d-b196-6303ac06c1c9'}, {'name': 'Google Earth Engine', 'roles': ['host'], 'url': 'https://developers.google.com/earth-engine/datasets/catalog/AAFC_ACI'}], 'extent': {'spatial': {'bbox': [[-135.17, 36.83, -51.24, 62.25]]}, 'temporal': {'interval': [['2009-01-01T00:00:00Z', '2020-01-01T00:00:00']]}}, 'links': [{'href': 'https://earthengine.openeo.org/v1.0/collections/AAFC/ACI', 'rel': 'self', 'type': 'application/json'}, {'href': 'https://earthengine.openeo.org/v1.0/collections', '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'}]}, {'stac_version': '1.0.0', 'stac_extensions': [], 'type': 'Collection', 'id': 'ACA/reef_habitat/v1_0', 'title': 'Allen Coral Atlas (ACA) - Geomorphic Zonation and Benthic Habitat - v1.0 [deprecated]', 'description': "The [Allen Coral Atlas](https://allencoralatlas.org/) dataset maps the\ngeomorphic zonation and benthic habitat for the world's shallow coral reefs at\n5m pixel resolution. The underlying satellite image data are temporal\ncomposites of [PlanetScope satellite](https://www.planet.com/products/basemap/)\nimagery spanning 2018-2020. The habitat maps are created via a machine learning\napproach with contextual editing, using a range of imagery, bathymetry, and\nderived products as input data, trained via a globally consistent reference\ndataset. A global mask layer is also included for use when generating global\nreporting statistics. A full description of the methods and approaches can be\nfound in the methods section of the [Allen Coral Atlas\nwebsite](https://allencoralatlas.org/methods/).\n\nThe Allen Coral Atlas was funded by [Vulcan Inc.](https://vulcan.com/) and\nis managed by the [Arizona State University Center for Global Discovery and\nConservation Science](https://gdcs.asu.edu/). Partners include\n[Planet](https://www.planet.com/), the [University of\nQueensland](https://www.uq.edu.au/), and the [National Geographic\nSociety](https://www.nationalgeographic.org/).\n\nScientific background publications:\n\n- Lyons, M. B., Roelfsema, C. M., Kennedy, E. V., Kovacs, E. M., Borrego-Acevedo, R., Markey, K., ... & Murray, N. J. (2020). Mapping the world's coral reefs using a global multiscale earth observation framework. Remote Sensing in Ecology and Conservation, 6(4), 557-568. [doi:10.1002/rse2.157](https://doi.org/10.1002/rse2.157)\n\n- Kennedy, E. V., Roelfsema, C. M., Lyons, M. B., Kovacs, E. M., Borrego-Acevedo, R., Roe, M., ... & Tudman, P. (2021). Reef Cover, a coral reef classification for global habitat mapping from remote sensing. Scientific Data, 8(1), 1-20. [doi:10.1038/s41597-021-00958-z](https://doi.org/10.1038/s41597-021-00958-z)\n\n- Roelfsema, C. M., Lyons, M., Murray, N., Kovacs, E. M., Kennedy, E., Markey, K., ... & Phinn, S. R. (2021). Workflow for the generation of expert-derived training and validation data: a view to global scale habitat mapping. Frontiers in Marine Science. [doi:10.3389/fmars.2021.643381](https://doi.org/10.3389/fmars.2021.643381)\n\n- Li, J., Knapp, D. E., Lyons, M., Roelfsema, C., Phinn, S., Schill, S. R., & Asner, G. P. (2021). Automated global shallow water bathymetry mapping using Google Earth Engine. Remote Sensing, 13(8), 1469. [doi:10.3390/rs13081469](https://doi.org/10.3390/rs13081469)\n\n- Li, J., Knapp, D. E., Fabina, N. S., Kennedy, E. V., Larsen, K., Lyons, M. B., ... & Asner, G. P. (2020). A global coral reef probability map generated using convolutional neural networks. Coral Reefs, 39(6), 1805-1815. [doi:10.1007/s00338-020-02005-6](https://doi.org/10.1007/s00338-020-02005-6)\n\nAllen Coral Atlas maps, bathymetry and map statistics are © 2020 Allen\nCoral Atlas Partnership and Vulcan, Inc.\n", 'license': 'CC-BY-4.0', 'providers': [{'name': 'Allen Coral Atlas Partnership (ACA)', 'roles': ['licensor', 'producer'], 'url': 'https://allencoralatlas.org/'}, {'name': 'Google Earth Engine', 'roles': ['host'], 'url': 'https://developers.google.com/earth-engine/datasets/catalog/ACA_reef_habitat_v1_0'}, {'name': 'University of Queensland (UQ)', 'roles': ['licensor', 'producer'], 'url': 'https://www.uq.edu.au/'}, {'name': 'Arizona State University Center for Global Discovery and Conservation Science (ASU GDCS)', 'roles': ['licensor', 'producer'], 'url': 'https://gdcs.asu.edu/'}, {'name': 'National Geographic Society (NGS)', 'roles': ['licensor', 'producer'], 'url': 'https://www.nationalgeographic.org/'}, {'name': 'Vulcan Inc. (Vulcan)', 'roles': ['licensor', 'producer'], 'url': 'https://vulcan.com/'}, {'name': 'Google Earth Engine', 'roles': ['host'], 'url': 'https://developers.google.com/earth-engine/datasets/catalog/ACA_reef_habitat_v1_0'}], 'extent': {'spatial': {'bbox': [[-180, -33, 180, 33]]}, 'temporal': {'interval': [['2018-01-01T00:00:00Z', '2021-01-01T00:00:00Z']]}}, 'links': [{'href': 'https://earthengine.openeo.org/v1.0/collections/ACA/reef_habitat/v1_0', 'rel': 'self', 'type': 'application/json'}, {'href': 'https://earthengine.openeo.org/v1.0/collections', '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/ACA/ACA_reef_habitat_v1_0', 'rel': 'related', 'title': 'Run the example for ACA/reef_habitat/v1_0 in the Earth Engine Code Editor', 'type': 'text/html'}, {'href': 'https://developers.google.com/earth-engine/datasets/images/ACA/ACA_reef_habitat_v1_0_sample.png', 'rel': 'preview', 'type': 'image/png'}, {'href': 'https://developers.google.com/earth-engine/datasets/catalog/ACA_reef_habitat_v1_0#terms-of-use', 'rel': 'license', 'type': 'text/html'}, {'href': 'https://spdx.org/licenses/CC-BY-4.0.html', 'rel': 'license', 'type': 'text/html'}, {'href': 'https://storage.googleapis.com/coral-atlas-user-downloads-prod/Global-Dataset-20211006223100.zip', 'rel': 'source'}, {'href': 'https://doi.org/10.5281/zenodo.3833242', 'rel': 'cite-as'}, {'href': 'https://storage.googleapis.com/earthengine-stac/catalog/ACA/ACA_reef_habitat_v2_0.json', 'rel': 'latest-version', 'title': 'ACA/reef_habitat/v2_0', 'type': 'application/json'}, {'href': 'https://storage.googleapis.com/earthengine-stac/catalog/ACA/ACA_reef_habitat_v2_0.json', 'rel': 'successor-version', 'title': 'ACA/reef_habitat/v2_0', 'type': 'application/json'}]}, {'stac_version': '1.0.0', 'stac_extensions': [], 'type': 'Collection', 'id': 'ACA/reef_habitat/v2_0', 'title': 'Allen Coral Atlas (ACA) - Geomorphic Zonation and Benthic Habitat - v2.0', 'description': "The [Allen Coral Atlas](https://allencoralatlas.org/) dataset maps the geomorphic\nzonation and benthic habitat for the world's shallow coral reefs at 5 m pixel\nresolution. Also included is a global reef extent product that maps additional\nreef areas unable to be explicitly included in the geomorphic and benthic mapping.\nThe underlying satellite image data are temporal composites of [PlanetScope\nsatellite](https://www.planet.com/products/basemap/) imagery spanning 2018-2020.\nThe habitat maps are created via a machine learning approach with contextual\nediting, using a range of imagery, bathymetry and derived products as input data,\ntrained via a globally consistent reference data set. A full description of the\nmethods and approaches can be found in the methods section of the [Allen Coral\nAtlas website](https://allencoralatlas.org/methods/).\n\nThe first version\n([v1.0](https://developers.google.com/earth-engine/datasets/catalog/ACA_reef_habitat_v1_0))\nof the Allen Coral Atlas was completed in Q4 2021, and this new version (v2.0) has\na wide range of improvements across the globe that incorporated both user feedback\non v1.0 and new technical developments in mapping methodology. A brief overview of\nthe changes can be found\n[here](https://allencoralatlas.org/blog/geomorphic-and-benthic-maps-2022-update/)\nand a more comprehensive technical summary can be found\n[here](https://storage.googleapis.com/coral-atlas-static-files/resources-page-materials/Allen_Coral_Atlas_2022_habitat_map_revisions.pdf).\n\nThe Allen Coral Atlas was funded by [Vulcan Inc.](https://vulcan.com/) and is\nmanaged by the [Arizona State University Center for Global Discovery and\nConservation Science](https://gdcs.asu.edu/). Partners include\n[Planet](https://www.planet.com/), the\n[University of Queensland](https://www.uq.edu.au/), and the\n[Coral Reef Alliance](https://coral.org/en/).\n\nScientific background publications:\n\n- Lyons, M. B., Roelfsema, C. M., Kennedy, E. V., Kovacs, E. M., Borrego-Acevedo, R., Markey, K., ... & Murray, N. J. (2020). Mapping the world's coral reefs using a global multiscale earth observation framework. Remote Sensing in Ecology and Conservation, 6(4), 557-568. [doi:10.1002/rse2.157](https://doi.org/10.1002/rse2.157)\n\n- Kennedy, E. V., Roelfsema, C. M., Lyons, M. B., Kovacs, E. M., Borrego-Acevedo, R., Roe, M., ... & Tudman, P. (2021). Reef Cover, a coral reef classification for global habitat mapping from remote sensing. Scientific Data, 8(1), 1-20. [doi:10.1038/s41597-021-00958-z](https://doi.org/10.1038/s41597-021-00958-z)\n\n- Roelfsema, C. M., Lyons, M., Murray, N., Kovacs, E. M., Kennedy, E., Markey, K., ... & Phinn, S. R. (2021). Workflow for the generation of expert-derived training and validation data: a view to global scale habitat mapping. Frontiers in Marine Science. [doi:10.3389/fmars.2021.643381](https://doi.org/10.3389/fmars.2021.643381)\n\n- Li, J., Knapp, D. E., Lyons, M., Roelfsema, C., Phinn, S., Schill, S. R., & Asner, G. P. (2021). Automated global shallow water bathymetry mapping using Google Earth Engine. Remote Sensing, 13(8), 1469. [doi:10.3390/rs13081469](https://doi.org/10.3390/rs13081469)\n\n- Li, J., Knapp, D. E., Fabina, N. S., Kennedy, E. V., Larsen, K., Lyons, M. B., ... & Asner, G. P. (2020). A global coral reef probability map generated using convolutional neural networks. Coral Reefs, 39(6), 1805-1815. [doi:10.1007/s00338-020-02005-6](https://doi.org/10.1007/s00338-020-02005-6)\n\nAllen Coral Atlas maps, bathymetry and map statistics are © 2023 Allen\nCoral Atlas Partnership and Vulcan, Inc.\n", 'license': 'CC-BY-4.0', 'providers': [{'name': 'Allen Coral Atlas Partnership (ACA)', 'roles': ['licensor', 'producer'], 'url': 'https://allencoralatlas.org/'}, {'name': 'Google Earth Engine', 'roles': ['host'], 'url': 'https://developers.google.com/earth-engine/datasets/catalog/ACA_reef_habitat_v2_0'}, {'name': 'University of Queensland (UQ)', 'roles': ['licensor', 'producer'], 'url': 'https://www.uq.edu.au/'}, {'name': 'Arizona State University Center for Global Discovery and Conservation Science (ASU GDCS)', 'roles': ['licensor', 'producer'], 'url': 'https://gdcs.asu.edu/'}, {'name': 'Coral Reef Alliance (CORAL)', 'roles': ['licensor', 'producer'], 'url': 'https://coral.org/en/'}, {'name': 'Planet', 'roles': ['licensor', 'producer'], 'url': 'https://www.planet.com/'}, {'name': 'Vulcan Inc. (Vulcan)', 'roles': ['licensor', 'producer'], 'url': 'https://vulcan.com/'}, {'name': 'Google Earth Engine', 'roles': ['host'], 'url': 'https://developers.google.com/earth-engine/datasets/catalog/ACA_reef_habitat_v2_0'}], 'extent': {'spatial': {'bbox': [[-180, -33, 180, 33]]}, 'temporal': {'interval': [['2018-01-01T00:00:00Z', '2021-01-01T00:00:00Z']]}}, 'links': [{'href': 'https://earthengine.openeo.org/v1.0/collections/ACA/reef_habitat/v2_0', 'rel': 'self', 'type': 'application/json'}, {'href': 'https://earthengine.openeo.org/v1.0/collections', '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/ACA/ACA_reef_habitat_v2_0', 'rel': 'related', 'title': 'Run the example for ACA/reef_habitat/v2_0 in the Earth Engine Code Editor', 'type': 'text/html'}, {'href': 'https://developers.google.com/earth-engine/datasets/images/ACA/ACA_reef_habitat_v2_0_sample.png', 'rel': 'preview', 'type': 'image/png'}, {'href': 'https://developers.google.com/earth-engine/datasets/catalog/ACA_reef_habitat_v2_0#terms-of-use', 'rel': 'license', 'type': 'text/html'}, {'href': 'https://spdx.org/licenses/CC-BY-4.0.html', 'rel': 'license', 'type': 'text/html'}, {'href': 'https://storage.googleapis.com/coral-atlas-user-downloads-prod/Global-Dataset-20211006223100.zip', 'rel': 'source'}, {'href': 'https://doi.org/10.5281/zenodo.3833242', 'rel': 'cite-as'}, {'href': 'https://storage.googleapis.com/earthengine-stac/catalog/ACA/ACA_reef_habitat_v2_0.json', 'rel': 'latest-version', 'title': 'ACA/reef_habitat/v2_0', 'type': 'application/json'}, {'href': 'https://storage.googleapis.com/earthengine-stac/catalog/ACA/ACA_reef_habitat_v1_0.json', 'rel': 'predecessor-version', 'title': 'ACA/reef_habitat/v1_0', 'type': 'application/json'}]}]
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/collections', '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'}], '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., & 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., & 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., & 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., & 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': ['collection-assets'], '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:schema': [{'description': 'Land cover class names', 'name': 'discrete_classification_class_names', 'type': 'STRING_LIST'}, {'description': 'Land cover class palette', 'name': 'discrete_classification_class_palette', 'type': 'STRING_LIST'}, {'description': 'Value of the land cover classification.', 'name': 'discrete_classification_class_values', 'type': 'INT_LIST'}, {'description': 'forest cover class names', 'name': 'forest_type_class_names', 'type': 'STRING_LIST'}, {'description': 'forest cover class palette', 'name': 'forest_type_class_palette', 'type': 'STRING_LIST'}, {'description': 'forest cover class values', 'name': 'forest_type_class_values', 'type': 'INT_LIST'}], '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': 'V3.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']}}}
# 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"],
)
cube.download(r'./Intro_openEO_ILWISPy/lc.GTIFF-ZIP')
z = ZipFile('./Intro_openEO_ILWISPy/lc.GTIFF-ZIP')
for file in z.filelist:
outfile = file.filename.replace('download.discrete_classification','CapeVerde_LCC')
foutp = open('./Intro_openEO_ILWISPy/' + outfile,'wb')
foutp.write(z.read(file.filename))
foutp.close()
# comment lines below if you don't want to remove the downloaded zip file
z.close()
os.remove('./Intro_openEO_ILWISPy/lc.GTIFF-ZIP')
#load raster in ILWISPy
rcDC = ilwis.RasterCoverage('CapeVerde_LCC.tif')
# probe its size
print(rcDC.size().xsize)
print(rcDC.size().ysize)
print(rcDC.size().zsize)
1000 917 1
#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, 917, 1000)
#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')
Text(0.5, 1.0, 'LCC over Cape Verde')
#Export as ILWIS raster map
rcDC.store('CapeVerde_LCC.mpr')
connection.describe_collection("UCSB-CHG/CHIRPS/DAILY")
# 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
cube = connection.load_collection(
"UCSB-CHG/CHIRPS/DAILY",
spatial_extent={"west": 21.74, "south": -19.31, "east": 34.40, "north": -7.70},
temporal_extent=[date_start, date_end],
bands=["precipitation"],
)
cube.download(work_dir+'/pcp_chirps_'+start_string+'_single.GTIFF-ZIP')
z = ZipFile('./Intro_openEO_ILWISPy/pcp_chirps_'+start_string+'_single.GTIFF-ZIP')
for file in z.filelist:
outfile = file.filename.replace('download.precipitation','pcp_chirps_'+start_string+'_single')
foutp = open('./Intro_openEO_ILWISPy/' + outfile,'wb')
foutp.write(z.read(file.filename))
foutp.close()
#old_name = './Intro_openEO_ILWISPy/' +outfile
#new_name = './Intro_openEO_ILWISPy/pcp_chirps_'+start_string+'_single.tif'
#os.rename(old_name,new_name)
# comment lines below if you don't want to remove the downloaded zip file
z.close()
os.remove('./Intro_openEO_ILWISPy/pcp_chirps_'+start_string+'_single.GTIFF-ZIP')
#load precipitation raster in ILWIS
pcp_in = ilwis.RasterCoverage('pcp_chirps_'+start_string+'_single.tif')
print(pcp_in)
pcp_chirps_20180101_single.tif
# probe its size
print(pcp_in.size().xsize)
print(pcp_in.size().ysize)
print(pcp_in.size().zsize)
1000 918 1
#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,25000)
plt.legend()
[(0.0, 400750.0), (0.36411337418989703, 0.0), (0.7282267483797941, 0.0), (1.0923401225696912, 0.0), (1.4564534967595881, 16.0), (1.820566870949485, 324.0), (2.1846802451393823, 1672.0), (2.5487936193292793, 3727.0), (2.9129069935191763, 4596.0), (3.2770203677090732, 5232.0), (3.64113374189897, 8245.0), (4.005247116088867, 8822.0), (4.369360490278765, 10476.0), (4.733473864468661, 12017.0), (5.097587238658559, 13889.0), (5.461700612848455, 14331.0), (5.8258139870383525, 15459.0), (6.18992736122825, 15950.0), (6.5540407354181465, 14732.0), (6.918154109608044, 15411.0), (7.28226748379794, 15021.0), (7.646380857987838, 14277.0), (8.010494232177734, 14843.0), (8.374607606367631, 14705.0), (8.73872098055753, 15945.0), (9.102834354747426, 15311.0), (9.466947728937322, 14529.0), (9.83106110312722, 13470.0), (10.195174477317117, 13992.0), (10.559287851507014, 11874.0), (10.92340122569691, 11509.0), (11.287514599886808, 12415.0), (11.651627974076705, 11540.0), (12.015741348266602, 11029.0), (12.3798547224565, 10185.0), (12.743968096646396, 9774.0), (13.108081470836293, 9644.0), (13.47219484502619, 9482.0), (13.836308219216088, 9444.0), (14.200421593405984, 8006.0), (14.56453496759588, 7795.0), (14.92864834178578, 6896.0), (15.292761715975676, 6674.0), (15.656875090165572, 6139.0), (16.02098846435547, 6222.0), (16.385101838545367, 5644.0), (16.749215212735262, 5231.0), (17.11332858692516, 5148.0), (17.47744196111506, 5201.0), (17.841555335304953, 3736.0), (18.20566870949485, 4212.0), (18.56978208368475, 3860.0), (18.933895457874645, 3377.0), (19.298008832064543, 3880.0), (19.66212220625444, 2836.0), (20.026235580444336, 3156.0), (20.390348954634234, 3220.0), (20.754462328824133, 2220.0), (21.118575703014027, 2696.0), (21.482689077203926, 2692.0), (21.84680245139382, 2520.0), (22.21091582558372, 2669.0), (22.575029199773617, 2492.0), (22.93914257396351, 2176.0), (23.30325594815341, 1904.0), (23.66736932234331, 2012.0), (24.031482696533203, 1725.0), (24.3955960707231, 1384.0), (24.759709444913, 1301.0), (25.123822819102894, 1200.0), (25.487936193292793, 1125.0), (25.852049567482688, 908.0), (26.216162941672586, 1092.0), (26.580276315862484, 736.0), (26.94438969005238, 1016.0), (27.308503064242277, 740.0), (27.672616438432176, 940.0), (28.03672981262207, 848.0), (28.40084318681197, 825.0), (28.764956561001867, 592.0), (29.12906993519176, 572.0), (29.49318330938166, 480.0), (29.85729668357156, 628.0), (30.221410057761453, 488.0), (30.58552343195135, 488.0), (30.949636806141246, 352.0), (31.313750180331144, 344.0), (31.677863554521043, 316.0), (32.04197692871094, 152.0), (32.406090302900836, 328.0), (32.770203677090734, 128.0), (33.13431705128063, 236.0), (33.498430425470524, 280.0), (33.86254379966042, 216.0), (34.22665717385032, 144.0), (34.59077054804022, 64.0), (34.95488392223012, 108.0), (35.318997296420015, 28.0), (35.683110670609906, 108.0), (36.047224044799805, 96.0), (36.4113374189897, 112.0), (36.7754507931796, 124.0), (37.1395641673695, 16.0), (37.50367754155939, 48.0), (37.86779091574929, 16.0), (38.23190428993919, 48.0), (38.596017664129086, 32.0), (38.960131038318984, 60.0), (39.32424441250888, 28.0), (39.688357786698774, 48.0), (40.05247116088867, 32.0), (40.41658453507857, 0.0), (40.78069790926847, 0.0), (41.14481128345837, 0.0), (41.508924657648265, 16.0), (41.873038031838156, 0.0), (42.237151406028055, 0.0), (42.60126478021795, 0.0), (42.96537815440785, 0.0), (43.32949152859775, 0.0), (43.69360490278764, 0.0), (44.05771827697754, 16.0), (44.42183165116744, 16.0), (44.785945025357336, 0.0), (45.150058399547234, 0.0), (45.51417177373713, 0.0), (45.87828514792702, 16.0), (46.24239852211692, 16.0), (46.60651189630682, 12.0), (46.97062527049672, 0.0), (47.33473864468662, 12.0), (47.69885201887651, 0.0), (48.062965393066406, 0.0), (48.427078767256305, 0.0), (48.7911921414462, 12.0), (49.1553055156361, 0.0), (49.519418889826, 0.0), (49.88353226401589, 0.0), (50.24764563820579, 0.0), (50.61175901239569, 0.0), (50.975872386585586, 16.0), (51.339985760775484, 0.0), (51.704099134965375, 0.0), (52.06821250915527, 0.0), (52.43232588334517, 0.0), (52.79643925753507, 0.0), (53.16055263172497, 0.0), (53.52466600591487, 0.0), (53.88877938010476, 0.0), (54.252892754294656, 0.0), (54.617006128484554, 0.0), (54.98111950267445, 0.0), (55.34523287686435, 16.0), (55.70934625105425, 32.0), (56.07345962524414, 16.0), (-1e+308, 0.0)] Minimum: 0.0 Maximum: 56.07345962524414 Mean: 6.397551901134011 No pixels - also nodata: 918000.0 No pixels - no nodata: 918000.0 Sum all: 5872952.645241022
<matplotlib.legend.Legend at 0x2234b6068e0>
#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, 918, 1000)
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 Zambia')
Text(0.5, 1.0, 'Rainfall on 20180101 over Zambia')
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
# 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": 21.74, "south": -19.31, "east": 34.40, "north": -7.70},
temporal_extent=[date_start, date_end],
bands=["precipitation"],
)
cube.download(work_dir+'/pcp_chirps_'+date_start_fn+'.GTIFF-ZIP')
z = ZipFile(work_dir+'/pcp_chirps_'+date_start_fn+'.GTIFF-ZIP')
for file in z.filelist:
outfile = file.filename.replace('download.','')
outfile = outfile[:-4] + '_' + date_start_fn + '.tif'
foutp = open(work_dir +'/' + outfile,'wb')
foutp.write(z.read(file.filename))
foutp.close()
#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
# comment lines below if you don't want to remove the downloaded zip files
for p in Path('./Intro_openEO_ILWISPy/').glob("*.GTIFF-ZIP"):
#p.close()
os.remove(p)
rcday1 = ilwis.RasterCoverage('precipitation_20180101.tif')
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, 918, 1000)
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: 56.07345962524414
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")
Text(0, 0.5, 'frequency')
print(rcday1.size())
print(rcday1.envelope())
coordSys = rcday1.coordinateSystem()
coordSys.toWKT()
Size(1000, 918, 1) 21.740000 -19.315940 34.400000 -7.694060
'PROJCS["precipitation_20180101.tif",GEOCS["precipitation_20180101.tif",DATUM[" WGS 84",[DWGS84],ELLIPSOID["WGS 84",6378137.000000000000,298.257223563000],PRIMEM["Greenwich",0, AUTHORITY["EPSG",8901"]]],PROJECTION[""],,UNIT[degrees,1.0]]'
pcpgrf = rcday1.geoReference()
print(pcpgrf)
precipitation_20180101.tif
#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())
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 = 'precipitation_' + 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: precipitation_20180101.tif Reading: precipitation_20180102.tif Reading: precipitation_20180103.tif Reading: precipitation_20180104.tif Reading: precipitation_20180105.tif Reading: precipitation_20180106.tif Reading: precipitation_20180107.tif Reading: precipitation_20180108.tif Reading: precipitation_20180109.tif Reading: precipitation_20180110.tif Reading: precipitation_20180111.tif Reading: precipitation_20180112.tif Reading: precipitation_20180113.tif Reading: precipitation_20180114.tif Reading: precipitation_20180115.tif Reading: precipitation_20180116.tif Reading: precipitation_20180117.tif Reading: precipitation_20180118.tif Reading: precipitation_20180119.tif Reading: precipitation_20180120.tif Reading: precipitation_20180121.tif Reading: precipitation_20180122.tif Reading: precipitation_20180123.tif Reading: precipitation_20180124.tif Reading: precipitation_20180125.tif Reading: precipitation_20180126.tif Reading: precipitation_20180127.tif Reading: precipitation_20180128.tif Reading: precipitation_20180129.tif Reading: precipitation_20180130.tif Reading: precipitation_20180131.tif (31, 918, 1000)
pcpAll.array2raster(pcpAllNp)
print(pcpAll.size())
Size(1000, 918, 31)
Check imported data, it's size and value for a given pixel
print(pcpAll.size())
for day in range(31):
print(pcpAll.pix2value(ilwis.Pixel(100,101,day)))#just to show that data is there
Size(1000, 918, 31) 19.049327850341797 0.0 0.0 4.762331962585449 9.524663925170898 0.0 0.0 0.0 0.0 20.36686134338379 14.449109077453613 0.0 14.449109077453613 0.0 9.632739067077637 8.051044464111328 12.076567649841309 4.025522232055664 4.025522232055664 0.0 10.094008445739746 13.45867919921875 0.0 0.0 0.0 16.68538475036621 12.514039039611816 0.0 12.514039039611816 8.342692375183105 0.0
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
#pcpAll.store('pcp_201801.mpl')
From a daily time step the total precipitation for the month retrieved is calculated using the 'aggregate - sum' function
ilwis.operationMetaData('aggregaterasterstatistics')
'aggregaterasterstatistics(inputraster,statisticalmarker=mean|variance|standarddev|totalsumsquares|skew|kurtosis|max|min|maxindex|minindex|median|sum)'
rcSum = ilwis.do('aggregaterasterstatistics', pcpAll, 'sum')
Review raster size and some statistics
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(1000, 918, 1) Minimum: 25.74268341064453 Maximum: 405.32510328292847
Uncomment the line below to write your result to disk
rcSum.store('pcpsum_201801.mpr')
Transform your result to a Numpy array so it can be visualized using Matplotlib
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, 918, 1000)
plt.imshow(rcSum2np[0], interpolation='none', vmin = 0, vmax = 500, cmap = 'turbo')
plt.axis('on')
plt.colorbar(shrink=0.8)
plt.title('Rainfall over Zambia')
Text(0.5, 1.0, 'Rainfall over Zambia')
Continue with another selected collection or create your own code further below.
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"]
)
datacube.download(work_dir+'/S1.GTIFF-ZIP')
z = ZipFile('./Intro_openEO_ILWISPy/S1.GTIFF-ZIP')
for file in z.filelist:
outfile = file.filename.replace('download.','')
foutp = open('./Intro_openEO_ILWISPy/' + outfile,'wb')
foutp.write(z.read(file.filename))
foutp.close()
VV = ilwis.RasterCoverage('VV.tif')
VH = ilwis.RasterCoverage('VH.tif')
#calculate the cross polarized image (vv/vh)
VC = ilwis.do('mapcalc','(@1/@2)', VV, VH)
#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')
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))
# create color composite (in RGB)
cc = np.dstack((VV_2np, VH_2np, VC_2np))
plt.figure(figsize=(10, 7))
plt.imshow(cc, interpolation ='nearest')
plt.title('S1 polarization composite showing the area in the neighborhood of Vienna')
Text(0.5, 1.0, 'S1 polarization composite showing the area in the neighborhood of Vienna')
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.
connection = openeo.connect("openeo.dataspace.copernicus.eu").authenticate_oidc()
Authenticated using refresh token.
print(connection.list_collection_ids())
['SENTINEL3_OLCI_L1B', 'SENTINEL3_SLSTR', 'SENTINEL_5P_L2', 'SENTINEL2_L1C', 'SENTINEL2_L2A', 'SENTINEL1_GRD', 'COPERNICUS_30']
connection.describe_collection("SENTINEL2_L2A")
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)
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,
)
From the selected images, perform a temporal aggregation, using the 'median' value for each pixel in your time series
s2_cube_red = s2_cube.median_time()
s2_cube_red.download("./Intro_openEO_ILWISPy/Enkhuizen.tif")
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
raster = ilwis.RasterCoverage ('Enkhuizen.tif')
print(raster.size())
Size(2643, 2526, 4)
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
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)
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)
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)
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 your stretched layers to a Numpy array, in order to visualize your image as a colour composite, using imshow
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))
# 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])
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')
Text(0.5, 1.0, 'FC - S2 image retrieved from DataSpace.Copernicus.EU')
Create a new / empty image and as second step load the data and write the output to disk. Review your results using ILWIS386
#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())
S2_ilw.array2raster(S2ALL.flatten())
S2_ilw.store('Enkhuizen.mpl')
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
#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,
)
summer_red = summer.median_time()
summer_red.download("./Intro_openEO_ILWISPy/summer.tif")
#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,
)
autumn_red = autumn.median_time()
autumn_red.download("./Intro_openEO_ILWISPy/autumn.tif")
#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,
)
winter_red = winter.median_time()
winter_red.download("./Intro_openEO_ILWISPy/winter.tif")
#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,
)
spring_red = spring.median_time()
spring_red.download("./Intro_openEO_ILWISPy/spring.tif")
summer = ilwis.RasterCoverage ('summer.tif')
autumn = ilwis.RasterCoverage ('autumn.tif')
winter = ilwis.RasterCoverage ('winter.tif')
spring = ilwis.RasterCoverage ('spring.tif')
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)
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)
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)
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)
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))
print(summer_ndvi.size())
Size(2643, 2526, 1)
#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())
S2_ndvi = np.array([summer_ndvi_2np, autumn_ndvi_2np, winter_ndvi_2np, spring_ndvi_2np])
S2_ndvi_all.array2raster(S2_ndvi.flatten())
S2_ndvi_all.store('S2_ndvi.mpl')
ilwis.operationMetaData('aggregaterasterstatistics')
'aggregaterasterstatistics(inputraster,statisticalmarker=mean|variance|standarddev|totalsumsquares|skew|kurtosis|max|min|maxindex|minindex|median|sum)'
ndvi_std = ilwis.do('aggregaterasterstatistics', S2_ndvi_all, 'standarddev')
ndvi_var = ilwis.do('aggregaterasterstatistics', S2_ndvi_all, 'variance')
#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')
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