STAC Metadata
STAC (SpatioTemporal Asset Catalog) metadata refers to a standardized way of describing geospatial data, such as satellite imagery, through metadata that is human-readable and machine-readable. It follows the STAC specification, which provides a structured format for organizing and searching for spatio-temporal data.
Core Components
-
Item: Represents a single spatiotemporal asset (e.g., a satellite image). It includes:-
id: item's id -
bbox: item's bounding box. -
geometry: spatial extent (e.g., a GeoJSON polygon). -
datetime: specifies the temporal information (start/end dates for Collections). -
assets: individual data files (e.g., GeoTIFFs) with additional metadata such as roles (e.g., thumbnail, data).
-
-
Collection: a group of related Items with shared metadata, such as satellite images from the same mission.
Extensions
STAC is extensible, allowing additional fields to describe specific domains or use cases. Common extensions include:
- Raster Extension: describes additional raster metadata such as sampling, scale, offset etc.
- Electro-Optical Extension: for satellite images, describing bands, cloud cover, etc.
- Projection Extension: provides a way to describe the primary asset's coordinates referencing system (CRS).
STAC metadata is typically stored in JSON format and is widely used in platforms and services dealing with geospatial data to improve accessibility and usability.
Example STAC Metadata
{
"type": "Feature",
"stac_version": "1.1.0",
"stac_extensions": [
"https://stac-extensions.github.io/projection/v2.0.0/schema.json"
],
"id": "adelaide_airport",
"geometry": {
"type": "Point",
"coordinates": [
138.5196,
-34.9524
]
},
"bbox": [
138.5196,
-34.9524,
138.5196,
-34.9524
],
"properties": {
"timezone": "local",
"stac_generator": {
"column_info": [
{
"name": "daily_rain",
"description": "Observed daily rain fall in mm"
},
{
"name": "max_temp",
"description": "Observed daily maximum temperature in degree C"
},
{
"name": "min_temp",
"description": "Observed daily minimum temperature in degree C"
},
{
"name": "radiation",
"description": "Total incoming downward shortwave radiation on a horizontal surface MJ/sqm"
},
{
"name": "mslp",
"description": "Mean sea level pressure in hPa"
}
],
"X": "longitude",
"Y": "latitude",
"Z": "elevation",
"T": "YYYY-MM-DD",
"epsg": 7843
},
"start_datetime": "2022-12-31T13:30:00Z",
"end_datetime": "2023-01-31T13:30:00Z",
"proj:code": "EPSG:7843",
"proj:wkt2": "GEOGCRS[\"GDA2020\",DATUM[\"Geocentric Datum of Australia 2020\",ELLIPSOID[\"GRS 1980\",6378137,298.257222101,LENGTHUNIT[\"metre\",1]]],PRIMEM[\"Greenwich\",0,ANGLEUNIT[\"degree\",0.0174532925199433]],CS[ellipsoidal,3],AXIS[\"geodetic latitude (Lat)\",north,ORDER[1],ANGLEUNIT[\"degree\",0.0174532925199433]],AXIS[\"geodetic longitude (Lon)\",east,ORDER[2],ANGLEUNIT[\"degree\",0.0174532925199433]],AXIS[\"ellipsoidal height (h)\",up,ORDER[3],LENGTHUNIT[\"metre\",1]],USAGE[SCOPE[\"Geodesy, cadastre, engineering survey, topographic mapping.\"],AREA[\"Australia including Lord Howe Island, Macquarie Island, Ashmore and Cartier Islands, Christmas Island, Cocos (Keeling) Islands, Norfolk Island. All onshore and offshore.\"],BBOX[-60.55,93.41,-8.47,173.34]],ID[\"EPSG\",7843]]",
"datetime": "2022-12-31T22:30:00Z"
},
"links": [
{
"rel": "root",
"href": "/home/harry/CodingProject/stac-generator/tests/files/integration_tests/point/generated/collection.json",
"type": "application/json",
"title": "Auto-generated."
},
{
"rel": "collection",
"href": "/home/harry/CodingProject/stac-generator/tests/files/integration_tests/point/generated/collection.json",
"type": "application/json",
"title": "Auto-generated."
},
{
"rel": "self",
"href": "/home/harry/CodingProject/stac-generator/tests/files/integration_tests/point/generated/adelaide_airport/adelaide_airport.json",
"type": "application/json"
},
{
"rel": "parent",
"href": "/home/harry/CodingProject/stac-generator/tests/files/integration_tests/point/generated/collection.json",
"type": "application/json",
"title": "Auto-generated."
}
],
"assets": {
"data": {
"href": "tests/files/integration_tests/point/data/adelaide_airport.csv",
"type": "text/csv",
"description": "Raw csv data",
"roles": [
"data"
]
}
},
"collection": "collection"
}
{
"type": "Collection",
"id": "collection",
"stac_version": "1.1.0",
"description": "Auto-generated",
"links": [
{
"rel": "root",
"href": "/home/harry/CodingProject/stac-generator/tests/files/integration_tests/point/generated/collection.json",
"type": "application/json",
"title": "Auto-generated."
},
{
"rel": "item",
"href": "/home/harry/CodingProject/stac-generator/tests/files/integration_tests/point/generated/adelaide_airport/adelaide_airport.json",
"type": "application/geo+json"
},
{
"rel": "item",
"href": "/home/harry/CodingProject/stac-generator/tests/files/integration_tests/point/generated/adelaide_salisbury_bowling_club/adelaide_salisbury_bowling_club.json",
"type": "application/geo+json"
},
{
"rel": "item",
"href": "/home/harry/CodingProject/stac-generator/tests/files/integration_tests/point/generated/aston_coop/aston_coop.json",
"type": "application/geo+json"
},
{
"rel": "item",
"href": "/home/harry/CodingProject/stac-generator/tests/files/integration_tests/point/generated/belair/belair.json",
"type": "application/geo+json"
},
{
"rel": "item",
"href": "/home/harry/CodingProject/stac-generator/tests/files/integration_tests/point/generated/edinburg_raaf/edinburg_raaf.json",
"type": "application/geo+json"
},
{
"rel": "item",
"href": "/home/harry/CodingProject/stac-generator/tests/files/integration_tests/point/generated/glen_osmond/glen_osmond.json",
"type": "application/geo+json"
},
{
"rel": "item",
"href": "/home/harry/CodingProject/stac-generator/tests/files/integration_tests/point/generated/happy_valley_reservoir/happy_valley_reservoir.json",
"type": "application/geo+json"
},
{
"rel": "item",
"href": "/home/harry/CodingProject/stac-generator/tests/files/integration_tests/point/generated/hope_valley_reservoir/hope_valley_reservoir.json",
"type": "application/geo+json"
},
{
"rel": "item",
"href": "/home/harry/CodingProject/stac-generator/tests/files/integration_tests/point/generated/north_adelaide/north_adelaide.json",
"type": "application/geo+json"
},
{
"rel": "item",
"href": "/home/harry/CodingProject/stac-generator/tests/files/integration_tests/point/generated/soil_data/soil_data.json",
"type": "application/geo+json"
},
{
"rel": "self",
"href": "/home/harry/CodingProject/stac-generator/tests/files/integration_tests/point/generated/collection.json",
"type": "application/json"
}
],
"title": "Auto-generated.",
"extent": {
"spatial": {
"bbox": [
[
138.5196,
-35.0591,
150.5560285,
-24.33600118
]
]
},
"temporal": {
"interval": [
[
"2022-12-31T22:30:00Z",
"2023-01-08T22:30:00Z"
]
]
}
},
"license": "proprietary"
}