Skip to content

Elevation

OAM indexes the Copernicus GLO-30 Digital Surface Model. The source Cloud Optimized GeoTIFFs are not copied; PgSTAC only stores metadata and links to them.

Ingestion

glo30.py reads Items from Earth Search, updates their asset URLs, then loads them into PgSTAC. It has its own ingestion path because GLO-30 is elevation data, not imagery.

Earth Search uses s3://copernicus-dem-30m/... asset URLs. OAM changes the main URL to public HTTPS for the raster service and keeps the S3 URL as an alternate.

GLO-30 is a static release, so ingestion uses a one-off Job. The Job upserts the Collection, followed by all 26,450 Items. It is safe to rerun after a partial load.

The manifests are in the k8s-infra repository.

ArgoCD creates the Job on its next sync. Delete the existing Job before running it again.

kubectl -n oam logs -f job/stac-ingest-glo30

Use --bbox MINX MINY MAXX MAXY for a smaller test ingest:

hotosm sync-glo30 --bbox 85.0 27.0 88.0 29.0

An upsert does not delete old or renamed Items. If upstream IDs change, remove the old Collection Items before running ingestion again.

Raster endpoints

Crop an area to GeoTIFF:

GET /raster/collections/cop-dem-glo-30/bbox/{minx},{miny},{maxx},{maxy}.tif
    ?assets=data&width={w}&height={h}&return_mask=false

The source grid is EPSG:4326 with 1/3600-degree pixels. Align the bbox and output dimensions to that grid to avoid resampling. return_mask=false omits the extra alpha band.

Serve Terrarium tiles for a MapLibre raster-dem source:

GET /raster/collections/cop-dem-glo-30/tiles/WebMercatorQuad/{z}/{x}/{y}.png
    ?assets=data&algorithm=terrarium

Caveats

  • Ocean pixels are 0, not nodata.
  • A cold multi-tile crop can hit PgSTAC's search time_limit.
  • Availability depends on the public Copernicus AWS bucket.