Species distribution · Beta
Map where species occur.
Bind your observations to terrain, climate, and vegetation data, then model where else a species is likely to be found.
- 01ObserveSpecies records from iNaturalist, GBIF, or your own uploads.
- 02EnrichAdd terrain, weather, soil, and canopy data to each point.
- 03ModelLearn which environmental conditions predict occurrence.
- 04PredictScore habitat suitability across the full map extent.
From orbit to a single point
nex + stratathe binding of the layers at a point.
Every record is one coordinate and one date. Each layer is sampled at that point and that moment, not from a regional mean, so a historical find carries the conditions that preceded it.
From points to surfaces
Train a model on your enriched observations and get a suitability map across the whole landscape—including places with no recorded finds.
Maximum entropy (MaxEnt)
Works with presence-only data. MaxEnt learns the environmental conditions at known locations and scores habitat suitability from 0 to 1 across the map.
Features from the stack
Uses terrain, canopy, soil, weather and exposure as predictors. The same layers you see on the map become the model's input, so predictions match your data.
Honest about bias
Weights background data by observer effort and labels uncertainties at the point of use, not buried in documentation.
Map and aggregate
Point rendering with hex or square binning from ~100 m to ~28 km, over reference overlays for fire, forest type, soil, weather and land ownership.
Point enrichment
Queue an Earth Engine job over a bounding box and date range. Progress reports per stage; results are stored and loadable as a dataset.
Custom raster layers
Register an exported Earth Engine asset by ID, band and palette. Tile URLs are minted server-side and gated per access tier.
Statistics
Spearman rank correlations across populated fields, per-species deviation from the dataset mean, with season and effort confounds reported alongside.
Charts
Ten chart types over any field pair, saved per account, with shareable URLs that restore the active filters, colouring and map view.
Maps while offline
Named tile areas cached by a service worker, covering every layer drawn when the area was saved. Deletion is reference-counted, so overlapping areas keep their tiles.
Compute, not storage
No raster tiles are stored. A server function authenticates with a service account, calls getMapId() on the target asset and returns a short-lived tile template to the client; templates are cached per parameter set and re-minted before they expire.
- Enrich: submit a bounding box and date range. Staged sampling of terrain, land cover, soil, precipitation, temperature and vegetation at each point; output is written to object storage as GeoJSON.
- Render: 44 built-in layers computed server-side: MODIS and MTBS fire history, GAP forest type, SOLUS100 soil, SRTM terrain analysis, and Sentinel-2 indices calculated per request.
- Publish: register an exported asset by ID, band and palette. Inputs are validated against a strict grammar before they reach Earth Engine, and each layer carries its own access tier.
- Analyse: load a job result as a dataset. It feeds the same map, charts, heatmaps and statistics as the reference data.
The reference dataset is presence-only and opportunistically collected. Record density reflects observer effort and site access as much as actual occurrence. Absence of records is not evidence of absence.
Enrichment adds environmental context to each record; it does not correct for sampling bias. The seasonal heatmaps normalise within each cell, which reduces most effort bias; the density heatmaps cannot, and say so. Every control has a reference entry covering its behaviour and limitations.