Space Data Atlas

Challenges

Field Shift: Adapting Farms with NASA Data

Intermediate, Advanced. Arts & Multimedia, Earth Science, Software.

Build a decision-support tool that combines NASA Earth observations with local soil, crop and farmer priorities to help choose crop rotations that protect soil and conserve water.

Read the official challenge on spaceappschallenge.org

Local soil and crop data are not NASA products; plan on sourcing them from a partner or a public soil survey.

Your first hour

  1. Run the POWER starter for your farm's coordinates to get rainfall, temperature and sunlight.
  2. Add SMAP soil moisture and MODIS NDVI to compare dry and wet seasons.
  3. Interview or survey your target farmers to set the priorities your tool weighs.

Suggested datasets

In order of how useful they are likely to be. These are suggestions, not the official resource list.

NASA POWER Agroclimatology API

NASA LaRC POWER

No loginWorks in browser

Point and regional time series of temperature, precipitation, solar radiation, humidity and wind from satellite and model data, returned as JSON or CSV with no key. Ideal for a farm decision tool or a quick climate trend for any location.

endpoint https://power.larc.nasa.gov/api/temporal/daily/point

SMAP Enhanced L3 Radiometer Global Daily 9 km Soil Moisture (SPL3SMP_E) V006

NASA NSIDC DAAC

Works in browser

Daily global surface soil moisture at 9 km from the SMAP radiometer, available since 2015. Useful for judging field water stress and comparing seasons.

CMR short name SPL3SMP_E, concept ID C2938664763-NSIDC_CPRD, GIBS layer SMAP_L3_Passive_Enhanced_Day_Soil_Moisture

Harmonized Landsat Sentinel-2 (HLS) Landsat 30 m (HLSL30) v2.0

NASA LP DAAC

Works in browser

Landsat surface reflectance resampled to match Sentinel-2 on a common 30 m grid, so fields can be tracked every few days. The Sentinel-2 half is HLSS30; both come as Cloud Optimized GeoTIFFs.

CMR short name HLSL30, concept ID C2021957657-LPCLOUD, GIBS layer HLS_L30_Nadir_BRDF_Adjusted_Reflectance

MODIS/Terra Vegetation Indices 16-Day L3 Global 250m (MOD13Q1) V061

NASA LP DAAC

Works in browser

NDVI and EVI greenness composites every 16 days at 250 m since 2000. A standard way to compare crop vigor across seasons and spot rotation effects.

CMR short name MOD13Q1, concept ID C1748066515-LPCLOUD, GIBS layer MODIS_Terra_L3_NDVI_16Day

GPM IMERG Final Precipitation L3 Daily 0.1 deg (GPM_3IMERGDF) V07

NASA GES DISC

Works in browser

Daily global precipitation at about 10 km merged from the GPM satellite constellation and gauges, back to 2000. The Final run lags real time by a few months.

CMR short name GPM_3IMERGDF, concept ID C2723754864-GES_DISC

Starter code

List daily SMAP soil moisture filesPython
import earthaccess

# Daily 9 km SMAP soil moisture over Iowa farmland
results = earthaccess.search_data(
    short_name="SPL3SMP_E",
    bounding_box=(-96.6, 40.4, -90.1, 43.5),
    temporal=("2026-06-01", "2026-06-30"),
    count=5,
)
print(len(results), "daily files")
for g in results:
    print(g["umm"]["GranuleUR"])

# earthaccess.login()  # needed to download the HDF5 files
# earthaccess.download(results, "./smap")
Find low-cloud HLS scenes over a farmPython
import earthaccess

# 30 m HLS Landsat scenes over a single farm area, low cloud only
results = earthaccess.search_data(
    short_name="HLSL30",
    bounding_box=(-93.7, 41.9, -93.5, 42.1),  # near Ames, Iowa
    temporal=("2026-05-01", "2026-09-30"),
    cloud_cover=(0, 20),
    count=5,
)
print(len(results), "scenes")
for g in results:
    print(g["umm"]["GranuleUR"])

# Each scene has one Cloud Optimized GeoTIFF per band.
# earthaccess.login()
# earthaccess.download(results[:1], "./hls")
Season rainfall for one farmPython
import requests

# Daily temperature, rain and sunlight for one farm, no key needed
params = {
    "parameters": "T2M,PRECTOTCORR,ALLSKY_SFC_SW_DWN",
    "community": "AG",
    "latitude": 42.03, "longitude": -93.63,
    "start": "20250501", "end": "20250930",
    "format": "JSON",
}
r = requests.get("https://power.larc.nasa.gov/api/temporal/daily/point",
                 params=params, timeout=120)
r.raise_for_status()
data = r.json()["properties"]["parameter"]
rain = data["PRECTOTCORR"]
print("days:", len(rain))
print("season rainfall (mm):", round(sum(v for v in rain.values() if v >= 0), 1))
Daily temperature in the browserJavaScript
// Runs in the browser or Node 18+ (POWER sends CORS headers)
const params = new URLSearchParams({
  parameters: "T2M,PRECTOTCORR",
  community: "AG",
  latitude: "42.03",
  longitude: "-93.63",
  start: "20250701",
  end: "20250707",
  format: "JSON",
});
const res = await fetch(`https://power.larc.nasa.gov/api/temporal/daily/point?${params}`);
const json = await res.json();
const temps = json.properties.parameter.T2M;
for (const [day, t] of Object.entries(temps)) {
  console.log(day, `${t} C`);
}

Try a live search

Ask NASA's Common Metadata Repository for the five newest files in SMAP Enhanced L3 Radiometer Global Daily 9 km Soil Moisture (SPL3SMP_E) V006. This runs in your browser and needs no login.

Related 2025 winners

Matched by theme. Study how they scoped the problem.

NASA's 2025 winners announcement