diff --git a/algorithm_catalog/vito/worldcover_statistics/benchmark_scenarios/worldcover_statistics.json b/algorithm_catalog/vito/worldcover_statistics/benchmark_scenarios/worldcover_statistics.json new file mode 100644 index 0000000..3003a7b --- /dev/null +++ b/algorithm_catalog/vito/worldcover_statistics/benchmark_scenarios/worldcover_statistics.json @@ -0,0 +1,44 @@ +[{ + "id": "worldcover_statistics", + "type": "openeo", + "description": "World cover statistics.", + "backend": "openeofed.dataspace.copernicus.eu", + "process_graph": { + "worldcover_statistics": { + "arguments": { + "geometries": { + "coordinates": [ + [ + [ + 6.990046173926822, + 50.92370033913926 + ], + [ + 6.990915651805, + 50.8595444392102 + ], + [ + 7.239586324963913, + 50.84527557041392 + ], + [ + 7.238716847085734, + 50.92917965051333 + ], + [ + 6.990046173926822, + 50.92370033913926 + ] + ] + ], + "type": "Polygon" + } + }, + "description": "Land cover statistics for one or more areas based on ESA WorldCover 2021, provided by Terrascope.", + "namespace": "https://raw.githubusercontent.com/ESA-APEx/apex_algorithms/refs/heads/worldcover_stats/algorithm_catalog/vito/worldcover_statistics/openeo_udp/worldcover_statistics.json", + "process_id": "worldcover_statistics", + "result": true + } + }, + "reference_data": {} +}] \ No newline at end of file diff --git a/algorithm_catalog/vito/worldcover_statistics/openeo_udp/README.md b/algorithm_catalog/vito/worldcover_statistics/openeo_udp/README.md new file mode 100644 index 0000000..8ab2d1e --- /dev/null +++ b/algorithm_catalog/vito/worldcover_statistics/openeo_udp/README.md @@ -0,0 +1,16 @@ +# 2021 landcover statistics + +Computes landcover statistics over multiple user provided areas, based on the ESA WorldCover product. + +As input, the service takes GeoJSON, which can also be a FeatureCollection defining multiple feature. + +The output is a csv file containing the fraction of a specific landcover present in each area. + +This service is maintained and provided by Terrascope. + +![statistics](statistics.png) + +## Methodology + +The European Space Agency (ESA) WorldCover 10 m 2021 product provides a global land cover map for 2021 at 10 m resolution based on Sentinel-1 and Sentinel-2 data. The WorldCover product comes with 11 land cover classes, aligned with UN-FAO's Land Cover Classification System, and has been generated in the framework of the ESA WorldCover project. + diff --git a/algorithm_catalog/vito/worldcover_statistics/openeo_udp/statistics.png b/algorithm_catalog/vito/worldcover_statistics/openeo_udp/statistics.png new file mode 100644 index 0000000..d3b2780 Binary files /dev/null and b/algorithm_catalog/vito/worldcover_statistics/openeo_udp/statistics.png differ diff --git a/algorithm_catalog/vito/worldcover_statistics/openeo_udp/worldcover_statistics.json b/algorithm_catalog/vito/worldcover_statistics/openeo_udp/worldcover_statistics.json new file mode 100644 index 0000000..a9148d7 --- /dev/null +++ b/algorithm_catalog/vito/worldcover_statistics/openeo_udp/worldcover_statistics.json @@ -0,0 +1,259 @@ +{ + "id": "worldcover_statistics", + "summary": "Land cover statistics for one or more areas based on ESA WorldCover 2021, provided by Terrascope.", + "description": "# 2021 landcover statistics\n\nComputes landcover statistics over multiple areas, based on the ESA WorldCover product.\n\nAs input, the service takes GeoJSON, which can also be a FeatureCollection defining multiple feature.\n\nThe output is a csv file containing the fraction of a specific landcover present in each area.\n\nThis service is maintained and provided by Terrascope.\n\n![statistics](statistics.png)\n\n## Methodology\n\nThe European Space Agency (ESA) WorldCover 10 m 2021 product provides a global land cover map for 2021 at 10 m resolution based on Sentinel-1 and Sentinel-2 data. The WorldCover product comes with 11 land cover classes, aligned with UN-FAO's Land Cover Classification System, and has been generated in the framework of the ESA WorldCover project.\n\n", + "process_graph": { + "load4": { + "process_id": "load_collection", + "arguments": { + "spatial_extent": null, + "temporal_extent": null, + "bands": [ + "MAP" + ], + "id": "ESA_WORLDCOVER_10M_2021_V2" + } + }, + "apply6": { + "process_id": "apply_dimension", + "arguments": { + "data": { + "from_node": "load4" + }, + "dimension": "bands", + "process": { + "process_graph": { + "1": { + "arguments": { + "data": [ + { + "process_graph": { + "eq1": { + "arguments": { + "x": { + "from_parameter": "data" + }, + "y": 10 + }, + "process_id": "eq", + "result": true + } + } + }, + { + "process_graph": { + "eq1": { + "arguments": { + "x": { + "from_parameter": "data" + }, + "y": 20 + }, + "process_id": "eq", + "result": true + } + } + }, + { + "process_graph": { + "eq1": { + "arguments": { + "x": { + "from_parameter": "data" + }, + "y": 30 + }, + "process_id": "eq", + "result": true + } + } + }, + { + "process_graph": { + "eq1": { + "arguments": { + "x": { + "from_parameter": "data" + }, + "y": 40 + }, + "process_id": "eq", + "result": true + } + } + }, + { + "process_graph": { + "eq1": { + "arguments": { + "x": { + "from_parameter": "data" + }, + "y": 50 + }, + "process_id": "eq", + "result": true + } + } + }, + { + "process_graph": { + "eq1": { + "arguments": { + "x": { + "from_parameter": "data" + }, + "y": 60 + }, + "process_id": "eq", + "result": true + } + } + }, + { + "process_graph": { + "eq1": { + "arguments": { + "x": { + "from_parameter": "data" + }, + "y": 70 + }, + "process_id": "eq", + "result": true + } + } + }, + { + "process_graph": { + "eq1": { + "arguments": { + "x": { + "from_parameter": "data" + }, + "y": 80 + }, + "process_id": "eq", + "result": true + } + } + }, + { + "process_graph": { + "eq1": { + "arguments": { + "x": { + "from_parameter": "data" + }, + "y": 90 + }, + "process_id": "eq", + "result": true + } + } + }, + { + "process_graph": { + "eq1": { + "arguments": { + "x": { + "from_parameter": "data" + }, + "y": 95 + }, + "process_id": "eq", + "result": true + } + } + }, + { + "process_graph": { + "eq1": { + "arguments": { + "x": { + "from_parameter": "data" + }, + "y": 100 + }, + "process_id": "eq", + "result": true + } + } + } + ] + }, + "process_id": "array_create", + "result": true + } + } + } + } + }, + "rename7": { + "process_id": "rename_labels", + "arguments": { + "data": { + "from_node": "apply6" + }, + "dimension": "bands", + "target": [ + "treecover", + "shrubland", + "grassland", + "cropland", + "builtup", + "bare/sparse vegetation", + "snow and ice", + "water", + "herbaceous wetland", + "mangroves", + "moss and lichen" + ] + } + }, + "aggregate5": { + "process_id": "aggregate_spatial", + "arguments": { + "data": { + "from_node": "rename7" + }, + "geometries": { + "from_parameter": "geometries" + }, + "reducer": { + "process_graph": { + "count1": { + "arguments": { + "data": { + "from_parameter": "data" + } + }, + "process_id": "mean", + "result": true + } + } + } + } + }, + "save3": { + "process_id": "save_result", + "arguments": { + "data": { + "from_node": "aggregate5" + }, + "format": "CSV" + }, + "result": true + } + }, + "parameters": [ + { + "name": "geometries", + "description": "Geometries for which the statistics will be computed, as a GeoJSON FeatureCollection. Feature properties are preserved for vector data cubes and all GeoJSON Features.\n\nOne value will be computed per label in the dimension of type `geometries`, GeoJSON `Feature` or `Geometry`. For a `FeatureCollection` multiple values will be computed, one value per contained `Feature`. No values will be computed for empty geometries. For example, a single value will be computed for a `MultiPolygon`, but two values will be computed for a `FeatureCollection` containing two polygons.\n\n- For **polygons**, the process considers all pixels for which the point at the pixel center intersects with the corresponding polygon (as defined in the Simple Features standard by the OGC).\n- For **points**, the process considers the closest pixel center.\n- For **lines** (line strings), the process considers all the pixels whose centers are closest to at least one point on the line.\n\nThus, pixels may be part of multiple geometries and be part of multiple aggregations. No operation is applied to geometries that are outside of the bounds of the data.", + "schema": { + "type": "object", + "subtype": "geojson" + } + } + ] +} diff --git a/algorithm_catalog/vito/worldcover_statistics/records/worldcover_statistics.json b/algorithm_catalog/vito/worldcover_statistics/records/worldcover_statistics.json new file mode 100644 index 0000000..73492fc --- /dev/null +++ b/algorithm_catalog/vito/worldcover_statistics/records/worldcover_statistics.json @@ -0,0 +1,103 @@ +{ + "id": "worldcover_statistics", + "type": "Feature", + "conformsTo": [ + "http://www.opengis.net/spec/ogcapi-records-1/1.0/req/record-core", + "https://apex.esa.int/core/openeo-udp" + ], + "geometry": null, + "properties": { + "created": "2025-03-12T00:00:00Z", + "updated": "2025-03-12T00:00:00Z", + "type": "service", + "title": "Land cover statistics based on ESA WorldCover data for 2021, provided by Terrascope.", + "description": "For a given geometry or set of geometries, computes percentage landcover for 2021.", + "cost_estimate": 0.01, + "cost_unit": "platform credits per km\u00b2", + "keywords": [ + "LAND USE/LAND COVER CLASSIFICATION", + "statistics" + ], + "language": { + "code": "en-US", + "name": "English (United States)" + }, + "languages": [ + { + "code": "en-US", + "name": "English (United States)" + } + ], + "contacts": [ + { + "name": "Jeroen Dries", + "position": "Researcher", + "organization": "Terrascope", + "links": [ + { + "href": "https://github.com/jdries", + "title": "GitHub", + "rel": "about", + "type": "text/html" + } + ], + "contactInstructions": "Contact via Terrascope", + "roles": [ + "principal investigator" + ] + } + ], + "themes": [ + { + "concepts": [ + { + "id": "Sentinel-2 MSI", + "url": "https://gcmd.earthdata.nasa.gov/kms/concept/fc57a9a0-a287-4bcf-a517-20811b55596b?format=json" + }, + { + "id": "LAND USE/LAND COVER CLASSIFICATION", + "url": "https://gcmd.earthdata.nasa.gov/kms/concept/5066def0-b14b-4a2c-b40f-dc9953860366?format=json" + }, + { + "id": "STATISTICAL APPLICATIONS", + "url": "https://gcmd.earthdata.nasa.gov/kms/concept/997dc5a6-d83f-4d59-8c5a-1d901b069830?format=json" + } + ], + "scheme": "https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/sciencekeywords" + } + ], + "formats": [ + { + "name": "CSV" + } + ], + "license": "proprietary" + }, + "linkTemplates": [], + "links": [ + { + "rel": "application", + "type": "application/vnd.openeo+json;type=process", + "title": "openEO Process Definition", + "href": "https://raw.githubusercontent.com/ESA-APEx/apex_algorithms/refs/heads/worldcover_stats/algorithm_catalog/vito/worldcover_statistics/openeo_udp/worldcover_statistics.json" + }, + { + "rel": "service", + "type": "application/json", + "title": "openEO platform", + "href": "https://openeofed.dataspace.copernicus.eu" + }, + { + "rel": "webapp", + "type": "text/html", + "title": "OpenEO Web Editor", + "href": "https://openeofed.dataspace.copernicus.eu/?wizard=UDP&wizard~process=worldcover-statistics&wizard~processUrl=https://raw.githubusercontent.com/ESA-APEx/apex_algorithms/refs/heads/worldcover_stats/algorithm_catalog/vito/worldcover_statistics/openeo_udp/worldcover_statistics.json" + }, + { + "rel": "cite-as", + "type": "text/html", + "title": "WorldCover 2021 DOI", + "href": "https://doi.org/10.5281/zenodo.7254221" + } + ] +}