Space Data Atlas

Challenges

The Earth Information Jukebox

Beginner/Youth, Intermediate. Arts & Multimedia, Earth Science, Software.

Pair visualizations from NASA's Earth Information Center with sound generated in real time, so Earth science reaches people through hearing as well as sight.

Read the official challenge on spaceappschallenge.org

Your first hour

  1. Browse Earth.gov and the SVS to pick two or three visualizations with a clear story.
  2. Find a numeric series behind each one (GISTEMP, POWER, or GIBS layers) to drive the sound.
  3. Map one variable to pitch or tempo and test it with someone who has not seen the visuals.

Suggested datasets

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

NASA Scientific Visualization Studio (SVS) API

NASA Goddard SVS

No login

Search and page APIs for thousands of NASA science visualizations, with links to frames, movies and data-driven animations of sea ice, temperature, carbon and more. A rich source of visuals to pair with sound.

endpoint https://svs.gsfc.nasa.gov/api/search/

Earth Information Center (Earth.gov)

U.S. Earth Information Center

No loginWorks in browser

Earth.gov hosts the Earth Information Center, which brings together federal Earth science data and stories on climate, water, fire, sea level and more. Use it to pick the themes and visuals a sonification should follow.

endpoint https://earth.gov/

Global Imagery Browse Services (GIBS)

NASA ESDIS

No loginWorks in browser

Ready-made map tiles for more than 1,000 NASA Earth layers (true color, fires, soil moisture, precipitation, night lights and more) served over WMTS with no login. The fastest way to put NASA Earth imagery on a web map or in a visualization.

GIBS layer MODIS_Terra_CorrectedReflectance_TrueColor, endpoint https://gibs.earthdata.nasa.gov/wmts/epsg4326/best/1.0.0/WMTSCapabilities.xml

GISS Surface Temperature Analysis (GISTEMP v4)

NASA GISS

No login

Monthly global and regional surface temperature anomalies since 1880, downloadable as small CSV tables. A clean starting series for trend and significance testing.

endpoint https://data.giss.nasa.gov/gistemp/tabledata_v4/GLB.Ts+dSST.csv

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

Starter code

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`);
}
Global temperature trend per decadePython
import io
import numpy as np
import pandas as pd
import requests

url = "https://data.giss.nasa.gov/gistemp/tabledata_v4/GLB.Ts+dSST.csv"
text = requests.get(url, timeout=60).text
df = pd.read_csv(io.StringIO(text), skiprows=1, na_values="***")
df = df[["Year", "J-D"]].dropna()  # annual global anomaly, deg C

# Least-squares trend since 1980
recent = df[df["Year"] >= 1980]
slope, intercept = np.polyfit(recent["Year"], recent["J-D"], 1)
print("years:", len(df), "| latest full year:", int(df["Year"].iloc[-1]))
print(f"trend since 1980: {slope * 10:.3f} C per decade")
# For significance, use scipy.stats.linregress (p-value) or pymannkendall.
Find NASA visualizations by topicPython
import requests

# Find NASA visualizations to pair with sound
r = requests.get("https://svs.gsfc.nasa.gov/api/search/",
                 params={"search": "sea surface temperature", "limit": 5}, timeout=60)
r.raise_for_status()
data = r.json()
print("matches:", data["count"])
for item in data["results"]:
    print(item["id"], item["release_date"][:10], "|", item["title"])
    # Full media list for one entry: https://svs.gsfc.nasa.gov/api/<id>
Fetch a GIBS true-color tileJavaScript
// Build a GIBS WMTS tile URL (no key, CORS enabled) for a given day.
// Layer names come from the GIBS capabilities document.
const layer = "MODIS_Terra_CorrectedReflectance_TrueColor";
const date = "2026-10-01";
const [zoom, row, col] = [2, 1, 2];
const url = `https://gibs.earthdata.nasa.gov/wmts/epsg4326/best/${layer}` +
  `/default/${date}/250m/${zoom}/${row}/${col}.jpg`;

const res = await fetch(url);
console.log(res.status, res.headers.get("content-type"), url);
// In a map library (Leaflet, OpenLayers) use the same template with
// {z}/{y}/{x}. Fire layers such as VIIRS_SNPP_Thermal_Anomalies_375m_All
// are vector tiles (.mvt, 500m matrix set); check the capabilities XML.

Related 2025 winners

Matched by theme. Study how they scoped the problem.

NASA's 2025 winners announcement