crop-monitoring

unverified
v0.1.0

Per-field crop vigor and phenology from a Sentinel-2 NDVI time series. For an AOI covered by field boundaries, compute NDVI for every clear pass, fit a harmonic model to each pixel's season, and aggregate the phenology to each field: how vigorous the crop is (annual amplitude), when it peaks (phase, day-of-year of maximum greenness), and its multi-year trend. The per-field table is the crop-monitoring product; the NDVI stack and amplitude/phase rasters are the "show your work" layers.

License
recipe
Apache-2.0
outputs
CC-BY-4.0
Map preview and live runs are available in the workbench.

The contract

governed folia/0.1

Read from this recipe's own declarations — parameters:, outputs:, requires:, and the ops its layers name. Not from its style blocks and not from any benchmark: a colour ramp is not a contract, and a measured run is evidence about one AOI rather than a domain.

Parameters

parametertypedomaindefaultwhat it does
aoi_bbox array of number, exactly 4 items [-119.9,36.6,-119.86,36.63] The AOI bounding box [w, s, e, n] in WGS84 lon/lat.
date_start string 2023-01-01 Time-series start (>=2 full growing seasons for a stable harmonic fit).
date_end string 2024-12-31 Time-series end.
fields_uri string local://fields.geojson The field-boundary vector the NDVI phenology is aggregated into (GeoJSON/FTW).
n_harmonics number >= 1 2 Harmonics in the seasonal model (2 = annual + semi-annual / double-cropping).
fit_trend boolean true Fit a multi-year greening/browning trend per pixel.
period number >= 1 365.25 The harmonic reporting period in days (phase is reported as day-of-year).
scene_limit number >= 1 24 Max scenes to fetch over the AOI + window.

Outputs

outputkindlayerwhat it is
field_stats vector compute/field_stats Per-field crop vigor + phenology — THE product (written as GeoParquet).
ndvi_stack tensor compute/ndvi The NDVI per-scene tensor `[time,y,x]` behind the fit (show-your-work).
phenology tensor compute/phenology The fitted amplitude/phase/trend/rmse phenology tensor `[band,y,x]` (show-your-work).

Capabilities it requires

Declares no requires: block, so it asks nothing of a host beyond the engine itself.

Where it runs

  • Browser preview does not run here compute/field_stats: op "zonal_stats" has no browser kernel; compute/ndvi: layer type "tensor" is not one folia-view parses; compute/phenology: layer type "tensor" is not one folia-view parses; and 1 more
  • Local CLI (folia run) runs here runs locally through the governed folia/0.1 parser
  • Operated fleet (POST /plan, /run) runs here binds to a canonical digest, so a lock is checked by digest equality
open in Workbench from registry/recipes/crop-monitoring/folia.yaml