πŸ›°οΈ AS26 Day 6 Afternoon Lab

Connect Live Satellite Data
to Your App

By the end of this two-hour lab, your AI-EO application will ingest real Sentinel-2 imagery, compute vegetation indices on the fly, and let your AI assistant interpret the results for users.

πŸ“… Monday, June 15, 2026 πŸ•‘ 14:00 - 16:00 πŸ“ ISU, Strasbourg πŸ§ͺ Hands-on Lab
🎯 Lab Overview

Session Goal

From static tiles to live satellite intelligence

Your current app shows a basemap. That is like having a telescope pointed at the ceiling. Today we point it at Earth, live.

1

Display Real Imagery

Add Sentinel-2 true-color, false-color, and NDVI layers to your Leaflet map with live WMS tiles.

2

Query On-Demand Data

Use the Copernicus Process API to request custom analysis (any band combination, any date range, any area).

3

Connect AI to Satellite Data

Give your Gemini-powered assistant a "satellite analysis" tool so it can fetch and interpret real Earth observation data.

ℹ️ Prerequisites
You should already have a working Leaflet map and a Gemini chat interface from the Day 3 and Day 5 labs. If you are behind, start from the provided template in /templates/day6-starter/.
πŸ›€οΈ Lab Overview

Three Integration Paths

Choose the level of control you need

πŸ—ΊοΈ

Sentinel Hub WMS

Simplest

Add satellite layers as standard WMS tiles. Works like any other Leaflet tile layer. Perfect for visualization.

βš™οΈ

Process API

Most Flexible

Write custom evalscripts (server-side JavaScript) to compute any index, apply any color ramp, filter by cloud cover.

🌍

GEE REST API

Most Powerful

Access Google Earth Engine's entire catalog and computation engine via REST. Best for time-series analysis at scale.

βœ… Recommendation
Start with Path 1 to see results immediately. Then upgrade specific features to Path 2 as your analysis needs grow. Path 3 is optional for teams that want maximum analytical power.
FeatureWMSProcess APIGEE REST
Setup time~10 min~30 min~45 min
Auth requiredAPI keyOAuth2 tokenService account
Custom analysisLimited (presets)Full (evalscript)Full (Python/JS)
Time-seriesManual date paramsBuilt-inNative
Data catalogSentinel onlySentinel + Landsat1,000+ datasets
🌍 Path 0: Zero-Auth Tiles

Zero-Auth Public Satellite Tiles

Add instant, free global Sentinel-2 imagery with no configuration

Before configuring complex APIs, students can add beautiful, cloud-free global Sentinel-2 imagery to Leaflet in under 60 seconds. This uses public WMTS tiles served by EOxCloudless, a reliable service that requires zero authentication or API tokens.

JavaScript (index.html)
// EOxCloudless Sentinel-2 Cloudless global composite
const s2cloudless = L.tileLayer(
    'https://tiles.maps.eox.at/wmts/1.0.0/s2cloudless-2023_3857/default/GoogleMapsCompatible/{z}/{y}/{x}.jpeg', 
    {
        attribution: 'Sentinel-2 cloudless by EOX IT Services GmbH (Contains modified Copernicus Sentinel data)',
        maxZoom: 14,
        minZoom: 1
    }
);

// Add it to your Leaflet map
s2cloudless.addTo(map);
πŸš€ Advantages of Path 0
  • Instant Setup: No Copernicus registration, no API keys, and no waiting.
  • Zero Latency: Globally pre-rendered composites load instantly.
  • Robust Fallback: If a student's Copernicus credentials expire, the app remains fully functional.
⚠️ Limitations
  • Static annual composite (2023).
  • Cannot filter by custom dates or cloud cover.
  • Pre-rendered as natural RGB (cannot compute custom NDVI indices dynamically).
πŸ—ΊοΈ Path 1 / Step 1

Setting Up Sentinel Hub

Create a configuration for WMS access

Sentinel Hub (by Sinergise, now part of the Copernicus Data Space Ecosystem) provides a standard OGC WMS endpoint that serves pre-rendered satellite imagery tiles. Your Leaflet map can consume these tiles just like OpenStreetMap tiles.1

1

Register at Copernicus Data Space

Go to dataspace.copernicus.eu and create a free account. You get 30,000 free processing units per month.

2

Create a New Configuration

In the Dashboard, go to "Configuration Utility" and create a new configuration. Select Sentinel-2 L2A as the data source.

3

Add Layers

Add three layers: TRUE-COLOR-S2-L2A, NDVI, and FALSE-COLOR. Each uses a predefined evalscript that Sentinel Hub provides.

4

Copy Your Instance ID

Your instance ID is the unique string in your WMS URL. It looks like: https://sh.dataspace.copernicus.eu/ogc/wms/YOUR-INSTANCE-ID

⚠️ Security Note
Never commit your Instance ID or OAuth credentials to a public GitHub repository. Use environment variables or a .env file excluded by .gitignore.
1 Sentinel Hub OGC API documentation: docs.sentinel-hub.com/api/latest/api/ogc/
πŸ—ΊοΈ Path 1 / Step 2

Adding WMS to Your Leaflet Map

Three lines of code to see real satellite data

Leaflet's built-in L.tileLayer.wms() method speaks the OGC Web Map Service protocol natively. All you need is the endpoint URL and the layer name.

JavaScript map.js
// Your Sentinel Hub WMS endpoint
const SH_URL = 'https://sh.dataspace.copernicus.eu/ogc/wms/YOUR-INSTANCE-ID';

// Add a true-color Sentinel-2 layer
const trueColor = L.tileLayer.wms(SH_URL, {
    layers: 'TRUE-COLOR-S2-L2A',
    format: 'image/png',
    transparent: true,
    maxcc: 20,          // max cloud cover 20%
    time: '2026-06-01/2026-06-15',
    attribution: 'Sentinel-2 | Copernicus'
});

trueColor.addTo(map);

The maxcc parameter filters scenes by cloud cover percentage. The time parameter accepts ISO 8601 date ranges. Sentinel Hub automatically mosaics multiple scenes within your time window and returns the least-cloudy composite.

ℹ️ Coordinate Reference System
WMS layers default to EPSG:3857 (Web Mercator), which matches Leaflet's default. No reprojection needed.
πŸ’» Path 1 / Code

Complete Layer Switcher

Switch between true-color, NDVI, and false-color on the fly

JavaScript layers.js
// ── Sentinel Hub WMS base URL ──
const SH_URL = 'https://sh.dataspace.copernicus.eu/ogc/wms/YOUR-INSTANCE-ID';

// ── Shared WMS options ──
const sharedOpts = {
    format:      'image/png',
    transparent: true,
    maxcc:       20,
    time:        '2026-06-01/2026-06-15',
    attribution: 'Sentinel-2 L2A | Copernicus'
};

// ── Define overlay layers ──
const layers = {
    'True Color':  L.tileLayer.wms(SH_URL, { ...sharedOpts, layers: 'TRUE-COLOR-S2-L2A' }),
    'NDVI':        L.tileLayer.wms(SH_URL, { ...sharedOpts, layers: 'NDVI' }),
    'False Color': L.tileLayer.wms(SH_URL, { ...sharedOpts, layers: 'FALSE-COLOR' })
};

// ── Add the layer control ──
L.control.layers(null, layers).addTo(map);

// ── Start with true color visible ──
layers['True Color'].addTo(map);

The first argument to L.control.layers() is for base layers (radio buttons); the second is for overlays (checkboxes). We pass null for base layers because we keep the OSM basemap separate. Users can toggle satellite overlays on and off independently.

βœ… Try it now
Copy this code into your project. Replace YOUR-INSTANCE-ID with the ID from your Sentinel Hub dashboard. Pan to your team's study area and toggle between layers.
🌈 Path 1 / Concept

Band Combinations Explained

Why different layers reveal different features

LayerBands UsedWhat It ShowsUse Case
True Color B04 (Red), B03 (Green), B02 (Blue) Natural colors as the human eye sees them Orientation, urban areas, water bodies
False Color B08 (NIR), B04 (Red), B03 (Green) Vegetation appears bright red Vegetation mapping, crop health assessment
NDVI (B08 - B04) / (B08 + B04) Vegetation index: green = healthy, brown = stressed Agriculture, deforestation, drought monitoring
SWIR B12, B8A, B04 Moisture content highlighted Burn scars, soil moisture, geology
NDWI (B03 - B08) / (B03 + B08) Water bodies appear bright Flood mapping, water resource monitoring

Each "layer" in Sentinel Hub is really a server-side rendering script (called an evalscript) that selects specific bands, applies arithmetic, and maps the result to RGB values. WMS delivers the rendered output as standard image tiles.2

ℹ️ Key Insight
Sentinel-2 has 13 bands spanning visible, NIR, and SWIR wavelengths at 10m, 20m, and 60m resolution. By choosing which bands to display, you control what physical property becomes visible.
2 Sentinel-2 band specifications: ESA (2015). Sentinel-2 User Handbook. Issue 1, Rev. 2, ESA Standard Document. Available at: sentinels.copernicus.eu
πŸ• Path 1 / Time

Adding the Time Dimension

Let users browse historical satellite imagery by date

A static satellite layer is already useful, but the real power of EO comes from temporal comparison. Adding a date picker lets users scrub through time and observe change.

JavaScript time-control.js
// ── Date picker for satellite imagery ──
const datePicker = document.getElementById('sat-date');

datePicker.addEventListener('change', (e) => {
    const selectedDate = e.target.value; // e.g. "2026-06-10"

    // Create a 5-day window around the selected date
    const d = new Date(selectedDate);
    const from = new Date(d - 5 * 86400000).toISOString().slice(0, 10);
    const to = selectedDate;

    // Update WMS time parameter on all layers
    Object.values(layers).forEach(layer => {
        layer.setParams({ time: `${from}/${to}` });
    });
});

// HTML: <input type="date" id="sat-date" value="2026-06-15" />

The setParams() method on a Leaflet WMS layer updates the query parameters and automatically reloads the tiles. The 5-day window ensures we find a cloud-free acquisition even in cloudy regions.

⚠️ Sentinel-2 Revisit
Sentinel-2A and 2B together revisit every location every 5 days at the equator (and every 2-3 days at higher latitudes like Strasbourg). If your date range is too narrow, you may get blank tiles.
πŸ” Path 2 / Step 1

OAuth2 Authentication

Getting a token from the Copernicus Data Space

The Process API requires OAuth2 client credentials authentication. Unlike the WMS instance ID (which is embedded in the URL), OAuth2 uses a proper token exchange flow that is more secure and provides fine-grained access control.3

How OAuth2 Client Credentials Work

  1. You register an OAuth client in the Copernicus dashboard (Settings > OAuth clients)
  2. You receive a Client ID and Client Secret
  3. Your backend exchanges these for a short-lived access token (valid ~10 minutes)
  4. Every Process API request includes the token in its Authorization header
JavaScript auth.js (server-side only!)
async function getAccessToken() {
    const response = await fetch(
        'https://identity.dataspace.copernicus.eu/auth/realms/CDSE/protocol/openid-connect/token',
        {
            method: 'POST',
            headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
            body: new URLSearchParams({
                grant_type:    'client_credentials',
                client_id:     process.env.SH_CLIENT_ID,
                client_secret: process.env.SH_CLIENT_SECRET
            })
        }
    );
    const data = await response.json();
    return data.access_token; // valid for ~600 seconds
}
⚠️ Critical: Server-Side Only
Never call the token endpoint from browser JavaScript. Your client secret would be visible in DevTools. Use a server-side proxy (Express, Firebase Functions, or similar)
πŸ’‘
Need a secure backend? Use our Firebase Cloud Function Proxy Template to securely exchange your Copernicus OAuth credentials without exposing them in your frontend JS.
to obtain the token and relay it to the frontend.
3 Copernicus Data Space Ecosystem, "Authentication," documentation.dataspace.copernicus.eu
βš™οΈ Path 2 / Step 2

Making Process API Requests

Anatomy of a Sentinel Hub Process API call

The Process API is a single POST endpoint that accepts a JSON body with three main sections: input (what data and where), evalscript (what computation to run), and output (what format to return).4

JSON process-request-anatomy.json
{
  "input": {
    "bounds": {
      "bbox": [7.74, 48.57, 7.78, 48.59],  // Strasbourg area
      "properties": { "crs": "http://www.opengis.net/def/crs/EPSG/0/4326" }
    },
    "data": [{
      "type": "sentinel-2-l2a",
      "dataFilter": {
        "timeRange": { "from": "2026-06-01T00:00:00Z", "to": "2026-06-15T00:00:00Z" },
        "maxCloudCoverage": 30
      }
    }]
  },
  "evalscript": "// ... your custom script (next slide)",
  "output": {
    "width": 512,
    "height": 512,
    "responses": [{ "identifier": "default", "format": { "type": "image/png" } }]
  }
}

Key Parameters

  • bbox: Bounding box in [west, south, east, north] order (WGS84)
  • timeRange: ISO 8601 date range; Sentinel Hub selects the best scene(s)
  • maxCloudCoverage: Percentage filter (0 to 100)
  • width/height: Output image dimensions in pixels (max 2500x2500)
4 Sentinel Hub Process API reference: docs.sentinel-hub.com/api/latest/api/process/
πŸ“ Path 2 / Evalscript

Custom NDVI Evalscript

Server-side band math with visualization

An evalscript is a small JavaScript program that runs on Sentinel Hub's servers for each pixel. It receives raw band values and returns RGB (or any custom output). This means all computation happens in the cloud; your app receives only the rendered result.

JavaScript (Evalscript V3) ndvi-evalscript.js
//VERSION=3
function setup() {
    return {
        input:  ["B04", "B08", "dataMask"],
        output: { bands: 4 }  // RGBA
    };
}

function evaluatePixel(sample) {
    let ndvi = (sample.B08 - sample.B04) / (sample.B08 + sample.B04);

    // Color ramp: brown (-1 to 0) -> yellow (0 to 0.3) -> green (0.3 to 1)
    if (ndvi < 0)    return [0.5, 0.2, 0.1, sample.dataMask];
    if (ndvi < 0.1)  return [0.75, 0.6, 0.2, sample.dataMask];
    if (ndvi < 0.3)  return [0.9, 0.9, 0.2, sample.dataMask];
    if (ndvi < 0.5)  return [0.4, 0.8, 0.2, sample.dataMask];
    return [0.1, 0.6, 0.1, sample.dataMask];  // deep green
}

How It Works

  • The setup() function declares which bands to request and the output format
  • evaluatePixel() runs for every pixel; sample.B08 is the NIR reflectance value (0 to 1)
  • The dataMask band is 0 for no-data pixels (outside the scene footprint) and 1 for valid pixels
  • Return values are [R, G, B, Alpha] in the range 0 to 1
ℹ️ Evalscript Playground
Use the EO Browser custom script editor to test evalscripts interactively before integrating them into your app.
πŸ“Š Path 2 / Analysis

NDVI Time-Series Analysis

Track vegetation change over six months

A single NDVI image is a snapshot. A time series reveals the story: seasonal growth cycles, drought onset, harvest dates, or urban expansion eating into farmland. The Sentinel Hub Statistical API provides aggregated values over an area across multiple dates.5

What You Can Extract

MetricWhat It ShowsExample Signal
Mean NDVIAverage greenness of the area0.25 in winter, 0.75 in summer
NDVI TrendDirection of change over timeDeclining = drought or deforestation
PhenologySeasonal growth curve shapeDouble peak = two crop cycles/year
AnomaliesDeviation from historical averageSudden drop = fire, flood, or harvest

The Statistical API Approach

Instead of downloading a full image for each date (expensive), the Statistical API computes aggregate statistics (mean, median, std, percentiles) server-side and returns only the numbers. For a 6-month time series with biweekly sampling, that is 12 small JSON responses instead of 12 high-resolution images.

βœ… Why This Matters for AI
Your AI assistant cannot "see" a raster image, but it can easily interpret a JSON array of NDVI values: [0.32, 0.41, 0.55, 0.71, 0.68, 0.45]. Time-series data is the bridge between satellite imagery and language-based AI reasoning.
5 Sentinel Hub Statistical API: docs.sentinel-hub.com/api/latest/api/statistical/
πŸ’» Path 2 / Code

Fetching NDVI Time-Series Data

Complete function to get NDVI values for any location

JavaScript satellite-api.js
// ── NDVI evalscript that returns raw values ──
const ndviScript = `
//VERSION=3
function setup() {
  return { input: ["B04","B08","dataMask"], output: { bands: 1, sampleType: "FLOAT32" } };
}
function evaluatePixel(s) {
  if (s.dataMask === 0) return [-9999];
  return [(s.B08 - s.B04) / (s.B08 + s.B04)];
}
`;

// ── Fetch NDVI for a location over a date range ──
async function getNDVIForLocation(lat, lng, fromDate, toDate) {
    const delta = 0.01;  // ~1 km box
    const bbox = [lng - delta, lat - delta, lng + delta, lat + delta];

    const token = await getAccessToken();

    const response = await fetch(
        'https://sh.dataspace.copernicus.eu/api/v1/process',
        {
            method: 'POST',
            headers: {
                'Authorization': `Bearer ${token}`,
                'Content-Type': 'application/json'
            },
            body: JSON.stringify({
                input: {
                    bounds: { bbox, properties: { crs: 'http://www.opengis.net/def/crs/EPSG/0/4326' } },
                    data: [{
                        type: 'sentinel-2-l2a',
                        dataFilter: {
                            timeRange: { from: fromDate, to: toDate },
                            maxCloudCoverage: 30
                        }
                    }]
                },
                evalscript: ndviScript,
                output: { width: 64, height: 64,
                    responses: [{ identifier: 'default',
                        format: { type: 'image/tiff' } }] }
            })
        }
    );

    return response;
}
ℹ️ Statistical API Alternative
For production use, prefer the Statistical API (/api/v1/statistics) which returns aggregated JSON values directly, avoiding the need to parse raster data in the browser.
🧠 Knowledge Check

Quiz: Process API Authentication

1. Why does the Process API require OAuth2 authentication instead of a simple API key like WMS?
2. Where should the OAuth2 token exchange happen in a web application?
πŸ€– AI Integration

Teaching Your AI to Request Satellite Data

Bridging natural language and the Process API via function calling

In Day 5, you gave your Gemini assistant tools like panMap() and addMarker(). Now we add a new category of tools: satellite data retrieval. When a user asks "How green is this area?", the AI can autonomously call a function to fetch NDVI data, receive numeric values, and respond with a natural-language interpretation.6

The Concept: AI as an EO Analyst

πŸ‘€ User asks a question
β†’
πŸ€– AI decides which tool to call
β†’
πŸ›°οΈ App fetches satellite data
β†’
πŸ€– AI interprets the values
β†’
πŸ’¬ User gets a plain-language answer

What Makes This Powerful

  • No EO expertise needed by the user: they ask in natural language; the AI handles band math and API calls
  • Grounded responses: the AI's answer is backed by real, timestamped satellite measurements (not training data)
  • Composable: the AI can chain satellite tools with map tools (fetch NDVI, then highlight low-NDVI zones on the map)
ℹ️ Gemini Function Calling
This uses the same tools array in the Gemini API request you set up on Day 5. You are simply adding new function declarations. See Gemini Function Calling docs.
6 Google, "Function calling," Gemini API Documentation, 2024. ai.google.dev
πŸ’» AI Tool Declaration

The analyzeSatelliteImage Tool

Declaring and implementing the satellite analysis function

JavaScript ai-tools.js
// ── Tool declaration for Gemini ──
const satelliteTool = {
    name: 'analyzeSatelliteImage',
    description: `Analyzes satellite imagery for a location. Returns
        vegetation index (NDVI), land cover type, and temporal trends.
        Use when the user asks about greenness, vegetation health,
        land use, or environmental conditions at a specific place.`,
    parameters: {
        type: 'object',
        properties: {
            lat:       { type: 'number', description: 'Latitude in decimal degrees' },
            lng:       { type: 'number', description: 'Longitude in decimal degrees' },
            analysis:  { type: 'string', enum: ['ndvi', 'truecolor', 'moisture'] },
            dateRange: {
                type: 'object',
                properties: {
                    from: { type: 'string', description: 'ISO date' },
                    to:   { type: 'string', description: 'ISO date' }
                }
            }
        },
        required: ['lat', 'lng', 'analysis']
    }
};

// ── Implementation (called when AI invokes the tool) ──
async function handleSatelliteAnalysis({ lat, lng, analysis, dateRange }) {
    const from = dateRange?.from || getDefaultFrom();
    const to   = dateRange?.to   || getDefaultTo();

    const ndviData = await getNDVIForLocation(lat, lng, from, to);
    const avgNDVI  = computeMeanNDVI(ndviData);

    return {
        location:  { lat, lng },
        dateRange: { from, to },
        meanNDVI:  avgNDVI.toFixed(3),
        interpretation: interpretNDVI(avgNDVI),
        cloudCover: ndviData.cloudPercentage
    };
}
βœ… Design Pattern
Return structured data (not prose) from your tool. Let the AI model generate the natural-language interpretation. This keeps the tool reusable and the AI response contextual.
πŸ”„ AI Workflow

Example: "How Green Is Central Park?"

Tracing a user query through the full AI-satellite pipeline

1

User types: "How green is Central Park right now?"

The message goes to Gemini along with the list of available tools.

2

Gemini responds with a function call

analyzeSatelliteImage({ lat: 40.7829, lng: -73.9654, analysis: "ndvi", dateRange: { from: "2026-06-01", to: "2026-06-15" } })

3

Your app calls the Sentinel Hub Process API

Fetches NDVI data for a ~2 km box around Central Park. Returns: { meanNDVI: 0.72, cloudCover: 8 }

4

Result sent back to Gemini

The function result is injected into the conversation as a tool response message.

5

Gemini generates a natural-language answer

"Central Park is very green right now! The average NDVI is 0.72 (based on Sentinel-2 data from June 1-15, 2026), indicating healthy, dense vegetation. Cloud cover was only 8%, so this is a reliable measurement."

Multimodal Enhancement

For even richer analysis, you can capture a screenshot of the map view (using html2canvas or the Leaflet image export plugin) and send it to Gemini Vision alongside the NDVI values. The AI can then describe spatial patterns it observes in the imagery: "The northern section of the park shows higher NDVI than the southern section near Columbus Circle."

🧠 Knowledge Check

Quiz: AI + Satellite Integration

3. When your AI tool returns satellite data to Gemini, what format should the result be in?
πŸ“‹ Summary

Summary of Big Ideas

1

Satellite data is just another tile layer

WMS integration takes ~10 minutes. If your app has a Leaflet map, you can show live Sentinel-2 imagery today.

2

Evalscripts move computation to the cloud

Custom band math runs on Sentinel Hub's servers. Your browser receives only the rendered result, keeping the app lightweight.

3

Time-series data bridges imagery and AI

An AI model cannot interpret a raw raster, but it excels at reasoning over a JSON array of NDVI values with timestamps.

4

Function calling makes AI a satellite analyst

By declaring satellite tools in the Gemini API, users can query Earth observation data in plain English.

5

Security is non-negotiable

OAuth2 tokens and API secrets must stay server-side. Never expose credentials in browser-facing code.

βœ… The Takeaway
Connecting satellite data to AI is not a futuristic concept. With Sentinel Hub's Process API and Gemini's function calling, a student team can build a working "ask the satellite" feature in a single afternoon.
πŸ“– Reference

Glossary of Key Terms

OAuth2
An authorization framework that lets applications obtain limited access to resources on behalf of a user, using short-lived tokens instead of sharing passwords.
Process API
Sentinel Hub's REST endpoint for custom Earth observation analysis. Accepts a bounding box, time range, and evalscript; returns rendered imagery or raw values.
Evalscript
A server-side JavaScript program (V3 syntax) that runs per-pixel on Sentinel Hub's infrastructure. It specifies which bands to request and how to compute the output.
NDVI Time Series
A sequence of NDVI values sampled at regular intervals (e.g., biweekly) for the same location. Reveals vegetation phenology, drought onset, and land-use change.
Cloud Cover (maxcc)
The percentage of a satellite scene obscured by clouds. WMS and Process API accept a maxCloudCoverage filter to exclude overly cloudy scenes automatically.
Band Combination
A selection of spectral bands mapped to the RGB display channels. Different combinations highlight different surface properties (vegetation, water, soil).
WMS (Web Map Service)
An OGC standard protocol for serving georeferenced map images over HTTP. The client specifies bounding box, CRS, and layers; the server returns a rendered image.
Function Calling
An LLM capability where the model outputs structured tool invocations instead of plain text. The application executes the function and returns results to the model.
Statistical API
A Sentinel Hub endpoint that computes aggregate statistics (mean, median, percentiles) over an area and time range, returning lightweight JSON instead of full rasters.
πŸ“š References

References & Resources

[1] Sentinel Hub OGC API Documentation. Sinergise / Copernicus Data Space Ecosystem. docs.sentinel-hub.com/api/latest/api/ogc/
[2] European Space Agency (2015). Sentinel-2 User Handbook. ESA Standard Document, Issue 1, Rev. 2. sentinels.copernicus.eu
[3] Copernicus Data Space Ecosystem, "Authentication." documentation.dataspace.copernicus.eu
[4] Sentinel Hub Process API Reference. docs.sentinel-hub.com/api/latest/api/process/
[5] Sentinel Hub Statistical API. docs.sentinel-hub.com/api/latest/api/statistical/
[6] Google (2024). "Function calling," Gemini API Documentation. ai.google.dev/gemini-api/docs/function-calling
[7] Rouse, J. W., Haas, R. H., Schell, J. A., & Deering, D. W. (1974). "Monitoring vegetation systems in the Great Plains with ERTS." In Proceedings of the Third ERTS-1 Symposium, NASA SP-351, Vol. I, pp. 309-317. Washington, D.C.: NASA.
[8] Gorelick, N. et al. (2017). "Google Earth Engine: Planetary-scale geospatial analysis for everyone." Remote Sensing of Environment, 202, 18-27. DOI: 10.1016/j.rse.2017.06.031

External Resources

πŸš€ Lab Challenge

Your Mission: Ship a Satellite Feature

🎯 End-of-Session Challenge

Before 16:00 today, implement at least one satellite data integration in your team's project. Choose the path that matches your current progress.

πŸ₯‰

Bronze

Path 1: WMS

Add a Sentinel-2 true-color layer and an NDVI layer with a toggle control to your Leaflet map.

πŸ₯ˆ

Silver

Path 2: Process API

Implement the getNDVIForLocation() function and display NDVI values when the user clicks the map.

πŸ₯‡

Gold

AI + Satellite

Wire up the analyzeSatelliteImage tool so your AI assistant can answer questions about satellite data.

ℹ️ Team Check-In at 15:30
At 15:30, each team will do a 2-minute live demo showing their satellite integration working. Be ready to show at least one satellite layer or data query in action.
βœ… Help Resources
Raise your hand any time for TA support. Starter code and working examples are in /templates/day6-starter/. The Sentinel Hub EO Browser is your best friend for debugging evalscripts.
🌟 Pioneer Profile
πŸ‘€

Katherine Johnson

NASA Mathematician

Her calculations of orbital mechanics were critical to the success of the first and subsequent U.S. crewed spaceflights.

🌍 Local to Global

Global Data, Local Impact

Applying EO to Community Challenges

Earth Observation provides a macroscopic view of environmental trends, but its true power lies in downscaling this data to affect local policy and design, such as urban planning and sustainable workplaces.

πŸ“
Texas Connection: In Texas, EO data is used to monitor the Edwards Aquifer depletion and track the expansion of urban heat islands across the Dallas-Fort Worth metroplex.
πŸ—ΊοΈ
πŸ€” Geographic Inquiry

Regional Decisions Scenario

Scenario: Sustainable Workspace Siting

Your startup needs to establish a new hybrid work hub. You must balance employee commute times, environmental impact (using the IPAT equation), and existing green infrastructure.

Your Task:

  • Identify 3 potential sites using EO vegetation indices.
  • Calculate the estimated carbon footprint of hybrid commuting.
  • Propose a Placemaking strategy for the hub.
πŸ›°οΈ Interactive EO

Explore the Data

Interact with the live map below to explore live satellite overlays over Strasbourg.

πŸ“š Summary

Big Ideas & Glossary

Summary of Big Ideas

  • Data is only as valuable as its application.
  • Space technology has direct terrestrial benefits.

Glossary of Terms

Earth Observation
Gathering information about Earth via remote sensing.
πŸ“ Knowledge Check

Auto-Graded Quiz

When connecting live satellite data via an API, what data format is most commonly used for geospatial vectors?
A
XML
B
GeoJSON
C
CSV
βœ… Correct! GeoJSON is the standard format for encoding a variety of geographic data structures in modern web applications.
❌ Incorrect. The right answer was B. GeoJSON is the standard format for encoding a variety of geographic data structures in modern web applications.

πŸ“ Daily Reflection

What was your biggest takeaway from this session, and how does it apply to the TERRA project? Write your response below. Your instructor will review this to track your progress.