Satellites observe farmland repeatedly throughout the growing season, capturing the rhythm of crop growth from planting through harvest. Think of it like taking a pulse: each satellite pass tells us how healthy the crops are at that moment.
In this module, we'll learn to track that rhythm using the Enhanced Vegetation Index (EVI) and interpret phenology curves that reveal what's growing, when it peaks, and how different crops behave over time.
Learning objectives
- Calculate EVI for crop monitoring using the
.expression()method - Build phenology curves from time series data using
ui.Chart.image.series() - Distinguish crop types by their temporal signatures
- Use the USDA Cropland Data Layer (CDL) to identify field-level crop types
Why it matters
Roughly 800 million people worldwide face food insecurity, and that number rises in years of drought or flooding. Here's where remote sensing gets powerful.
Satellite-based crop monitoring supports food security by tracking crop health across entire regions without setting foot in a field. Governments use these data for crop insurance programs. Agronomists use them for precision agriculture. Commodity traders use them to forecast yields.
The techniques in this module are the same ones powering the USDA's CropScape and NASA's GLAM systems. Let's learn how they work.
Key vocabulary
- EVI (Enhanced Vegetation Index)
- A vegetation index that improves on NDVI by correcting for atmospheric and soil background effects. It uses the blue band in addition to NIR and red.
- Phenology
- The study of recurring biological events in relation to climate and season, such as green-up, flowering, and leaf drop in crops.
- Time series
- A sequence of observations recorded at regular intervals over time. In remote sensing, this means repeated satellite images of the same location.
- Cropland Data Layer (CDL)
- A USDA-produced annual map of crop types across the United States, created from satellite imagery at 30-meter resolution.
- Growing season
- The period between planting and harvest when a crop is actively growing, visible as a rise and fall in vegetation index values.
Your First Phenology Chart in 60 Seconds
Let's get a win right away. This script charts MODIS EVI for an agricultural point in central Iowa across the 2023 growing season. We'll see the characteristic rise, peak, and decline of crop growth.
// Define an agricultural point in central Iowa
var point = ee.Geometry.Point([-93.5, 42.0]);
// Load MODIS 16-day EVI (1 km resolution)
var modisEVI = ee.ImageCollection('MODIS/061/MOD13A2')
.filterDate('2023-01-01', '2023-12-31')
.select('EVI');
// Scale EVI values (MODIS stores EVI * 10000)
var eviScaled = modisEVI.map(function(image) {
return image.multiply(0.0001)
.copyProperties(image, ['system:time_start']);
});
// Create the phenology chart
var chart = ui.Chart.image.series(eviScaled, point, ee.Reducer.mean(), 1000)
.setOptions({
title: 'MODIS EVI Phenology - Iowa Cropland (2023)',
vAxis: {title: 'EVI', viewWindow: {min: 0, max: 1}},
hAxis: {title: 'Date'},
lineWidth: 2,
pointSize: 4
});
print(chart);
Map.centerObject(point, 10);
What you should see
A line chart showing low EVI values (0.1 to 0.2) during winter, a rapid increase starting in May or June (green-up), a peak near 0.7 to 0.9 in July or August, and a sharp decline through September and October (senescence).
This "bell curve" shape is the phenological signature of a summer crop like corn or soybean. It's like a fingerprint, unique to each crop type.
Why Should We Care About Crop Monitoring?
Traditional crop surveys require field agents visiting farms, counting plants, and estimating yields. That approach is slow, expensive, and limited in coverage.
Satellites solve this by observing millions of hectares every few days. Here's what agricultural remote sensing supports:
- Food security: Organizations like the USDA and FAO monitor global crop conditions to anticipate shortages before they become crises.
- Precision agriculture: Farmers use vegetation maps to identify stressed areas within fields, enabling targeted irrigation and fertilization.
- Crop insurance: Insurance programs use satellite data to verify crop losses and process claims more efficiently than on-site inspection.
- Yield estimation: Peak vegetation greenness correlates with final yield, allowing harvest forecasts months before crops are harvested.
The key to all of these? Measuring how green crops are over time. That's exactly what vegetation indices like EVI give us.
EVI vs NDVI: What's the Difference?
We already know NDVI, which uses only the NIR and red bands. EVI takes it a step further by adding the blue band and applying correction coefficients that reduce two common problems in agricultural monitoring.
The EVI formula:
EVI = 2.5 * ((NIR - RED) / (NIR + 6*RED - 7.5*BLUE + 1))
Why does this matter for agriculture? Let's break it down:
- Soil background: In early growth stages, when crop cover is sparse, bare soil between rows strongly influences NDVI. Think of it like background noise in a recording. EVI's correction coefficients reduce this soil signal, giving us a cleaner measure of actual plant greenness.
- Saturation: NDVI approaches a maximum of about 0.9 even as vegetation continues to thicken. EVI remains more sensitive at high biomass levels, which is critical for distinguishing a good corn crop from an excellent one.
- Atmospheric effects: Haze, smoke, and aerosols scatter light and affect the red band. EVI's blue-band correction compensates for these atmospheric distortions.
Here's how we calculate EVI from Sentinel-2 imagery using .expression():
// Load Sentinel-2 SR and filter
var s2 = ee.ImageCollection('COPERNICUS/S2_SR_HARMONIZED')
.filterDate('2023-06-01', '2023-08-31')
.filterBounds(ee.Geometry.Point([-93.5, 42.0]))
.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 20))
.median();
// Scale reflectance values
var scaled = s2.divide(10000);
// Calculate EVI using .expression()
var evi = scaled.expression(
'2.5 * ((NIR - RED) / (NIR + 6 * RED - 7.5 * BLUE + 1))', {
'NIR': scaled.select('B8'),
'RED': scaled.select('B4'),
'BLUE': scaled.select('B2')
}).rename('EVI');
Map.addLayer(evi, {min: 0, max: 0.8, palette: ['brown', 'yellow', 'green']}, 'EVI');
Map.centerObject(ee.Geometry.Point([-93.5, 42.0]), 12);
Reading the Rhythm: Phenology Curves
A phenology curve plots a vegetation index over time for a specific location. Think of it as a crop's heartbeat across the year. The shape tells us everything about the crop's life cycle.
For a typical summer crop in the US Midwest, the curve follows a predictable pattern:
- Dormancy (January to April): Low EVI values because fields are bare or covered in crop residue.
- Green-up (May to June): EVI rises rapidly as crops emerge and begin growing.
- Peak (July to August): Maximum greenness, when the crop canopy is fully developed.
- Senescence (September to October): EVI declines as crops mature, dry down, and are harvested.
MODIS is ideal for phenology because it captures images every 16 days at a consistent scale. The MOD13A2 product provides pre-calculated EVI at 1 km resolution, so we don't need to compute it ourselves. Let's see it in action.
// Build a multi-year phenology comparison
var point = ee.Geometry.Point([-93.5, 42.0]);
// Load three years of MODIS EVI
var evi2021 = ee.ImageCollection('MODIS/061/MOD13A2')
.filterDate('2021-01-01', '2021-12-31').select('EVI');
var evi2022 = ee.ImageCollection('MODIS/061/MOD13A2')
.filterDate('2022-01-01', '2022-12-31').select('EVI');
var evi2023 = ee.ImageCollection('MODIS/061/MOD13A2')
.filterDate('2023-01-01', '2023-12-31').select('EVI');
// Chart one year as a starting point
var chart = ui.Chart.image.series(
evi2023.map(function(img) {
return img.multiply(0.0001).copyProperties(img, ['system:time_start']);
}), point, ee.Reducer.mean(), 1000)
.setOptions({
title: 'Crop Phenology - Central Iowa (2023)',
vAxis: {title: 'EVI'},
hAxis: {title: 'Date'},
lineWidth: 2, pointSize: 4
});
print(chart);
What's Growing in This Field? The Cropland Data Layer
Before we can compare crop phenology, we need to know what crop is actually growing in each field. The USDA Cropland Data Layer (CDL) answers that question for us.
Published annually at 30-meter resolution, the CDL classifies every agricultural pixel in the continental United States into specific crop types: corn, soybeans, wheat, cotton, rice, and dozens more. Let's load it up.
// Load the 2023 Cropland Data Layer
var cdl = ee.ImageCollection('USDA/NASS/CDL')
.filter(ee.Filter.eq('system:index', '2023'))
.first()
.select('cropland');
// CDL comes with its own color palette built in
Map.addLayer(cdl, {}, 'Cropland Data Layer 2023');
Map.centerObject(ee.Geometry.Point([-93.5, 42.0]), 11);
// Print the crop type at a specific point
var cropType = cdl.reduceRegion({
reducer: ee.Reducer.first(),
geometry: ee.Geometry.Point([-93.5, 42.0]),
scale: 30,
maxPixels: 1e9
});
print('Crop type code:', cropType);
Here are some common CDL class codes to know:
- 1: Corn
- 5: Soybeans
- 24: Winter wheat
- 2: Cotton
- 176: Grassland/Pasture
What you should see
A colorful map of crop types across Iowa, with bright yellow for corn, dark green for soybeans, and brown tones for harvested or bare fields. Zoom in to level 13 or higher and you'll see individual field boundaries pop into view.
Every Crop Has a Signature
Here's where it gets interesting. Different crops have different phenological signatures. Corn, soybeans, and winter wheat each trace a unique curve through the growing season. It's like a fingerprint: each crop tells its own story over time.
- Corn: Peaks early (mid-July), reaches the highest EVI values (0.8 to 0.9), and senesces rapidly in September.
- Soybeans: Peaks about two weeks later than corn (late July to early August), reaches slightly lower EVI values, and senesces more gradually.
- Winter wheat: Shows a completely different pattern. It greens up in early spring (March to April), peaks in May, and is harvested by late June, well before summer crops reach their maximum.
Let's put all three on the same chart and compare.
// Compare phenology for three crop types
// Use CDL to locate sample points for each crop
var cornPoint = ee.Geometry.Point([-93.50, 42.00]);
var soyPoint = ee.Geometry.Point([-93.45, 42.05]);
var wheatPoint = ee.Geometry.Point([-97.50, 38.80]); // Kansas for winter wheat
// Load MODIS EVI for 2023
var modisEVI = ee.ImageCollection('MODIS/061/MOD13A2')
.filterDate('2023-01-01', '2023-12-31')
.select('EVI')
.map(function(img) {
return img.multiply(0.0001).copyProperties(img, ['system:time_start']);
});
// Create a FeatureCollection of crop sample points
var cropPoints = ee.FeatureCollection([
ee.Feature(cornPoint, {label: 'Corn'}),
ee.Feature(soyPoint, {label: 'Soybean'}),
ee.Feature(wheatPoint, {label: 'Winter Wheat'})
]);
// Chart EVI for all three crop types
var chart = ui.Chart.image.seriesByRegion(
modisEVI, cropPoints, ee.Reducer.mean(), 'EVI', 1000, 'system:time_start', 'label')
.setOptions({
title: 'Crop Phenology Comparison (2023)',
vAxis: {title: 'EVI', viewWindow: {min: 0, max: 1}},
hAxis: {title: 'Date'},
lineWidth: 2
});
print(chart);
What you should see
Three distinct curves on the same chart. Winter wheat peaks first (May), followed by corn (mid-July), then soybeans (late July). The timing and shape differences are clear enough to distinguish these crops from their phenological fingerprints alone. Pretty cool, right?
Pro tips
- Use MODIS for phenology: Its 16-day revisit and pre-computed EVI product (
MOD13A2) make it the standard for time series analysis. Use Sentinel-2 or Landsat when you need field-level spatial detail. - Check CDL accuracy: The CDL is about 85 to 95% accurate for major crops. Verify your sample points by comparing CDL values with known field locations.
- Scale matters: MODIS pixels (1 km) often contain multiple fields. Choose points in the center of large, uniform fields to minimize mixing.
- Cloudy composites: MODIS EVI composites already apply quality filtering, but you may still see dips from residual cloud contamination. Look for the overall curve shape rather than individual data points.
Try it: Chart phenology for a Texas cotton field
Cotton is one of Texas's most important crops. Let's modify the code above to chart EVI phenology for a cotton-growing area in the Texas Panhandle.
// Texas cotton field (Lubbock area)
var cottonPoint = ee.Geometry.Point([-101.85, 33.55]);
// Load MODIS EVI for 2023
var modisEVI = ee.ImageCollection('MODIS/061/MOD13A2')
.filterDate('2023-01-01', '2023-12-31')
.select('EVI')
.map(function(img) {
return img.multiply(0.0001).copyProperties(img, ['system:time_start']);
});
// Chart the phenology
var chart = ui.Chart.image.series(modisEVI, cottonPoint, ee.Reducer.mean(), 1000)
.setOptions({
title: 'Cotton Phenology - Lubbock, TX (2023)',
vAxis: {title: 'EVI'},
hAxis: {title: 'Date'},
lineWidth: 2, pointSize: 4
});
print(chart);
Map.centerObject(cottonPoint, 11);
Compare the cotton phenology to corn and soybeans. Cotton typically greens up later (June) and peaks in August, with lower overall EVI values due to its sparser canopy. Every crop tells its own story.
Common mistakes
- Forgetting to scale MODIS EVI: Raw MODIS EVI values are stored multiplied by 10000. Always apply
.multiply(0.0001)to get values in the 0 to 1 range. This one trips everyone up at least once. - Confusing CDL year formats: CDL uses the
system:indexproperty as a string (e.g.,'2023'), not a date filter. Useee.Filter.eq('system:index', '2023'). - Placing sample points on field edges: Mixed pixels at field boundaries blend signals from adjacent fields or roads. Place your point well inside a field for clean results.
- Using NDVI when EVI is better: For dense crop canopies (corn, sugarcane), NDVI saturates and cannot distinguish moderate from high biomass. EVI remains sensitive where NDVI hits its ceiling.
Quick self-check
- What three bands does the EVI formula use, and why is the blue band included?
- How does the phenology curve for winter wheat differ from that of corn?
- Why is MODIS preferred over Landsat for phenology analysis?
- What CDL class code represents corn? What code represents soybeans?
- Name two advantages EVI has over NDVI for agricultural monitoring.
Going deeper
We've covered crop phenology monitoring at a foundational level. When you're ready for advanced techniques like sub-pixel crop area estimation, multi-temporal classification, and large-scale agricultural assessments, check out:
- EEFA Book - Chapter A1.1: Agricultural Environments
Next Steps
- Lab 25: Agricultural Monitoring - Build phenology curves and compare crop types hands-on
- Urban Analysis - Apply remote sensing techniques to built environments