Skip to content

Geo Domain

The foundational domain for geospatial data. Provides raster and vector operations, terrain analysis, spatial indexing, and imagery processing.

Decided in ADR-0006

Schema Extension

The geo: block on a layer declares geospatial metadata.

FieldTypeRequiredDescription
bbox[number x 4]NoBounding box in EPSG:4326 as [west, south, east, north]
crsstringNoCoordinate reference system. Default: EPSG:4326
query_methodstringNoHow point queries are resolved: spatial_lookup, point_sample, or nearest
yaml
layers:
  dem:
    uri: data/wasatch-dem-10m.tif
    type: raster
    geo:
      bbox: [-111.9, 40.5, -111.6, 40.8]
      crs: EPSG:4326

Operation Categories

The geo domain organizes 47 operations into 9 categories:

CategoryCountDescription
terrain7Slope, aspect, hillshade, curvature, TPI, TRI, viewshed
raster9NDVI, reclassify, clip, mosaic, reproject, normalize, calc, mask, rasterize
vector11Buffer, dissolve, intersection, union, simplify, clip, centroid, harmonize, and more
analysis8Zonal stats, weighted overlay, point sample, change detection, histogram, H3 index, distance, summary
imagery3Pansharpening, radiometric indices, optical calibration
classification2Train, predict
hydrology2Catchment network, tiered catchment network
composite1Treeline
utility4Raster-to-PMTiles, PMTiles merge, Terrarium encode/decode

Key Operations

OperationTypeDescription
terrain_sloperaster → rasterSlope angle from DEM (Horn's method). Output: float32 degrees.
terrain_aspectraster → rasterAspect direction (0-360 degrees clockwise from north).
terrain_hillshaderaster → rasterHillshade illumination from configurable light source.
raster_ndviraster → rasterNormalized Difference Vegetation Index from NIR and Red bands.
raster_reclassifyraster → rasterRemap values to classes (manual breaks, equal interval, quantile, value map).
raster_clipraster + vector → rasterClip raster to polygon boundary.
raster_calcraster → rasterBand math expressions using numpy functions.
analysis_zonal_statsraster + vector → tableStatistics (mean, min, max, etc.) per polygon zone.
analysis_weighted_overlayraster[] → rasterMulti-criteria weighted combination with normalization.
analysis_change_detectionraster + raster → rasterPixel-wise difference with optional classification.
analysis_h3_indexraster → tableIndex data onto H3 hexagonal grid at configurable resolution.
vector_buffervector → vectorBuffer features by distance in meters.
vector_dissolvevector → vectorMerge features, optionally grouped by attribute.
analysis_point_sampleraster + vector → tableSample raster values at point locations.

Compute

Geo operations run on GDAL, rasterio, and numpy in the local and cloud compute tiers. The platform routes automatically based on data size and location - local files run locally, cloud-hosted data runs on K8s workers.

Google Earth Engine is available as an external compute option for cloud-scale processing via backend: gee.

TierLibrariesUse Case
LocalGDAL, rasterio, numpyLocal files, small to medium rasters
CloudGDAL, rasterio, numpy (on K8s workers)Remote data, large-scale batch processing
External (GEE)Google Earth EngineExplicit backend: gee, planetary-scale analysis

Decided in ADR-0007 - engines, connectors, and drivers are three orthogonal concerns.

Example: Terrain Analysis Workspace

yaml
layers:
  source/dem:
    uri: data/dem.tif
    type: raster
    geo:
      bbox: [-111.9, 40.5, -111.6, 40.8]
      crs: EPSG:4326

  terrain/slope:
    type: raster
    compute:
      op: terrain_slope
      inputs:
        dem: { layer: source/dem }
      params:
        smooth: true
        smooth_sigma: 1.5
    style:
      palette: viridis
      rescale: "0,60"
      info:
        fields: [slope_degrees]
        format: "{value}°"

  terrain/hillshade:
    type: raster
    compute:
      op: terrain_hillshade
      inputs:
        dem: { layer: source/dem }
      params:
        azimuth: 315
        altitude: 45
    style:
      palette: grayscale
      opacity: 0.7

Licensed under CC-BY-4.0