Front end: OnlyMap JS
Projection-aware WebGL maps from declarative HTML. Streams COG and Zarr rasters straight from storage, and polls live data.
Backend: NIKA GeoEngine
Batch jobs that fan out on CPU, high-memory and GPU pools, behind role-based access, writing COG, Zarr and GeoJSON.
How they connect
- No tile server in between. Workers write Cloud-Optimised GeoTIFF or Zarr; OnlyMap’s
COGLayerandZarrLayerread only the parts on screen, by HTTP range request. See a COG and a Zarr cube live. - Progress is just data. A layer with
refresh="2s"polls the job’s task list, so tiles light up on the map as tasks finish. See polling live ↗. - Credentials stay out of markup.
OmMap.configureData()adds your token to every data-layer request, polling included, so the task list can sit behind your app’s authentication. - Rasters are fetched directly by the browser.
COGLayerandZarrLayerdo not route throughconfigureData. Serve COG results same-origin through your app, where the browser sends the user’s session cookie, or from a CORS-enabled store. Authenticated Zarr stores are not supported yet, so use Zarr for results that may be public and COG behind your app for sensitive ones. - Access control carries through. A user who isn’t cleared for a restricted worker is refused at the gateway, and the map says so.
Try it
Pick a scenario and run a batch job. Each square is one task on one pod. Switch the scenario to New-building detection and run it as an Analyst to see a restricted worker refused.Demo: the backend’s responses are simulated in the page. The map, layers and polling are real OnlyMap JS. For more maps you can play with, see the OnlyMap examples ↗.
The front-end code
The whole map is markup. Your app API proxies two calls to NIKA GeoEngine: create the job, and return its tasks as GeoJSON.index.html
What teams build with the pair
Crop monitoring from cloud-free mosaics
Need: field-by-field vegetation health every month, despite cloud.Backend:
cloud-removal builds a monthly Sentinel-2 composite per tile on the high-memory class; a second worker computes mean NDVI per field.On the map: the composite as a COGLayer, fields coloured by NDVI, and a month slider with the filter widget. Try a GeoTIFF and GPU filtering.Flood extent within hours
Need: where the water is after a storm, while clouds still cover optical satellites.Backend: your pipeline starts a batch job when a Sentinel-1 radar scene lands; a CPU worker compares it with a dry baseline, tile by tile.On the map: the flood mask over the satellite basemap, with affected roads and facilities as
PopupLayer badges. Try labelling many features.New-building detection at sensitive sites
Need: flag construction across very high-resolution imagery of sites few people may see.Backend: a restricted GPU worker runs a change-detection model; only the cleared role can submit it, and results stay in the cluster’s storage.On the map: before and after imagery as COGs served through your app, a layer switcher, and detected footprints as polygons for review.
Burn severity after wildfire
Need: a severity map for recovery teams days after containment.Backend: a CPU worker computes dNBR from pre- and post-fire Sentinel-2 scenes, fanned out per tile, and writes a classified COG.On the map: a
COGLayer with a threshold legend of severity classes, over shaded relief from HillshadeLayer. Try shaded relief.Heat stress from climate data cubes
Need: district-level heat-stress days from decades of reanalysis data.Backend: a high-memory worker reads the cube, computes the index per year and writes a public, CORS-enabled Zarr store plus a district table.On the map: a
ZarrLayer with a year selector, beside a district choropleth and a chart widget. Try slicing a Zarr cube.Drone inspection of solar farms
Need: find failing panels from thousands of thermal drone photos per site.Backend: a GPU worker builds the orthomosaic and detects hot spots, one batch per flight.On the map: the orthomosaic as a
COGLayer, each original photo as a geotagged ImageOverlay, and defects clustered by row. Try placing a drone photo and clustering points.Why the pair works
Next steps
Build your first worker
Manifest, inputs and batch habits.
Connect your pipeline
Your pipelines, FME Flow, ArcGIS.
OnlyMap JS docs
Layers, widgets and live data.