Punjab and Haryana survey planner

2 km cells. Every number comes from the state-wide layers (climate normals, soil, terrain, winter-cereal extent, MODIS and Sentinel-2 greenness histories, Punjab field boundaries, documented yellow rust reports, OpenStreetMap roads) and the rules learned on the 14 study sites. Abbreviations are explained in the glossary at the bottom; hover a name for its meaning.

Teams and capacity

3
250
9

What matters (importance weights)

0.20
0.05
0.15
0.10
0.10
0.15
0.15
0.10
0

Spreading the teams

0.50
0.50

Map layer

Overlays

Click on the map

Click a cell to see all its values.

Teams

Place teams by clicking (place mode) or automatically. The area grows to the loop capacity over the best neighbouring cells; the star marks the best seed for the next team. Click a team card to select it.

Our 14 sites

How to use

  1. Capacity. Set the number of teams, hectares a team covers per day and field days per loop. The capacity box shows the wheat area one block must hold.
  2. Weights. Set what matters (logic below) and pick the greenness source: Sentinel-2 for disease targeting since 2015, MODIS for the 26-season history. The "IMP" layer shows the result before any team is placed.
  3. Spreading. Decide how much the next team should differ from the placed ones (α, ZW, zone rule).
  4. Place teams. "Place all teams automatically", or switch the click mode to "place the next team" and click a seed cell. Undo or clear to retry. The star always marks where the next team would go.
  5. Check each team. Click a team card: the zones covered, the "one block or two" test, the villages with their wheat area. "Sketch the loop route" gives the day-by-day village list; "Copy plan as text" exports everything.
  6. Inspect. In inspect mode, click any cell for all its values; switch overlays (rust foci, villages, towns, districts, sites) as needed.

Setting the weights

Each factor is scaled 0 to 1 across all cells (percentile rank, or a direct scale for the documented-rust factors), and the weights are normalised to sum to 1, so a weight is the share of the importance that factor receives. Only the ratios matter.
Default (balanced)
LF 0.20, SLF 0.05, DRD 0.15, DRV 0.10, RCP 0.10, NOV 0.15, WD 0.15, RA 0.10, UL 0: where greenness losses recur, where rust is documented, in environments we have not sampled, with enough wheat and access.
Disease detection first (yellow rust)
DRD 0.20, DRV 0.15, RCP 0.10, LF 0.20, SLF 0.05, NOV 0.10, WD 0.10, RA 0.10, with the Sentinel-2 source. Teams go to the documented foci belts and the cells that lose greenness there.
Transfer and training first (new environments)
NOV 0.30, LF 0.20, WD 0.15, DRD 0.10, DRV 0.05, RCP 0.05, RA 0.10, SLF 0.05. Teams go where the models have never seen the climate and soil.
Logistics first
Raise RA to 0.20 and WD to 0.20; keep the rest proportional. Blocks move to well-connected, dense wheat areas.
Rules of thumb
Keep SLF small, it repeats LF. Keep UL at 0 until the weather model explains something. RCP is a prior for districts without reports (the dry south-west), so raise it only if you want to test those; where DRD is dense it adds nothing. DRV depends on the gazetteer match, so treat village foci as supporting evidence, not a target by itself. After placing, check the zones covered, the environment distance between teams (above 1.5 means clearly different) and the village lists before accepting a plan.
Spreading
α 0.5 and ZW 0.5 by default. α towards 1 puts every team on the strongest signals even if they cluster; α towards 0 spreads the teams over different environments. ZW towards 1 makes "a zone no team has yet" the only meaning of different; towards 0 uses the continuous climate, soil and terrain distance. Keep the zone rule on for automatic placement unless one zone must take two teams.

How the planner decides

Importance of a cell
The weighted sum of the scaled factors. Shown as the IMP layer.
Next-team score
IMP × (α + (1 − α) × complementarity). Complementarity is (1 − ZW) × environment distance to the nearest placed team (capped at 4 units) + ZW × (1 if the cell's zone has no team yet, else 0). With no team placed it equals 1, so the first team is placed by importance alone.
Seed
The cell with the highest next-team score (the star), or the cell you click. Automatic placement first restricts the seed to zones without a team when the zone rule is on.
Growing the block
Starting from the seed, the block adds one cell at a time: of all cells touching the current block (including diagonally) that no other team holds, the one with the highest next-team score. It stops when the block's wheat reaches the loop capacity (cell wheat = 400 ha × winter-cereal fraction) or no free neighbour is left. The scores are frozen at placement, so later teams do not reshape earlier blocks. The result is one connected patch, 7 to 12 cells at the defaults, larger where wheat is sparse because the wheat total, not the area, is fixed. The growth is greedy: a better cell two steps away is not reached across low-scoring cells.
One block or two
For the selected team, the planner grows a half-capacity block at the seed, then a second half block at the best cell 25 to 180 km away, and compares the environment distance between the halves (above 1.5 = clearly different) with the travel cost (about half a field day per loop above 60 km, one above 120 km).
Routes
Nearest-neighbour order starting from the block's best-connected cell, cut into days by hectares per day; each day lists its villages with their approximate wheat area, documented rust villages first. A sketch for planning, not a road route.
Villages and wheat area
GeoNames villages inside the block's cells; the wheat area of a village is the winter-cereal area within 3 km that lies nearer to it than to any other listed village, an estimate.

Data sources

Greenness: MODIS MOD13Q1 (NASA) and Sentinel-2 (Copernicus, Cloud Score+) via Google Earth Engine. Weather: ERA5-Land (Copernicus Climate Change Service). Soil: SoilGrids (ISRIC). Terrain: Copernicus DEM. Winter-cereal extent: ESA WorldCereal 2021. Wheat fields in Punjab: Outbreak Labs field-boundary and crop maps from LISS-IV and Sentinel-2 (2025-26). Documented yellow rust: ICAR-IIWBR Wheat Crop Health Newsletters, Research Bulletin 35, annual reports, Mehtaensis, AICRP reports, and press, compiled by Outbreak Labs. Villages and towns: GeoNames (CC BY 4.0), with OpenStreetMap, Wikidata and census pages for places GeoNames lacks. Districts: geoBoundaries. Roads and basemap: © OpenStreetMap contributors. Internal planning tool of the Outbreak Labs ESA-funded wheat disease survey study; figures are estimates for planning, not validated measurements.

Glossary

LF, SLF, UL
Loss frequency: share of seasons in which the cell's mean greenness (NDVI, Nov 15 to Apr 15) was at least 0.04 below its own normal (about 10 %); severe: at least 0.08 (about 20 %); unexplained: the loss seasons a weather model fitted on 10 km blocks did not predict. The weather model explains none of the season levels so far, so UL equals LF and its weight is 0.
SPR, WST, WES
Spread: year-to-year standard deviation of the season deviation. Worst: the most negative season deviation, in NDVI units. Weather-explained share: the part of the block's season levels the weather model explains (leave-one-season-out, negative = nothing).
Greenness source
MODIS 250 m, 26 seasons 2000-2025, or Sentinel-2 100 m, 11 seasons 2015-2025 (clear-sky NDVI, Cloud Score+). Both give the same loss indicators.
DRD
Documented rust, district: published yellow rust records for the district (ICAR-IIWBR surveillance bulletins and papers, 2001-2025): number of reports, seasons with reports, median Cobb severity. Reports follow the surveyors, so zero means not reported, not absent.
DRV
Documented rust, villages: 239 georeferenced yellow rust foci at 172 villages (IIWBR crop-health newsletters, Research Bulletin 35, annual reports, press, 2000-2026): distance to the nearest focus and seasons with a focus within 10 km. Village coordinates from GeoNames, OpenStreetMap, census and Wikipedia pages.
DAD
Documented any disease, district: all wheat threats in the same compilation (512 Punjab and Haryana records, 2001-2025): fungal diseases and nematodes (yellow rust, Karnal bunt, black point, powdery mildew, leaf rust, head scab, spot blotch, smuts), insect and mite pests (aphids, pink stem borer, termites, brown wheat mite, armyworm), weeds (Phalaris minor, broadleaf weeds). Counts of reports and of seasons with reports per district; numeric incidence exists only for Karnal bunt and mostly at state level, so no prevalence percentages are mapped.
RCP
Rust climate proxy, 0 to 1: cool January nights near 5 °C, winter rain, humid air, higher ground. A climate prior, not observed disease.
NOV
Novelty: distance in standardised climate, soil and terrain space (12 variables) to the nearest of our 14 study sites; above about 2 is an environment no site covers.
AEZ
Agro-ecological zone: six k-means clusters of climate normals, soil and terrain at 1 km.
WD, WCF, FPK, MFS
Wheat density = WCF, the wheat area fraction of the cell: in Punjab the area of the fields our own boundary and crop map labels as wheat (2025-26 season, F1 0.88 against the field truth), in Haryana the WorldCereal 2021 winter-cereal fraction until our Haryana map exists. FPK wheat fields per km² and MFS median field size come from the Punjab field boundaries. The WorldCereal layer is kept for comparison.
RA
Road access: trunk, primary and secondary road length in the cell and distance to the nearest main road (OpenStreetMap; filled when the download completes).
IMP, NTS, α, ZW
Importance = weighted sum of the percentile-ranked factors above. Next-team score = IMP × (α + (1 − α) × complementarity), where complementarity blends environment distance to the placed teams with "zone no team has yet" by the ZW weight.
Villages and wheat ha
Villages are GeoNames populated places inside each cell. The wheat area per village is the winter-cereal area of the 250 m pixels nearer to that village than to any other, an approximation of the village's cultivated land; small hamlets may be missing.
Capacity and routes
Loop capacity = hectares per day × field days; blocks grow to that capacity. Routes are a nearest-neighbour sketch split into days by capacity; final routing on real roads.