Nexstrata

Beta

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.

Pipeline
  1. 01ObserveSpecies records from iNaturalist, GBIF, or your own uploads.
  2. 02EnrichAdd terrain, weather, soil, and canopy data to each point.
  3. 03ModelLearn which environmental conditions predict occurrence.
  4. 04PredictScore habitat suitability across the full map extent.
The stack

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.

Weatherthe seven days before the find
CanopyNDVI, NDMI
Groundsoil moisture, texture, land cover
Terrainelevation, slope, aspect, wetness
Exposuresun, wind
One observation on Earth, and the layers sampled above it.
Modeling Roadmap

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.

Capabilities
Earth Engine

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.
Known limitations

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.

View the source on GitHub