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¶
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¶
ilwis.version()
'1.0 build 20240531'
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)
/home/ilwispy/notebooks/ilwispy_tutorial/Intro_openEO_ILWISPy
Check OpenEO version and connect to the Earth Engine OpenEO Demo Version¶
openeo.__version__
'0.35.0'
connection = openeo.connect("https://earthengine.openeo.org/v1.0")
#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
<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.
connection.list_processes()
Obtain information about available collections - data sources¶
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']
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
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¶
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., & 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': ['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']}}}
Load the selected collection, here the spatial extent used is over the Cape Verde islands¶
# 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.tif')
#load raster in ILWISPy
rcDC = ilwis.RasterCoverage('lc.tif')
# probe its size
print(rcDC.size().xsize)
print(rcDC.size().ysize)
print(rcDC.size().zsize)
3341 3062 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, 3062, 3341)
#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');
#Export as ILWIS raster map
rcDC.store('CapeVerde_LCC.mpr')
Extract rainfall for a region in Zambia for a single day¶
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
#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"],
)
cube.download(work_dir+'/pcp_chirps_'+start_string+'_single.tif')
#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)
2227 2227 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,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
<matplotlib.legend.Legend at 0x72b23f9e6bc0>
#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)
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');
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
# 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')
#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¶
rcday1 = ilwis.RasterCoverage('pcp_chirps_20180101.tif')
# probe its size
print(rcday1.size().xsize)
print(rcday1.size().ysize)
print(rcday1.size().zsize)
2227 2227 1
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)
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
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");
print(rcday1.size())
print(rcday1.envelope())
coordSys = rcday1.coordinateSystem()
coordSys.toWKT()
Size(2227, 2227, 1) 25.999939 -14.000244 28.000487 -11.999696
'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]]'
pcpgrf = rcday1.geoReference()
print(pcpgrf)
pcp_chirps_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 = '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)
pcpAll.array2raster(pcpAllNp)
print(pcpAll.size())
Size(2227, 2227, 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(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
#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(2227, 2227, 1) Minimum: 72.3739185333252 Maximum: 213.02986216545105
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, 2227, 2227)
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')
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.tif')
rcSelect = ilwis.RasterCoverage('S1.tif')
VV = ilwis.do('selection',rcSelect,"rasterbands(0)")
VH = ilwis.do('selection',rcSelect,"rasterbands(1)")
#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')
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.
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', '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']
connection.describe_collection("SENTINEL2_L2A")
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)
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
s2_cube_red = s2_cube.median_time()
Download the selected dataset¶
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
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 to a Numpy array¶
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');
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
#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')
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
#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(work_dir+'/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(work_dir+'/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(work_dir+'/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(work_dir+'/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