diff --git a/algorithm_catalog/earthdaily/methane_detection/records/methane_detection.json b/algorithm_catalog/earthdaily/methane_detection/records/methane_detection.json new file mode 100644 index 000000000..906433cf4 --- /dev/null +++ b/algorithm_catalog/earthdaily/methane_detection/records/methane_detection.json @@ -0,0 +1,145 @@ +{ + "id": "methane_detection", + "type": "Feature", + "conformsTo": [ + "https://www.opengis.net/spec/ogcapi-records-1/1.0/req/record-core", + "https://apex.esa.int/core/ogc-api-processes" + ], + "geometry": null, + "properties": { + "visibility": "public", + "created": "2026-04-24T00:00:00Z", + "updated": "2026-05-11T00:00:00Z", + "type": "service", + "title": "Sentinel-2 Methane Enhancement Detection", + "description": "Earth observation methane detection workflow that searches a STAC API for Sentinel-2 L1C scenes over a bbox and time range, pairs matching L2A scenes when available, applies a SWIR-band (B11/B12) matched-filter detector per scene, and aggregates per-scene results into time-signal outputs. Supports multiple STAC backends (Element84 Earth Search, Copernicus Data Space Ecosystem, EarthDaily) and emits a STAC Catalog containing methane enhancement heatmaps as Cloud-Optimized GeoTIFFs, PNG previews, and JSON statistics.", + "cost_estimate": 0.0, + "cost_unit": "platform dependent", + "keywords": [ + "Climate", + "Sentinel-2", + "Methane", + "STAC", + "Data Analysis and Visualization" + ], + "language": { + "code": "en-US", + "name": "English (United States)" + }, + "languages": [ + { + "code": "en-US", + "name": "English (United States)" + } + ], + "contacts": [ + { + "name": "EarthDaily", + "organization": "EarthDaily", + "roles": [ + "processor" + ], + "links": [ + { + "href": "https://earthdaily.com/", + "title": "EarthDaily website", + "rel": "about", + "type": "text/html" + }, + { + "href": "https://github.com/earthdaily/methane-detection", + "title": "methane-detection source repository", + "rel": "about", + "type": "text/html" + } + ], + "contactInstructions": "Contact EarthDaily through the public website." + } + ], + "themes": [ + { + "concepts": [ + { + "id": "ATMOSPHERE" + }, + { + "id": "ATMOSPHERIC CHEMISTRY" + }, + { + "id": "TRACE GASES" + }, + { + "id": "METHANE" + }, + { + "id": "REMOTE SENSING" + } + ], + "scheme": "https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/sciencekeywords" + } + ], + "formats": [ + { + "name": "GeoTIFF" + }, + { + "name": "PNG" + }, + { + "name": "JSON" + } + ], + "license": "MIT" + }, + "linkTemplates": [], + "links": [ + { + "rel": "application", + "type": "application/cwl+yaml", + "title": "EOAP CWL Workflow Application Package", + "href": "https://raw.githubusercontent.com/earthdaily/methane-detection/main/app-package.cwl" + }, + { + "rel": "service", + "type": "application/json", + "title": "Methane detection OGC API Processes endpoint", + "href": "https://pygeoapi-eoxhub.workspace.gtif-ukif.hub-otc.eox.at/processes/execute-methane-process" + }, + { + "rel": "platform", + "type": "application/json", + "title": "EOxHub Workspaces", + "href": "../../../../platform_catalog/eoxhub.json" + }, + { + "rel": "provider", + "type": "application/json", + "title": "EarthDaily", + "href": "../../record.json" + }, + { + "rel": "about", + "type": "text/html", + "title": "methane-detection documentation", + "href": "https://github.com/earthdaily/methane-detection#readme" + }, + { + "rel": "code", + "type": "text/html", + "title": "Source repository", + "href": "https://github.com/earthdaily/methane-detection" + }, + { + "rel": "webapp", + "type": "text/html", + "title": "GTIF UKIF Client — Methane Detection Explorer", + "href": "https://gtif-ukif.github.io/gtif-ukif-client/explore/?x=15.0000&y=48.0000&z=4.0000&template=expert&indicator=EDA-methane-detection&datetime=2026-05-13" + }, + { + "rel": "thumbnail", + "type": "image/png", + "title": "Methane enhancement heatmap thumbnail", + "href": "https://raw.githubusercontent.com/ESA-APEx/apex_algorithms/3b491921dac899201e9cd1d12b9bdf2cd0129ca9/algorithm_catalog/earthdaily/methane_detection/records/thumbnail.png" + } + ] +} \ No newline at end of file diff --git a/algorithm_catalog/earthdaily/methane_detection/records/thumbnail.png b/algorithm_catalog/earthdaily/methane_detection/records/thumbnail.png new file mode 100644 index 000000000..016464886 Binary files /dev/null and b/algorithm_catalog/earthdaily/methane_detection/records/thumbnail.png differ diff --git a/algorithm_catalog/earthdaily/record.json b/algorithm_catalog/earthdaily/record.json new file mode 100644 index 000000000..07c42bc03 --- /dev/null +++ b/algorithm_catalog/earthdaily/record.json @@ -0,0 +1,67 @@ +{ + "id": "earthdaily", + "type": "Feature", + "conformsTo": [ + "https://www.opengis.net/spec/ogcapi-records-1/1.0/req/record-core" + ], + "properties": { + "created": "2026-04-24T00:00:00Z", + "updated": "2026-04-24T00:00:00Z", + "type": "algorithm_provider", + "title": "EarthDaily", + "description": "Earth observation data and analytics provider.", + "keywords": [ + "Earth Observation", + "Satellite Imagery", + "Analytics" + ], + "language": { + "code": "en-US", + "name": "English (United States)" + }, + "languages": [ + { + "code": "en-US", + "name": "English (United States)" + } + ], + "contacts": [ + { + "name": "EarthDaily", + "organization": "EarthDaily", + "roles": [ + "processor" + ], + "contactInstructions": "Contact EarthDaily through the public website." + } + ], + "themes": [], + "license": "MIT", + "acl": { + "admin": [ + "@earthdaily.com" + ] + } + }, + "linkTemplates": [], + "links": [ + { + "rel": "website", + "type": "text/html", + "title": "EarthDaily", + "href": "https://earthdaily.com/" + }, + { + "rel": "logo-light", + "type": "image/png", + "title": "EarthDaily logo", + "href": "https://earthdaily.com/hs-fs/hubfs/3.%20Logos%20all/EarthDaily%20Logos/EDA_logo_gradient-white.png?width=500&height=236&name=EDA_logo_gradient-white.png" + }, + { + "rel": "logo-dark", + "type": "image/png", + "title": "EarthDaily logo", + "href": "https://earthdaily.com/hs-fs/hubfs/3.%20Logos%20all/EarthDaily%20Logos/EDA_logo_main.png?width=240&height=113&name=EDA_logo_main.png" + } + ] +} \ No newline at end of file diff --git a/platform_catalog/eoxhub.json b/platform_catalog/eoxhub.json new file mode 100644 index 000000000..121caee61 --- /dev/null +++ b/platform_catalog/eoxhub.json @@ -0,0 +1,77 @@ +{ + "id": "eoxhub", + "type": "Feature", + "conformsTo": [ + "https://www.opengis.net/spec/ogcapi-records-1/1.0/req/record-core" + ], + "properties": { + "created": "2026-04-29T00:00:00Z", + "updated": "2026-04-29T00:00:00Z", + "type": "ogc_backend", + "title": "EOxHub Workspaces", + "short_title": "EOxHub", + "description": "EOxHub Workspaces is a cloud-based Earth observation workspace platform supporting geospatial processing and OGC API services through applications such as pygeoapi.", + "keywords": [ + "Earth Observation", + "OGC API Processes", + "pygeoapi" + ], + "language": { + "code": "en-US", + "name": "English (United States)" + }, + "languages": [ + { + "code": "en-US", + "name": "English (United States)" + } + ], + "contacts": [ + { + "name": "EOxHub Workspaces", + "organization": "EOX IT Services GmbH", + "roles": [ + "operator" + ], + "links": [ + { + "href": "https://hub.eox.at/contact", + "title": "EOxHub contact", + "rel": "about", + "type": "text/html" + } + ], + "contactInstructions": "Contact EOX IT Services GmbH through the EOxHub contact page." + } + ], + "themes": [], + "license": "other" + }, + "linkTemplates": [], + "links": [ + { + "rel": "website", + "type": "text/html", + "title": "EOxHub Workspaces", + "href": "https://hub.eox.at/" + }, + { + "rel": "documentation", + "type": "text/html", + "title": "EOxHub Workspaces documentation", + "href": "https://documentation.hub.eox.at/" + }, + { + "rel": "logo-light", + "type": "image/svg+xml", + "title": "EOxHub logo", + "href": "https://hub-brands.eox.at/eoxhub/eoxhub.svg" + }, + { + "rel": "logo-dark", + "type": "image/svg+xml", + "title": "EOxHub logo", + "href": "https://hub-brands.eox.at/eoxhub/eoxhub.svg" + } + ] +} diff --git a/qa/unittests/tests/test_records.py b/qa/unittests/tests/test_records.py index 6cf3f4bd9..c2488e252 100644 --- a/qa/unittests/tests/test_records.py +++ b/qa/unittests/tests/test_records.py @@ -32,7 +32,7 @@ def test_get_platform_ogc_records(): [ # Use scenario id as parameterization id to give nicer test names. pytest.param(record, id=record["data"]["id"]) - for record in get_service_ogc_records() + for record in get_service_ogc_records() if record["data"]["id"] == "structure_icing" ], ) def test_service_record_validation(record):