diff --git a/algorithm_catalog/developmentseed/apa_aquatic_plants_algae/openeo_udp/apa_aquatic_plants_algae.json b/algorithm_catalog/developmentseed/apa_aquatic_plants_algae/openeo_udp/apa_aquatic_plants_algae.json new file mode 100644 index 00000000..d0dd9372 --- /dev/null +++ b/algorithm_catalog/developmentseed/apa_aquatic_plants_algae/openeo_udp/apa_aquatic_plants_algae.json @@ -0,0 +1,749 @@ +{ + "process_graph": { + "loadcollection1": { + "process_id": "load_collection", + "arguments": { + "bands": [ + "B02", + "B03", + "B04", + "B05", + "B08", + "B8A", + "B11" + ], + "id": "SENTINEL2_L2A", + "properties": { + "eo:cloud_cover": { + "process_graph": { + "lte1": { + "process_id": "lte", + "arguments": { + "x": { + "from_parameter": "value" + }, + "y": 30 + }, + "result": true + } + } + } + }, + "spatial_extent": { + "from_parameter": "bounding_box" + }, + "temporal_extent": { + "from_parameter": "time" + } + } + }, + "reducedimension1": { + "process_id": "reduce_dimension", + "arguments": { + "data": { + "from_node": "loadcollection1" + }, + "dimension": "t", + "reducer": { + "process_graph": { + "first1": { + "process_id": "first", + "arguments": { + "data": { + "from_parameter": "data" + } + }, + "result": true + } + } + } + } + }, + "resamplespatial1": { + "process_id": "resample_spatial", + "arguments": { + "align": "upper-left", + "data": { + "from_node": "reducedimension1" + }, + "method": "near", + "projection": null, + "resolution": [ + 100, + 100 + ] + } + }, + "applydimension1": { + "process_id": "apply_dimension", + "arguments": { + "data": { + "from_node": "resamplespatial1" + }, + "dimension": "bands", + "process": { + "process_graph": { + "arrayelement1": { + "process_id": "array_element", + "arguments": { + "data": { + "from_parameter": "data" + }, + "index": 2 + } + }, + "divide1": { + "process_id": "divide", + "arguments": { + "x": { + "from_node": "arrayelement1" + }, + "y": 10000.0 + } + }, + "multiply1": { + "process_id": "multiply", + "arguments": { + "x": { + "from_node": "divide1" + }, + "y": 3 + } + }, + "arrayelement2": { + "process_id": "array_element", + "arguments": { + "data": { + "from_parameter": "data" + }, + "index": 1 + } + }, + "divide2": { + "process_id": "divide", + "arguments": { + "x": { + "from_node": "arrayelement2" + }, + "y": 10000.0 + } + }, + "multiply2": { + "process_id": "multiply", + "arguments": { + "x": { + "from_node": "divide2" + }, + "y": 3 + } + }, + "arrayelement3": { + "process_id": "array_element", + "arguments": { + "data": { + "from_parameter": "data" + }, + "index": 0 + } + }, + "divide3": { + "process_id": "divide", + "arguments": { + "x": { + "from_node": "arrayelement3" + }, + "y": 10000.0 + } + }, + "multiply3": { + "process_id": "multiply", + "arguments": { + "x": { + "from_node": "divide3" + }, + "y": 3 + } + }, + "arraycreate1": { + "process_id": "array_create", + "arguments": { + "data": [ + { + "from_node": "multiply1" + }, + { + "from_node": "multiply2" + }, + { + "from_node": "multiply3" + } + ] + } + }, + "arrayelement4": { + "process_id": "array_element", + "arguments": { + "data": { + "from_parameter": "data" + }, + "index": 4 + } + }, + "divide4": { + "process_id": "divide", + "arguments": { + "x": { + "from_node": "arrayelement4" + }, + "y": 10000.0 + } + }, + "arrayelement5": { + "process_id": "array_element", + "arguments": { + "data": { + "from_parameter": "data" + }, + "index": 6 + } + }, + "divide5": { + "process_id": "divide", + "arguments": { + "x": { + "from_node": "arrayelement5" + }, + "y": 10000.0 + } + }, + "subtract1": { + "process_id": "subtract", + "arguments": { + "x": { + "from_node": "divide5" + }, + "y": { + "from_node": "divide1" + } + } + }, + "multiply4": { + "process_id": "multiply", + "arguments": { + "x": { + "from_node": "subtract1" + }, + "y": 0.17722052470761768 + } + }, + "add1": { + "process_id": "add", + "arguments": { + "x": { + "from_node": "divide1" + }, + "y": { + "from_node": "multiply4" + } + } + }, + "subtract2": { + "process_id": "subtract", + "arguments": { + "x": { + "from_node": "divide4" + }, + "y": { + "from_node": "add1" + } + } + }, + "multiply5": { + "process_id": "multiply", + "arguments": { + "x": { + "from_node": "subtract2" + }, + "y": 8.5 + } + }, + "arrayelement6": { + "process_id": "array_element", + "arguments": { + "data": { + "from_parameter": "data" + }, + "index": 3 + } + }, + "divide6": { + "process_id": "divide", + "arguments": { + "x": { + "from_node": "arrayelement6" + }, + "y": 10000.0 + } + }, + "subtract3": { + "process_id": "subtract", + "arguments": { + "x": { + "from_node": "divide6" + }, + "y": { + "from_node": "divide1" + } + } + }, + "add2": { + "process_id": "add", + "arguments": { + "x": { + "from_node": "divide6" + }, + "y": { + "from_node": "divide1" + } + } + }, + "divide7": { + "process_id": "divide", + "arguments": { + "x": { + "from_node": "subtract3" + }, + "y": { + "from_node": "add2" + } + } + }, + "multiply6": { + "process_id": "multiply", + "arguments": { + "x": { + "from_node": "divide7" + }, + "y": 5.5 + } + }, + "subtract4": { + "process_id": "subtract", + "arguments": { + "x": { + "from_node": "divide2" + }, + "y": { + "from_node": "divide4" + } + } + }, + "add3": { + "process_id": "add", + "arguments": { + "x": { + "from_node": "divide2" + }, + "y": { + "from_node": "divide4" + } + } + }, + "divide8": { + "process_id": "divide", + "arguments": { + "x": { + "from_node": "subtract4" + }, + "y": { + "from_node": "add3" + } + } + }, + "multiply7": { + "process_id": "multiply", + "arguments": { + "x": { + "from_node": "divide8" + }, + "y": 1 + } + }, + "arraycreate2": { + "process_id": "array_create", + "arguments": { + "data": [ + { + "from_node": "multiply5" + }, + { + "from_node": "multiply6" + }, + { + "from_node": "multiply7" + } + ] + } + }, + "arrayelement7": { + "process_id": "array_element", + "arguments": { + "data": { + "from_parameter": "data" + }, + "index": 5 + } + }, + "divide9": { + "process_id": "divide", + "arguments": { + "x": { + "from_node": "arrayelement7" + }, + "y": 10000.0 + } + }, + "subtract5": { + "process_id": "subtract", + "arguments": { + "x": { + "from_node": "divide9" + }, + "y": { + "from_node": "divide5" + } + } + }, + "add4": { + "process_id": "add", + "arguments": { + "x": { + "from_node": "divide9" + }, + "y": { + "from_node": "divide5" + } + } + }, + "divide10": { + "process_id": "divide", + "arguments": { + "x": { + "from_node": "subtract5" + }, + "y": { + "from_node": "add4" + } + } + }, + "subtract6": { + "process_id": "subtract", + "arguments": { + "x": { + "from_node": "divide8" + }, + "y": { + "from_node": "divide10" + } + } + }, + "add5": { + "process_id": "add", + "arguments": { + "x": { + "from_node": "divide8" + }, + "y": { + "from_node": "divide10" + } + } + }, + "divide11": { + "process_id": "divide", + "arguments": { + "x": { + "from_node": "subtract6" + }, + "y": { + "from_node": "add5" + } + } + }, + "gt1": { + "process_id": "gt", + "arguments": { + "x": { + "from_node": "divide11" + }, + "y": 0 + } + }, + "if1": { + "process_id": "if", + "arguments": { + "accept": { + "from_node": "arraycreate1" + }, + "reject": { + "from_node": "arraycreate2" + }, + "value": { + "from_node": "gt1" + } + } + }, + "lt1": { + "process_id": "lt", + "arguments": { + "x": { + "from_node": "divide8" + }, + "y": 0 + } + }, + "if2": { + "process_id": "if", + "arguments": { + "accept": { + "from_node": "if1" + }, + "reject": { + "from_node": "arraycreate2" + }, + "value": { + "from_node": "lt1" + } + } + }, + "gt2": { + "process_id": "gt", + "arguments": { + "x": { + "from_node": "divide5" + }, + "y": 0.1 + } + }, + "subtract7": { + "process_id": "subtract", + "arguments": { + "x": { + "from_node": "divide2" + }, + "y": 0.175 + } + }, + "divide12": { + "process_id": "divide", + "arguments": { + "x": { + "from_node": "subtract7" + }, + "y": 0.21500000000000002 + } + }, + "gt3": { + "process_id": "gt", + "arguments": { + "x": { + "from_node": "divide12" + }, + "y": 0 + } + }, + "subtract8": { + "process_id": "subtract", + "arguments": { + "x": { + "from_node": "divide2" + }, + "y": { + "from_node": "divide1" + } + } + }, + "add6": { + "process_id": "add", + "arguments": { + "x": { + "from_node": "divide2" + }, + "y": { + "from_node": "divide1" + } + } + }, + "divide13": { + "process_id": "divide", + "arguments": { + "x": { + "from_node": "subtract8" + }, + "y": { + "from_node": "add6" + } + } + }, + "gt4": { + "process_id": "gt", + "arguments": { + "x": { + "from_node": "divide13" + }, + "y": 0 + } + }, + "and1": { + "process_id": "and", + "arguments": { + "x": { + "from_node": "gt3" + }, + "y": { + "from_node": "gt4" + } + } + }, + "and2": { + "process_id": "and", + "arguments": { + "x": { + "from_node": "gt2" + }, + "y": { + "from_node": "and1" + } + } + }, + "if3": { + "process_id": "if", + "arguments": { + "accept": { + "from_node": "arraycreate1" + }, + "reject": { + "from_node": "if2" + }, + "value": { + "from_node": "and2" + } + } + }, + "gt5": { + "process_id": "gt", + "arguments": { + "x": { + "from_node": "divide5" + }, + "y": 0.1 + } + }, + "gt6": { + "process_id": "gt", + "arguments": { + "x": { + "from_node": "divide12" + }, + "y": 1 + } + }, + "and3": { + "process_id": "and", + "arguments": { + "x": { + "from_node": "gt5" + }, + "y": { + "from_node": "gt6" + } + } + }, + "if4": { + "process_id": "if", + "arguments": { + "accept": { + "from_node": "arraycreate1" + }, + "reject": { + "from_node": "if3" + }, + "value": { + "from_node": "and3" + } + }, + "result": true + } + } + } + } + }, + "apply1": { + "process_id": "apply", + "arguments": { + "data": { + "from_node": "applydimension1" + }, + "process": { + "process_graph": { + "linearscalerange1": { + "process_id": "linear_scale_range", + "arguments": { + "inputMax": 1, + "inputMin": 0, + "outputMax": 255, + "outputMin": 0, + "x": { + "from_parameter": "x" + } + }, + "result": true + } + } + } + }, + "result": true + } + }, + "parameters": [ + { + "name": "time", + "description": "Temporal range for data acquisition", + "schema": { + "type": "array", + "subtype": "temporal-interval" + }, + "default": [ + "2025-06-01", + "2025-08-31" + ], + "optional": true + }, + { + "name": "bounding_box", + "description": "Spatial extent for Venice Lagoon", + "schema": { + "type": "object", + "subtype": "bounding-box" + }, + "default": { + "west": 12.2, + "south": 45.3, + "east": 12.6, + "north": 45.6 + }, + "optional": true + }, + { + "name": "cloud_cover", + "description": "Maximum cloud cover percentage", + "schema": { + "type": "number" + }, + "default": 30, + "optional": true + } + ], + "id": "apa_aquatic_plants_algae", + "summary": "Aquatic Plants and Algae (APA) detection from Sentinel-2 imagery using openEO.", + "description": "Detects and visualizes aquatic plants and algae in water bodies from Sentinel-2 L2A reflectance using spectral indices (FAI, water-plants, NDWI, moisture) with Braaten-Cohen-Yang cloud masking. Based on the APA script by the University of Girona." +} \ No newline at end of file diff --git a/algorithm_catalog/developmentseed/apa_aquatic_plants_algae/records/apa_aquatic_plants_algae.json b/algorithm_catalog/developmentseed/apa_aquatic_plants_algae/records/apa_aquatic_plants_algae.json new file mode 100644 index 00000000..5454dbf6 --- /dev/null +++ b/algorithm_catalog/developmentseed/apa_aquatic_plants_algae/records/apa_aquatic_plants_algae.json @@ -0,0 +1,156 @@ +{ + "id": "apa_aquatic_plants_algae", + "type": "Feature", + "conformsTo": [ + "https://www.opengis.net/spec/ogcapi-records-1/1.0/req/record-core", + "https://apex.esa.int/core/openeo-udp" + ], + "geometry": null, + "properties": { + "created": "2026-07-28T00:00:00Z", + "updated": "2026-07-28T00:00:00Z", + "type": "service", + "title": "Aquatic Plants and Algae Detection (APA)", + "description": "Detects and visualizes aquatic plants and algae in water bodies from Sentinel-2 L2A reflectance using spectral indices (FAI, water-plants, NDWI, moisture) with Braaten-Cohen-Yang cloud masking. Based on the APA script by the University of Girona. Adapted from a SentinelHub Custom Script by Anna Peliova, Carla Garcia-Lozano, Josep Sitjar.", + "keywords": [ + "Vegetation", + "Normalized Difference Water Index (NDWI)", + "Sentinel-2" + ], + "language": { + "code": "en-US", + "name": "English (United States)" + }, + "languages": [ + { + "code": "en-US", + "name": "English (United States)" + } + ], + "contacts": [ + { + "name": "Development Seed", + "organization": "Development Seed", + "links": [ + { + "href": "https://developmentseed.org", + "title": "Development Seed", + "rel": "about", + "type": "text/html" + } + ], + "contactInstructions": "Contact via Development Seed", + "roles": [ + "processor" + ] + }, + { + "name": "Anna Peliova, Carla Garcia-Lozano, Josep Sitjar", + "organization": "Sentinel Hub", + "links": [ + { + "href": "https://custom-scripts.sentinel-hub.com/custom-scripts/sentinel-2/apa_script/", + "title": "Aquatic Plants and Algae Detection (APA) SentinelHub Script", + "rel": "about", + "type": "text/html" + } + ], + "contactInstructions": "Original SentinelHub script. See link below.", + "roles": [ + "author" + ] + } + ], + "themes": [ + { + "concepts": [ + { + "id": "MARINE" + }, + { + "id": "WATER" + }, + { + "id": "REMOTE SENSING" + }, + { + "id": "Sentinel-2 MSI" + } + ], + "scheme": "https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/sciencekeywords" + } + ], + "formats": [ + { + "name": "GeoTiff" + }, + { + "name": "PNG" + } + ], + "license": "CC-BY-SA-4.0" + }, + "linkTemplates": [], + "links": [ + { + "rel": "application", + "type": "application/vnd.openeo+json;type=process", + "title": "openEO Process Definition", + "href": "https://raw.githubusercontent.com/ESA-APEx/apex_algorithms/ded25a7887e8486e5eccf06c51c92a5f5024c97b/algorithm_catalog/developmentseed/apa_aquatic_plants_algae/openeo_udp/apa_aquatic_plants_algae.json" + }, + { + "rel": "code", + "type": "text/html", + "title": "openeo-udp repository", + "href": "https://github.com/developmentseed/openeo-udp" + }, + { + "rel": "webapp", + "type": "text/html", + "title": "OpenEO Web Editor", + "href": "https://editor.openeo.org/?wizard=UDP&wizard%7Eprocess=apa_aquatic_plants_algae&wizard%7EprocessUrl=https://raw.githubusercontent.com/ESA-APEx/apex_algorithms/ded25a7887e8486e5eccf06c51c92a5f5024c97b/algorithm_catalog/developmentseed/apa_aquatic_plants_algae/openeo_udp/apa_aquatic_plants_algae.json&server=https://openeo.dataspace.copernicus.eu/" + }, + { + "rel": "service", + "type": "application/json", + "title": "Copernicus Data Space - Production API", + "href": "https://openeo.dataspace.copernicus.eu/" + }, + { + "rel": "notebook", + "type": "application/x-ipynb+json", + "title": "Aquatic Plants and Algae Detection (APA) notebook", + "href": "https://raw.githubusercontent.com/developmentseed/openeo-udp/refs/heads/main/notebooks/sentinel/sentinel-2/marine_and_water_bodies/apa_aquatic_plants_algae.ipynb" + }, + { + "rel": "platform", + "type": "application/json", + "title": "TiTiler openEO", + "href": "../../../../platform_catalog/titiler_openeo.json" + }, + { + "rel": "provider", + "type": "application/json", + "title": "Development Seed", + "href": "../../record.json" + }, + { + "rel": "preview", + "type": "image/png", + "title": "Aquatic Plants and Algae (APA)", + "href": "https://raw.githubusercontent.com/ESA-APEx/apex_algorithms/ded25a7887e8486e5eccf06c51c92a5f5024c97b/algorithm_catalog/developmentseed/apa_aquatic_plants_algae/records/preview.png" + }, + { + "rel": "thumbnail", + "type": "image/png", + "title": "Thumbnail image", + "href": "https://raw.githubusercontent.com/ESA-APEx/apex_algorithms/ded25a7887e8486e5eccf06c51c92a5f5024c97b/algorithm_catalog/developmentseed/apa_aquatic_plants_algae/records/thumbnail.png" + }, + { + "rel": "cite-as", + "type": "text/html", + "title": "Script Source Repository", + "href": "https://github.com/sentinel-hub/custom-scripts" + } + ] +} diff --git a/algorithm_catalog/developmentseed/apa_aquatic_plants_algae/records/preview.png b/algorithm_catalog/developmentseed/apa_aquatic_plants_algae/records/preview.png new file mode 100644 index 00000000..f7b00768 Binary files /dev/null and b/algorithm_catalog/developmentseed/apa_aquatic_plants_algae/records/preview.png differ diff --git a/algorithm_catalog/developmentseed/apa_aquatic_plants_algae/records/thumbnail.png b/algorithm_catalog/developmentseed/apa_aquatic_plants_algae/records/thumbnail.png new file mode 100644 index 00000000..b0926dab Binary files /dev/null and b/algorithm_catalog/developmentseed/apa_aquatic_plants_algae/records/thumbnail.png differ