crop-monitoring
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.
- recipe
- Apache-2.0
- outputs
- CC-BY-4.0
The contract
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
| parameter | type | domain | default | what 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
| output | kind | layer | what 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
registry/recipes/crop-monitoring/folia.yaml