Skip to content

Use a STAC to catalogue all imagery assets

Context and Problem Statement

We need a way to:

  • Store metadata about all the imagery in OpenAerialMap.
  • Query the metadata, ideally using filters.
  • Use an API for discoverability of assets, allowing various downstream components to load in imagery easily.

Historically OpenAerialMap used a MongoDB metadata database to store imagery info.

While this worked, it was a custom schema and API that required ongoing maintenance, and it was difficult for external tools to consume without writing bespoke integrations.

The STAC Spec (Spatio-Temporal Asset Catalogue) is now a well established, community-driven approach to cataloguing various geospatial assets.

There are numerous tools built around STAC, from pre-built web UIs, Python modules to discover and read imagery, etc.

Considered Options

I think we only really considered STAC, as it's the primary standard built for geospatial metadata cataloguing.

Decision Outcome

We chose STAC as the only sane option in 2025!

Consequences

  • ✅ Interoperability: Many existing clients and libraries can query and parse STAC, removing the need for us to maintain bespoke things.
  • ✅ Discoverability: STAC API implementations (e.g., PySTAC, stac-fastapi) allow easy filtering by time, location, and metadata attributes.
  • ✅ Future-proofing: The STAC community continues to evolve the spec, adding extensions for new metadata needs (e.g., processing levels, cloud storage locations). Should also reduce maintenance burden as a result.
  • ❌ Not many downsides. Possible learning curve with STAC, but lots of resources available online. It's also bit more complex than our simple metadata schema previously.