STAC Item Validation Rules – Axis 3 Compliant¶
Applies To: All Axis 3 Governmental Hub Thematic Services (e.g., Flood, Wildfire, Agriculture, Forest, Safety & Security)
Overview¶
This document defines the required STAC Item structure and validation rules for all products generated under the Axis 3 Governmental Hub, across all thematic services.
Ensures all EO products are:
- Properly indexed and searchable in the Axis 3 Catalog
- Discoverable and renderable by EOEPCA and STAC-compliant clients
- Consistent across all thematic service outputs
Example product types: - Raster: binary flood masks, NDVI layers, risk maps
- Vector: flooded areas, fire perimeters, crop boundaries
- Thumbnails: previews for visualization
1. Top-Level Fields – STAC Item Root¶
| Field | Requirement | Description |
|---|---|---|
type |
✅ Required | Must be "Feature" |
id |
✅ Required | Unique ID (e.g., SS-FR-FD-A) 🟥 Must follow [STAC Item ID and Naming Convention – Axis 3] |
stac_version |
✅ Required | Must be "1.1.0" |
stac_extensions |
🟡 Essential for Axis 3 Catalog | Required if any extension fields are used (see Section 5) |
geometry |
✅ Required | GeoJSON Polygon/MultiPolygon in EPSG:4326 |
bbox |
✅ Required | Bounding box matching geometry |
properties |
✅ Required | See Section 2 |
assets |
✅ Required | See Section 3 |
links |
✅ Required | See Section 4 |
collection |
✅ Required | Must match relevant collection (e.g., SS-FR, SS-WF) |
2. properties Object – Metadata Fields¶
| Field | Requirement | Description |
|---|---|---|
datetime |
✅ Required | UTC observation or analysis timestamp |
created |
🟡 Essential for Axis 3 Catalog | Product creation time |
processing:datetime |
🟡 Essential for Axis 3 Catalog | Processing completion timestamp |
processing:facility |
🟡 Essential for Axis 3 Catalog | Name of the processing system |
processing:version |
🟡 Essential for Axis 3 Catalog | Processing chain version |
processing:software |
🟡 Essential for Axis 3 Catalog | Dictionary of processing software |
processing:level |
🟡 Essential for Axis 3 Catalog | E.g., L4 |
gsd |
🟡 Essential for Axis 3 Catalog | Ground Sampling Distance |
platform |
🟡 Essential for Axis 3 Catalog | Sensor/platform (e.g., sentinel-2a) |
proj:code |
🟡 Essential for Axis 3 Catalog | EPSG code if projection used |
proj:centroid |
🟡 Essential for Axis 3 Catalog | { lat, lon } centroid of AOI |
title |
🟡 Essential for Axis 3 Catalog | Human-readable title 🟥 Must follow [STAC Item ID and Naming Convention – Axis 3] |
description |
🟡 Essential for Axis 3 Catalog | Summary of product |
keywords |
🟡 Essential for Axis 3 Catalog | E.g., ["flood", "wildfire"] |
3. assets Object – Thematic Products¶
Each STAC Item must include:
- Primary product(s): Raster or vector (e.g., flood_extent, fire_risk)
- A thumbnail: JPEG visualization preview
| Field | Requirement | Description |
|---|---|---|
<main_product> |
✅ Required | E.g., flood_extent, fire_risk |
thumbnail |
✅ Required | JPEG preview (auto-generated from raster) |
thumbnailis auto-generated by applying colormap to main raster and should also appear inlinkswith"rel": "preview".
Per asset fields:
| Field | Requirement | Description |
|---|---|---|
href |
✅ Required | Path or URL to the file |
type |
✅ Required | MIME type (e.g., image/tiff, application/geo+json) |
roles |
✅ Required | E.g., ["data"], ["thumbnail"] |
title |
🟡 Essential for Axis 3 Catalog | Human-readable name |
description |
🟡 Essential for Axis 3 Catalog | What the product contains |
raster:bands |
🟡 Essential for Axis 3 Catalog | Required if raster |
proj:* fields |
✅ Required | Required if raster |
4. links Array – Hierarchy & Navigation¶
rel value |
Requirement | Description |
|---|---|---|
self |
✅ Required | Link to this STAC item JSON |
collection |
✅ Required | Link to the STAC Collection |
preview |
✅ Required | Link to thumbnail image |
root, parent |
🟡 Essential for Axis 3 Catalog | Optional links to catalog hierarchy |
license |
🟡 Essential for Axis 3 Catalog | License or metadata PDF |
All links must include: -
rel: e.g.,"self","preview"-href: full path or URL
-type: e.g.,application/json,image/jpeg
5. stac_extensions – Required for Axis 3 EO Products¶
Declare extensions only if the associated fields are used.
| Extension Name | Requirement | Description |
|---|---|---|
raster |
🟡 Essential for Axis 3 Catalog | Needed if raster:bands present |
projection |
🟡 Essential for Axis 3 Catalog | Needed if using proj:* fields |
processing |
🟡 Essential for Axis 3 Catalog | Needed for all processing:* fields |
"stac_extensions": [
"https://stac-extensions.github.io/raster/v1.1.0/schema.json",
"https://stac-extensions.github.io/projection/v2.0.0/schema.json",
"https://stac-extensions.github.io/processing/v1.2.0/schema.json"
]
Note:
Extension usage depends on the Axis 3 service process and the product type (e.g., flood delineation vs depth estimation).
Only declare extensions if their fields are used.
Universal STAC Item Schema – Axis 3 Governmental Hub¶
This structure must be respected by all thematic services (e.g., Flood, Wildfire, Target Detection) to ensure compatibility with the Axis 3 Catalog and EOEPCA-based service orchestration.
Top-Level STAC Item Fields¶
STAC Item (type: "Feature")
├── stac_version: "1.1.0"
├── id: "<unique STAC ID>" ← For UID Must follow **[STAC Item ID and Naming Convention – Axis 3]**
├── geometry: { ... } ← Polygon/MultiPolygon (EPSG:4326)
├── bbox: [minLon, minLat, maxLon, maxLat] ← Matches geometry
├── collection: "<collection ID>" ← E.g., "SS-FR", "SS-WF", "SS-AG"
├── stac_extensions: [ ... ]
│ ├── raster (if raster:bands used)
│ ├── projection (if proj:* used)
│ └── processing (if processing:* used)
Metadata – properties Object¶
dproperties:
├── datetime: "<ISO8601 timestamp>" ← Observation or analysis time
├── created: "<timestamp>" ← Product creation time
├── title: "<Human-readable title>" ← for proper Title name Must follow **[STAC Item ID and Naming Convention – Axis 3]**
├── product:id ← If multiple assets there are
├── description: "<Short description>" ← What the product shows
├── keywords: [ ... ] ← Tags like ["flood", "wildfire"]
├── gsd: <number> ← Ground Sampling Distance
├── platform: "<satellite/sensor list>" ← E.g., "sentinel-2a"
├── processing:datetime ← Time processing finished
├── processing:facility ← System name
├── processing:version ← Service version
├── processing:software ← Dictionary of tools/versions
├── processing:level ← E.g., "L4"
├── proj:code ← EPSG code (e.g., 2100)
├── proj:centroid: { lat, lon } ← Geometric center of AOI
Data – assets Object¶
assets:
├── Binary: ← Binary classification GeoTIFF
├── Raster: ← Estimated GeoTIFF
├── Vector: ← Vector GeoJSON
├── thumbnail: ← for each asset png preview (512x512 based on the produced porduct)
Each asset includes:
├── href: "<link to file>"
├── type: "<MIME type>" ← e.g. image/tiff, application/geo+json
├── roles: [ "data" | "thumbnail" ]
├── title, description (optional)
├── raster:bands (if raster)
├── proj:shape, proj:bbox, proj:transform (if raster)
Array – Metadata Links¶
links:
├── self: "<link to this STAC item>"
├── collection: "<link to STAC collection>"
├── preview: "<optional link to thumbnail>"
├── root/parent: "<optional catalog parent>"
├── license: "<link to license or metadata PDF>"
Notes for Thematic Services¶
The structure above is universal for all thematic services in Axis 3.
Depending on the service (Flood, Wildfire, Target Detection...), the assets will change, but the rest of the structure (e.g., properties, extensions) must be respected.
STAC extensions should only be declared if their fields are used in assets or properties.
Example of an indexed item to Catalog¶
{
"type": "Feature",
"stac_version": "1.1.0",
"stac_extensions": [
"https://stac-extensions.github.io/raster/v1.1.0/schema.json",
"https://stac-extensions.github.io/projection/v2.0.0/schema.json",
"https://stac-extensions.github.io/processing/v1.2.0/schema.json"
],
"id": "SS-FR-FD-A",
"geometry": {
"type": "Polygon",
"coordinates": [
[
[
22.35462484229228,
39.40909226100256
],
[
22.91092288170982,
39.40909226100256
],
[
22.91092288170982,
39.86501984634571
],
[
22.35462484229228,
39.86501984634571
],
[
22.35462484229228,
39.40909226100256
]
]
]
},
"bbox": [
22.354625,
39.409092,
22.910923,
39.86502
],
"properties": {
"created": "2025-07-28T08:59:28.170653Z",
"processing:facility": "GR Service Engine",
"processing:version": "v1.1.0",
"processing:software": {
"GR Service Engine": "v1.1.0"
},
"processing:level": "L4",
"processing:datetime": "2025-07-28T08:59:23.099511Z",
"keywords": [
"SS-FR-FD-A-BI",
"SS-FR-FD-A-PL",
"SS-FR-FD-A-RAS"
],
"title": "Detailed flood delineation map (single class representing flood extent) and water depth map (water depth estimation), for 2015-2024.",
"description": "Binary map showing water and non-water areas.",
"gsd": 10,
"platform": "sentinel-1, sentinel-2a",
"proj:code": "2100",
"proj:centroid": {
"lat": 39.63706,
"lon": 22.63277
},
"datetime": "2025-07-28T08:59:23.099485Z"
},
"links": [
{
"rel": "license",
"href": "https://eks-1-hub.s3.eu-central-1.amazonaws.com/stac/CEOS_ARD/HUB_Pipeline_Execution_Flow.pdf",
"title": "GR Service Engine"
},
{
"rel": "root",
"href": "/XeXuKq/items/catalog.json",
"type": "application/json",
"title": "Catalog with AXIS data"
},
{
"rel": "parent",
"href": "/XeXuKq/items/SS-FR/collection.json",
"type": "application/json",
"title": "Collection SS-FR"
},
{
"rel": "self",
"href": "/XeXuKq/items/SS-FR/SS-FR-FD-A/SS-FR-FD-A.json",
"type": "application/json"
},
{
"rel": "collection",
"href": "/XeXuKq/items/SS-FR/collection.json",
"type": "application/json",
"title": "Collection SS-FR"
}
],
"assets": {
"flood_extent": {
"href": "assets/SS-FR/SS-FR-FD-A/flood_extent.tif",
"type": "image/tiff; application=geotiff; profile=cloud-optimized",
"title": "flood_extent",
"description": "Binary Classification image water vs non water areas.",
"product:id": "SS-FR-FD-A-BI",
"raster:bands": [
{
"nodata": 0.0,
"data_type": "uint8",
"spatial_resolution": 9.999343834414008
}
],
"proj:shape": [
5131,
4849
],
"proj:bbox": [
358209.30954257003,
4362464.12000209,
406696.1277956435,
4413770.753216469
],
"proj:transform": [
9.999343834414008,
0.0,
358209.30954257003,
0.0,
-9.999343834414008,
4413770.753216469,
0.0,
0.0,
1.0
],
"roles": [
"data"
]
},
"flood_depth": {
"href": "assets/SS-FR/SS-FR-FD-A/flood_depth.tif",
"type": "image/tiff; application=geotiff; profile=cloud-optimized",
"title": "flood_depth",
"description": "Estimated water depth using DEM and SAR data fusion.",
"product:id": "SS-FR-FD-A-RAS",
"raster:bands": [
{
"nodata": 0.0,
"data_type": "uint16",
"spatial_resolution": 9.999343834414008
}
],
"proj:shape": [
5131,
4849
],
"proj:bbox": [
358209.30954257003,
4362464.12000209,
406696.1277956435,
4413770.753216469
],
"proj:transform": [
9.999343834414008,
0.0,
358209.30954257003,
0.0,
-9.999343834414008,
4413770.753216469,
0.0,
0.0,
1.0
],
"roles": [
"data"
]
},
"flooded_areas": {
"href": "assets/SS-FR/SS-FR-FD-A/flooded_areas.geojson",
"type": "application/geo+json",
"title": "flooded_areas",
"description": "File containing metadata or vector data",
"roles": [
"data"
]
},
"thumbnail": {
"href": "assets/SS-FR/SS-FR-FD-A/thumbnail.jpg",
"type": "image/jpeg",
"title": "thumbnail",
"description": "An averaged, preview image of the scene",
"roles": [
"thumbnail"
]
}
},
"collection": "SS-FR"
}