Crop Zoning Atlas — data & methods

What a crop zone is — and what it is not

The national land inventory assigns every upazila a zone number for each of fifteen crops. Zones group upazilas into contiguous production belts: a low number is a core growing area, a high one is peripheral.

A zone is a planning decision. It records where the country intends a crop to be grown, taking in soil, climate, existing cropping patterns, infrastructure and policy. It is not a measurement of the ground. The same source row carries that separately, as five land suitability class areas in hectares — and those two things can disagree.

That disagreement is what this atlas is built to show. Everything else here exists to support it.

ZoneNameMeaning
1Core belt The primary production belt — the land this crop is planned around.
2Secondary belt Solidly inside the growing area, but not its centre.
3Marginal belt The edge of the belt; the crop is grown but is not the priority.
4Outside the belt Beyond the planned growing area for this crop.
5Not zoned Placed outside every belt for this crop.

The names above are generic on purpose. Zone definitions differ slightly from crop to crop, so naming them after specific regions ("the northern wheat belt") would be a claim the data does not make. What the data does state is the order, and that is what the colours encode.

Rolling upazilas into districts

A zone is a category. The average of "zone 1" and "zone 3" is not "zone 2" — it is nonsense. So a district's zone is the belt that most of its land sits in, weighted by hectares rather than by upazila count: a belt covering most of a district's farmland describes it better than one that happens to contain more small thanas.

Core-belt count: describing a place, not a crop

Every other figure here answers "what does this crop think of this place?". The core-belt count turns that around: how many of the fifteen crops treat this place as their core belt?

It is the one number on this site that cannot be seen by looking at crops one at a time. An upazila in the core belt of nine crops is doing something structurally different from one in the core belt of two — it is agricultural land the whole national plan leans on. That fact is invisible in fifteen separate files, and invisible in the Suitability Atlas too.

The count only becomes meaningful once several crops have loaded, which is why it fills in while you use the page and why the KPI card says how many crops it is counting over.

Does the zoning match the land?

To test a plan you need something independent to test it against. That something is the Crop Suitability Index (CSI) — the same 0–100 measure the Suitability Atlas is built on, computed by area-weighting the five land classes:

CSI  =  ( 100·Avery + 75·Asuit + 50·Amod + 25·Amarg + 0·Anone )  ÷  ΣA

It is deliberately unchanged between the two sites, so the same place carries the same number in both and they can be read side by side.

The comparison is made inside a zone, not across the country

A place's agreement figure is its CSI minus the national mean CSI of all land in the same zone, for the same crop:

Comparing against the national average instead would be a mistake, because zones are not meant to be equal — zone 4 land is expected to be poorer, and marking every zone 4 upazila as "below average" would say nothing at all. Asking instead "is this place better or worse than the others the planners put in the same category?" is the only version of the question this data can actually answer.

Differences under 8 CSI points are reported as "in line with its zone". Below that, the gap is ordinary spread within a belt rather than a mismatch worth acting on.

The baseline is recomputed per crop

Each crop's per-zone means are derived from whatever is loaded, for that crop, rather than being hard-coded. Zone definitions differ between crops — Jute's zone 2 is not Wheat's zone 2 — so a single fixed table would compare places against a baseline that does not describe them. It is built from upazila rows before any roll-up, because aggregating to district level first would compress the spread and flatten the very mismatches the measure exists to find.

Reading the "Does the zoning match the land?" card

That chart plots mean CSI for each zone, nationwide. If a zoning is well drawn, the bars step downward as the zone number rises, and the card title says so. A flat or rising profile means the belts are not tracking land quality for that crop — which is a finding, not an error. Zones legitimately encode things CSI knows nothing about: irrigation coverage, market access, processing capacity, and what else the same land is already growing.

A mismatch is a question, not a verdict. High-CSI land outside a belt may be excluded for good reasons — it may already be committed to a higher-value crop, or lie beyond the irrigation network. This atlas can tell you where plan and ground diverge. It cannot tell you which of them is right.

Where the data comes from

This atlas is a read-only view onto the same database the Crop Suitability Atlas writes. Both read one table, cs_suitability, holding one row per crop per upazila.

That is deliberate. The two sites are built from identical source rows, and two importers writing one table is exactly how the numbers on two dashboards quietly stop matching. There is therefore no upload panel and no seeder here: data is loaded once, through the Suitability Atlas admin, and both atlases read the result.

The badge in the top-right corner

Coverage

The inventory covers 466 upazilas. The boundary file has around 495, so roughly thirty are absent — city corporation thanas with no farmland to zone, plus a few hill and char thanas. They are drawn with a diagonal hatch rather than a colour, because a flat grey fill still reads as a category on a colour scale and the eye files it somewhere near the bottom of the ladder — which is wrong for land the zoning simply never covered.

Joining names to the map

The source files key on district and upazila text, transliterated before the 2018 renamings — so BARISAL has to reach Barishal, CHITTAGONG has to reach Chattogram, and a bare Borguna has to reach Barguna Sadar. The four-stage matcher that does this is documented in full on the Suitability Atlas, and the code here is a byte-for-byte twin of its browser-side matcher — if the two ever diverged, the same row would land on a different polygon depending on which site you opened.

On the database path the join has already happened at import time. On the CSV path it runs in your browser; type ZoneAtlasMatchReport() in the console to see the match rate per crop and every row that failed.

Reading the atlas

Press Esc to close the compare panel, or to return to the whole country. Clicking any region drills into it; the breadcrumb walks back out.

How this differs from the Suitability Atlas

Both sites read the same rows. Each row carries two different things, and each site leads with one of them.

Suitability AtlasZoning Atlas (this one)
Leads withFive land class areas → CSIThe crop zone
AnswersHow good is this land for this crop?Which belt is this place in, and does the belt fit the land?
Map defaultCSI, a fixed 0–100 ladderZone, a categorical belt
Unique measureBest-crop leaderboard for a placeCore-belt count, and zone–land agreement
Writes dataYes — the admin panel lives thereNo — read-only

Administrative boundaries are the same division / district / upazila GeoJSON used by the BDHS Health Atlas and the Bangladesh Air Quality Atlas, keyed on the 8-digit GEO_CODE (2 digits division + 2 district + 2 upazila). Sharing them is deliberate: a place picked in one atlas is exactly the same place in the others.