Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion algorithm_catalog/dhi/record.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,10 @@
],
"contacts": [],
"themes": [],
"license": "other"
"license": "other",
"acl": {
"admin": ["@dhigroup.com"]
}
},
"linkTemplates": [],
"links": [
Expand Down
46 changes: 46 additions & 0 deletions algorithm_catalog/eodc/record.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
{
"id": "eodc",
"type": "Feature",
"conformsTo": [
"http://www.opengis.net/spec/ogcapi-records-1/1.0/req/record-core"
],
"properties": {
"created": "2025-12-03T13:00:00Z",
"updated": "2025-12-03T13:00:00Z",
"type": "algoritm_provider",
"title": "EODC",
"description": "",
"keywords": [],
"language": {
"code": "en-US",
"name": "English (United States)"
},
"languages": [
{
"code": "en-US",
"name": "English (United States)"
}
],
"contacts": [],
"themes": [],
"license": "other",
"acl": {
"admin": ["@eodc.eu"]
}
},
"linkTemplates": [],
"links": [
{
"rel": "website",
"type": "text/html",
"title": "EODC",
"href": "https://eodc.eu/"
},
{
"rel": "logo",
"type": "image/png",
"title": "Logo",
"href": "https://eodc.eu/wp-content/themes/eodc/assets/imgs/eodc_logo_marine.svg"
}
]
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
"process_graph": {
"ardsen2like": {
"process_id": "sen2like",
"namespace": "https://raw.githubusercontent.com/ESA-APEx/apex_algorithms/refs/heads/sen2like/algorithm_catalog/eodc/sen2like/openeo_udp/sen2like.json",
"namespace": "https://raw.githubusercontent.com/ESA-APEx/apex_algorithms/refs/heads/main/algorithm_catalog/eodc/sen2like/openeo_udp/sen2like.json",
"arguments": {
"spatial_extent": {
"east": 16.414,
Expand Down
23 changes: 17 additions & 6 deletions algorithm_catalog/eodc/sen2like/records/sen2like.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,10 @@
"updated": "2025-05-22T00:00:00Z",
"type": "service",
"title": "Harmonized Landsat/Sentinel-2 ARD",
"description": "# Sen2like\n\nThe Sen2Like processor was developed by ESA as part of the EU Copernicus program. It creates Sentinel-2 like harmonized (Level-2H) or fused (Level-2F) surface reflectances by harmonizing Sentinel-2 and Landsat 8/Landsat 9 to increase the temporal revisits. The fusion involves the upscaling of Landsat 8/Landsat 9 data to Sentinel-2 resolution. Furthermore, the resulting sen2like L2H/ L2F data can be processed using openEO to generate statistics, vegetation indices, do comparisons with other datasets, etc.\n\n### Methodology\n\nThe processing of the incoming Landsat and Sentinel-2 L1C data includes the following main processing steps: Geometric Processing, Stitching, Geometric Check, Inter-calibration, Atmospheric correction, BRDF Adjustment, SBAF, Topographic Correction, Data Fusion. If Sentinel-2 L2A data is provided, sen2like processing will not include Atmospheric and Topographic Correction. In the geometric processing step, the input images are co-registered to a Sentinel-2 reference image. The atmospheric correction step makes use of the sen2cor processor and additionally relies on Copernicus Atmosphere Monitoring Service (CAMS) Near Real Time and Reanalysis data as well as the Copernicus Digital Elevation Model. The Data Fusion step alignes Landsat 8 image pixel spacing fully with Sentinel2 image pixel spacing. Depending on the band, the resolution of the Landsat L2F product is 10 m, 20 m or 30 m.\n\n### Quality\n\nThe geometric check process is a Quality Control step of the product. For further information, see Sen2like User Manual.\n\n### Links\n\n- [RD1] openEO platform Sen2like documentation https://docs.openeo.cloud/usecases/ard/sen2like\n- [RD1] Saunier, S. (2025). Sen2like User Manual https://github.com/senbox-org/sen2like/blob/master/sen2like/docs/source/S2-SEN2LIKE-UM-V1.10.pdf",
"description": "Sen2Like is a processor that generates harmonized or fused Sentinel-2–like surface reflectance products by combining Sentinel-2 and Landsat 8/9 data. By inter-calibrating, atmospherically correcting, and optionally fusing Landsat data to Sentinel-2 resolution, it increases temporal revisit frequency and produces analysis-ready datasets that can be further processed with openEO for statistics, indices, and comparisons.",
"keywords": [
"sentinel-2",
"landsat-8",
"ard"
"Sentinel-2",
"Landsat-8"
],
"language": {
"code": "en-US",
Expand Down Expand Up @@ -74,6 +73,18 @@
},
"linkTemplates": [],
"links": [
{
"rel": "provider",
"type": "application/json",
"title": "EODC",
"href": "../../record.json"
},
{
"rel": "platform",
"type": "application/json",
"title": "EODC openEO Backend",
"href": "../../../../platform_catalog/openeo_eodc.json"
},
{
"rel": "application",
"type": "application/vnd.openeo+json;type=process",
Expand All @@ -95,8 +106,8 @@
{
"rel": "service",
"type": "application/json",
"title": "openEO platform",
"href": "https://openeo.cloud"
"title": "EODC openEO Backend",
"href": "https://openeo.eodc.eu/openeo/1.2.0"
},
{
"rel": "cite-as",
Expand Down
5 changes: 4 additions & 1 deletion algorithm_catalog/eurac/record.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,10 @@
],
"contacts": [],
"themes": [],
"license": "other"
"license": "other",
"acl": {
"admin": ["@eurac.edu"]
}
},
"linkTemplates": [],
"links": [
Expand Down
5 changes: 4 additions & 1 deletion algorithm_catalog/terradue/record.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,10 @@
],
"contacts": [],
"themes": [],
"license": "other"
"license": "other",
"acl": {
"admin": ["@terradue.com"]
}
},
"linkTemplates": [],
"links": [
Expand Down
5 changes: 4 additions & 1 deletion algorithm_catalog/vito/record.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,10 @@
],
"contacts": [],
"themes": [],
"license": "other"
"license": "other",
"acl": {
"admin": ["@vito.be"]
}
},
"linkTemplates": [],
"links": [
Expand Down
5 changes: 4 additions & 1 deletion algorithm_catalog/wur/record.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,10 @@
],
"contacts": [],
"themes": [],
"license": "other"
"license": "other",
"acl": {
"admin": ["@vito.be"]
}
},
"linkTemplates": [],
"links": [
Expand Down
2 changes: 2 additions & 0 deletions docs/catalogue.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,8 @@ It is also important to link the service record to the provider record. This can
### Creating a new Platform Record
If you are integrating a service record that is hosted on an APEx-compliant platform that is not yet represented in the repository, you will need to create a new `<platform>.json` file within the `platform_catalog` directory. This new file contains all the necessary information about the hosting platform, such as its name, description, contact details, website link, and logo. You can refer to an existing platform file in the repository as a template for creating your own.

Each platform record must also have an `properties.acl` section that defines the access control list for the platform. This information is used to determine which email addresses are authorized to access benchmark information for services hosted on that platform (currently in development). You can either specify specific email addresses or define email domains that are allowed access.

### Linking the Service to the Hosting Platform
To link the service record to the hosting platform record, add an entry in the `links` section of the service record. Set the `rel` property to `platform` and the `href` to the relative path of the platform's record file (`../../../../platform_catalog/<platform>.json`).

Expand Down
60 changes: 60 additions & 0 deletions platform_catalog/openeo_eodc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
{
"id": "openeo_eodc",
"type": "Feature",
"conformsTo": [
"http://www.opengis.net/spec/ogcapi-records-1/1.0/req/record-core"
],
"properties": {
"created": "2024-05-17T00:00:00Z",
"updated": "2024-05-17T00:00:00Z",
"type": "openeo_backend",
"title": "EODC openEO Backend",
"short_title": "EODC openEO",
"description": "The EODC openEO backend enables processing using openEO.",
"keywords": [],
"language": {
"code": "en-US",
"name": "English (United States)"
},
"languages": [
{
"code": "en-US",
"name": "English (United States)"
}
],
"contacts": [
{
"name": "EODC openEO Backend",
"links": [
{
"href": "https://openeo.eodc.eu",
"rel": "about",
"title": "EODC openEO Backend",
"type": "text/html"
}
],
"contactInstructions": "SEE WEBSITE",
"roles": [
"operator"
]
}
],
"themes": [],
"license": "other"
},
"linkTemplates": [],
"links": [
{
"rel": "website",
"type": "text/html",
"title": "EODC openEO Backend API",
"href": "https://openeo.eodc.eu"
},
{
"rel": "logo",
"type": "image/svg+xml",
"title": "EODC Logo",
"href": "https://eodc.eu/wp-content/themes/eodc/assets/imgs/eodc_logo_marine.svg"
}
]
}
12 changes: 7 additions & 5 deletions qa/tools/apex_algorithm_qa_tools/scenarios.py
Original file line number Diff line number Diff line change
Expand Up @@ -96,12 +96,14 @@ def lint_benchmark_scenario(scenario: BenchmarkScenario):
# TODO #17 raise descriptive exceptions instead of asserts?
assert re.match(r"^[a-zA-Z0-9_-]+$", scenario.id)
# TODO proper allow-list of backends or leave this freeform?
assert scenario.backend in [
"openeo.dataspace.copernicus.eu",
"openeofed.dataspace.copernicus.eu",
"openeo.cloud",
"openeo.vito.be",
backend_patterns = [
r"^(https:\/\/)?openeo\.dataspace\.copernicus\.eu(\/.*)?$",
r"^(https:\/\/)?openeofed\.dataspace\.copernicus\.eu(\/.*)?$",
r"^(https:\/\/)?openeo\.cloud(\/.*)?$",
r"^(https:\/\/)?openeo\.vito\.be(\/.*)?$",
r"^(https:\/\/)?openeo\.eodc\.eu(\/.*)?$",
]
assert any(re.fullmatch(p, scenario.backend) for p in backend_patterns), f"Unsupported backend: {scenario.backend!r}"
# TODO: more advanced process graph validation?
assert isinstance(scenario.process_graph, dict)
for node_id, node in scenario.process_graph.items():
Expand Down
15 changes: 14 additions & 1 deletion schemas/provider.json
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,8 @@
"title",
"description",
"contacts",
"themes"
"themes",
"acl"
],
"properties": {
"created": {
Expand Down Expand Up @@ -324,6 +325,18 @@
}
}
}
},
"acl": {
"type": "object",
"properties": {
"admin": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
}
}
},
Expand Down
2 changes: 0 additions & 2 deletions schemas/record.json
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,6 @@
"type",
"title",
"description",
"cost_estimate",
"cost_unit",
"contacts",
"themes",
"formats"
Expand Down