crop-yield-proxy
Per-field seasonal greenness integral as a first-order yield proxy, derived from a Sentinel-2 NDVI time series over a growing season. For each field boundary in the Fields of the World layer, cumulate NDVI across all clear passes (temporal_reduce sum) to form the season-integrated greenness, then aggregate that integral to the field polygon (zonal_stats mean). The resulting per-field table ranks fields by cumulative photosynthetic activity and serves as a lightweight, reproducible yield proxy that requires no ground-truth calibration. The method follows Bolton & Friedl 2013 (cites_papers: bolton-2013): integrated seasonal NDVI correlates with crop yield across major staple crops in CONUS, with the temporal sum over the growing season outperforming peak or mean in most settings. Swap inputs.date_range to isolate a single growing season, or swap inputs.fields for a parcel set, without touching the layer graph.
- 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
The legacy dialect has no typed parameter schema. Read the folia.yaml for what this recipe takes; nothing here can type-check it.
Outputs
| output | kind | layer | what it is |
|---|---|---|---|
primary |
not declared | ['compute/field_yield_proxy'] |
|
show_your_work |
not declared | ['compute/ndvi', 'compute/seasonal_integral'] |
|
provenance |
not declared | ['source_scene_ids'] |
Capabilities it requires
The legacy dialect has no requires: block.
Where it runs
- Browser preview does not run here compute/field_yield_proxy: carries an unsubstituted ${...} template; compute/ndvi: layer type "raster_timeseries" is not one folia-view parses; compute/seasonal_integral: carries an unsubstituted ${...} template; and 1 more
- Local CLI (folia run) runs here runs locally through the legacy (no spec_version) parser
- Operated fleet (POST /plan, /run) runs here legacy dialect: a lock binds by the cut's layer names, not by digest
registry/recipes/crop-yield-proxy/folia.yaml