Skip to main content
Most geo applications need two halves: a front end that makes large data easy to explore, and a backend that can actually process it. OnlyMap JS is the first, NIKA GeoEngine is the second, and they are built to meet in the middle. For more live OnlyMap maps, browse the examples on onlymap.nikaplanet.com ↗.

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

OnlyMap in the browser calls your app API, which submits a batch job to NIKA GeoEngine; tasks write results to storage that OnlyMap streams directly
  • No tile server in between. Workers write Cloud-Optimised GeoTIFF or Zarr; OnlyMap’s COGLayer and ZarrLayer read 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. COGLayer and ZarrLayer do not route through configureData. 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.
More than 70 live OnlyMap examples, from GeoTIFFs and Zarr cubes to live tracking and 3D, are on onlymap.nikaplanet.com ↗.