🛰️ AS26 · Day 3 Morning

AI Meets Maps:
Building Geospatial Intelligence

Connect AI to mapping libraries. Teach large language models to generate markers, polygons, and spatial analysis on demand.

📅 Wednesday, June 10, 2026 🕒 10:00 - 12:00 CET 📍 ISU, Strasbourg 🧑‍🏫 Dr. Sounny
The Convergence

From Chat to Spatial AI

Yesterday you built an AI chat interface: the user types a question, the LLM generates text. Today we take the next step: making the AI think spatially.

💬
Day 2: AI Chat
Text in, text out. The AI answers questions but cannot interact with the world.
🗺️
Day 3: Spatial AI
Text in, map actions out. The AI generates markers, polygons, and layer changes.
🤖
Day 4+: Agentic EO
The AI autonomously plans multi-step analyses on satellite data.
💡
The key shift is from generation (producing text) to action (calling functions that change the map). This is what the industry calls "tool use" or "function calling."
The Convergence

The Vision: Natural Language to Map

Imagine typing this into your app:

User Prompt
"Show me deforestation hotspots in the Amazon basin
from the last 6 months, and highlight any areas
where NDVI dropped below 0.2"

And the AI responds by:

  1. Parsing the request into a geographic region (Amazon basin bounding box)
  2. Querying relevant satellite data (Sentinel-2 NDVI time series)
  3. Computing NDVI change detection over 6 months
  4. Generating GeoJSON polygons for areas where NDVI < 0.2
  5. Rendering those polygons on your Leaflet map with a red heatmap
  6. Explaining the results in natural language alongside the visualization
🎯
This is not science fiction. By the end of this session, you will have the building blocks to make this work. Each step uses tools you already know (Leaflet, Gemini API, JavaScript) combined in a new way.
The Convergence

Aspirational Example: Planet's Agentic Geospatial AI

Planet Labs has pioneered what they call Agentic Geospatial AI: an AI system that can autonomously search, retrieve, analyze, and visualize satellite imagery in response to natural language queries.

🔍
Autonomous Search
The AI identifies which datasets, dates, and regions to query without manual specification.
📡
Multi-Source Fusion
Combines PlanetScope, SkySat, and third-party data sources in a single analysis chain.
📊
Iterative Reasoning
Refines results across multiple steps, adjusting parameters based on intermediate findings.
🔗
Explore further: Planet Agentic Geospatial AI White Paper. This represents the frontier of what commercial EO platforms are building. Our course gives you the foundational patterns behind these systems.

Our approach today is simpler but follows the same core architecture: an LLM that understands geospatial concepts and can call functions to interact with a map. We are building the minimum viable version of this pattern.

AI + Leaflet

Architecture: From Question to Map

The entire pipeline flows through four stages. Your browser orchestrates each handoff.

🧑
User
Natural language
🧠
Gemini API
Processes + decides
⚙️
Function Call
addMarker, drawPolygon
🗺️
Leaflet Map
Renders visually

What happens at each stage

  1. User types a natural language query in the chat panel
  2. Your JS code sends the query to the Gemini API, along with tool definitions
  3. Gemini returns either text OR a functionCall object (with name + arguments)
  4. Your code dispatches the function call to the matching JavaScript function
  5. The map updates accordingly, and you send the result back to Gemini as a functionResponse
  6. Gemini summarizes the result in natural language for the user
⚠️
The AI never directly accesses your DOM or Leaflet map. Your JavaScript code acts as the bridge, executing function calls and reporting results back. This is a crucial security boundary.
AI + Leaflet

Function Calling: Teaching AI to Use Tools

Function calling (also called "tool use") is the mechanism that transforms an LLM from a text generator into an agent that can take actions. Instead of outputting text, the model outputs a structured request to invoke a specific function.1 This paradigm has been extended to geospatial contexts, where LLMs generate GeoJSON and invoke mapping functions via structured tool calls.8

How it works

  1. You declare available functions (name, description, parameters) in the API request
  2. Gemini analyzes the user's query and decides if a function call is needed
  3. If yes, Gemini returns a functionCall object instead of plain text
  4. Your code executes the function and returns the result as functionResponse
  5. Gemini uses the result to craft a final natural language answer

Why is this powerful?

  • The AI can interact with external systems (maps, databases, APIs)
  • Responses are structured (JSON), not free text
  • You maintain control over what the AI can and cannot do
WITHOUT function calling
"Paris is located at approximately 48.856°N, 2.352°E..."
(text only, no map action)
WITH function calling
addMapMarker({lat: 48.856, lng: 2.352, label: "Paris"})
(marker appears on map!)
AI + Leaflet

Gemini API: Declaring Tools

When you call the Gemini API, you include a tools array that describes each function the AI is allowed to invoke. Think of it as handing the AI a toolbox and a manual for each tool.

JavaScript
// Define tools that Gemini can call
const tools = [{
  functionDeclarations: [{
    name: 'addMapMarker',
    description: 'Add a marker to the map at specified coordinates',
    parameters: {
      type: 'OBJECT',
      properties: {
        latitude:  { type: 'NUMBER',  description: 'Latitude in decimal degrees' },
        longitude: { type: 'NUMBER',  description: 'Longitude in decimal degrees' },
        label:     { type: 'STRING',  description: 'Marker popup label' }
      },
      required: ['latitude', 'longitude', 'label']
    }
  }]
}];

Anatomy of a Function Declaration

FieldPurposeTips
nameUnique identifier for the functionUse camelCase, be descriptive
descriptionTells the AI when to use this toolBe specific! This is the AI's "manual"
parametersJSON Schema defining inputDescribe each param clearly
requiredWhich parameters are mandatoryMark only truly required fields
📝
The description field is critical. The AI reads it to decide when to call this function. A vague description leads to incorrect or missed function calls. Write it as if you were explaining the tool to a new colleague.
AI + Leaflet

Building Your Map Function Toolkit

You need to define both the function declarations (for Gemini) and the JavaScript implementations (for Leaflet). Here are the essential functions for a geospatial AI assistant:

📍
addMarker(lat, lng, label)
Places a point marker on the map with a popup label. Best for cities, POIs, events.
🟢
drawPolygon(coords, color)
Draws a polygon from an array of [lat, lng] pairs. For boundaries, zones, areas of interest.
🔴
drawCircle(lat, lng, radius)
Draws a circle with radius in meters. For buffer zones, coverage areas.
🌍
setMapView(lat, lng, zoom)
Pans and zooms the map to a specified location. For navigation commands.
🌿
setNDVILayer(region)
Toggles an NDVI vegetation layer for a given region. For environmental analysis.
🗑️
clearMap()
Removes all markers, polygons, and overlays. For resetting the workspace.
🛠️
Design principle: Start with 3 to 5 simple, well-described functions. You can always add more later. Too many tools confuse the AI and increase the chance of incorrect function calls.
AI + Leaflet

Code: Complete Function Calling Pipeline

Here is the full cycle: declaring tools, sending a request, and dispatching the function call to Leaflet.

JavaScript
// 1. Define the tool declarations
const tools = [{
  functionDeclarations: [
    {
      name: 'addMapMarker',
      description: 'Add a labeled marker to the Leaflet map',
      parameters: {
        type: 'OBJECT',
        properties: {
          latitude:  { type: 'NUMBER', description: 'Latitude (WGS84)' },
          longitude: { type: 'NUMBER', description: 'Longitude (WGS84)' },
          label:     { type: 'STRING', description: 'Popup text' }
        },
        required: ['latitude', 'longitude', 'label']
      }
    }
  ]
}];

// 2. Send user query to Gemini with tools
const response = await model.generateContent({
  contents: [{ role: 'user', parts: [{ text: userQuery }] }],
  tools: tools
});

// 3. Check if the response contains a function call
const part = response.response.candidates[0].content.parts[0];

if (part.functionCall) {
  const { name, args } = part.functionCall;

  // 4. Dispatch to Leaflet
  if (name === 'addMapMarker') {
    L.marker([args.latitude, args.longitude])
      .addTo(map)
      .bindPopup(args.label)
      .openPopup();
  }
}
🔄
The full loop: After executing the function, send the result back to Gemini as a functionResponse so it can generate a human-readable summary (e.g., "I've placed a marker on Paris for you").
Quiz

Check Your Understanding

What is "function calling" in the context of LLMs?
A The LLM executes JavaScript functions directly in the browser
B A way for the LLM to call other AI models for help
C The LLM outputs a structured request to invoke a predefined function, which your code executes
D A technique for training LLMs on function documentation
Correct! The LLM does not execute code directly. It outputs a structured JSON object describing which function to call and with what arguments. Your application code then executes that function and optionally reports the result back to the LLM.1
Not quite. The LLM never executes code. It returns a structured functionCall object (name + arguments) and your code is responsible for actually running the function. This ensures you maintain full control over what happens.
AI + Satellite Data

Teaching AI About Spectral Indices

For an AI to be useful in Earth observation, it needs domain knowledge about how satellite data works. The most fundamental concept is the spectral index, especially NDVI.5 Rolf et al. (2024) argue that satellite data constitutes a distinct modality requiring specialized ML approaches.2

NDVI = (NIR − Red) / (NIR + Red)
Normalized Difference Vegetation Index

What NDVI tells us

NDVI RangeInterpretationVisual
< 0Water bodies, snow, clouds🔵
0 - 0.1Bare soil, rock, sand🟤
0.1 - 0.3Sparse vegetation, scrubland🟡
0.3 - 0.6Moderate vegetation, grassland🟢
> 0.6Dense, healthy vegetation🌲

Sentinel-2 Band Reference

BandNameWavelength
B2Blue490 nm
B3Green560 nm
B4Red665 nm
B8NIR842 nm
B11SWIR1610 nm
🧬
The AI does not inherently "know" what NDVI means. We embed this knowledge through the system prompt, giving the model a reference table it can use during reasoning.
AI + Satellite Data

System Prompts: Embedding Domain Knowledge

A system prompt is a special instruction block sent to the AI at the start of every conversation. It defines the AI's persona, knowledge, and behavioral rules. For geospatial AI, this is where you inject EO expertise.

What makes a great EO system prompt?

  • Role definition: "You are an Earth Observation AI assistant"
  • Domain knowledge: NDVI ranges, band names, coordinate systems
  • Behavioral rules: "Always use WGS84 coordinates", "Always validate lat/lng ranges"
  • Tool instructions: "Use function calling to display results on the map"
  • Error handling: "If a location is ambiguous, ask the user to clarify"

Key design principles

Be Specific
"NDVI > 0.6 indicates dense vegetation" is better than "you understand vegetation"
Be Structured
Use bullet points and tables. LLMs parse structured text more reliably than prose.
⚠️
System prompt size matters. Gemini processes the system prompt on every request. Keep it focused (under ~2000 words) to avoid wasting tokens and increasing latency. Put reference data in context only when needed.
AI + Satellite Data

Code: EO System Prompt in Practice

JavaScript
const systemPrompt = `You are an Earth Observation AI assistant integrated
with a Leaflet web map. You understand:

SPECTRAL INDICES:
- NDVI = (NIR - Red) / (NIR + Red)
- Values: < 0 = water/snow, 0-0.1 = bare soil, 0.1-0.3 = sparse vegetation,
  0.3-0.6 = moderate vegetation, > 0.6 = dense healthy vegetation
- NDWI = (Green - NIR) / (Green + NIR) for water bodies

SENTINEL-2 BANDS:
- B2=Blue(490nm), B3=Green(560nm), B4=Red(665nm)
- B8=NIR(842nm), B11=SWIR(1610nm), B12=SWIR(2190nm)

COORDINATE SYSTEM:
- Always use WGS84 (EPSG:4326) for latitude/longitude
- Latitude range: -90 to 90
- Longitude range: -180 to 180

RULES:
- When asked about a location, use function calling to display it
- Always validate coordinates before calling map functions
- If a location is ambiguous, ask the user to clarify
- Provide numerical context alongside visualizations`;

// Initialize the model with the system prompt
const model = genAI.getGenerativeModel({
  model: 'gemini-2.0-flash',
  systemInstruction: systemPrompt,
  tools: tools
});
💡
Pro tip: Version-control your system prompts just like code. Small changes in wording can significantly affect the AI's behavior. Treat prompt engineering as iterative development.
AI + Satellite Data

Multimodal AI: Sending Images to Gemini

Gemini is a multimodal model, meaning it can process text, images, audio, and video in a single request. For Earth observation, this means you can send a satellite image to Gemini and ask it to interpret what it sees. Recent work has explored foundation models for geospatial reasoning, assessing LLM capabilities in understanding geometries and spatial relations.6

📷
Satellite Image
Sentinel-2 RGB or false color
+
💬
User Prompt
"What do you see?"
🧠
Gemini
Analyzes both inputs
📊
Analysis
Text + function calls
JavaScript
// Send a satellite image + question to Gemini
const imagePart = {
  inlineData: {
    mimeType: 'image/png',
    data: base64EncodedImage  // base64 string of the tile
  }
};

const result = await model.generateContent([
  imagePart,
  { text: 'Analyze this Sentinel-2 image. Identify land cover types and estimate NDVI ranges for each visible zone.' }
]);
⚠️
Important caveat: Gemini can describe and reason about satellite images, but it does not perform pixel-level spectral analysis. For precise NDVI computation, use the actual band data (GeoTIFF). Use Gemini for qualitative interpretation and user interaction.
Quiz

Spectral Index Challenge

A region has an NDVI value of 0.08. What does this most likely indicate?
A Dense tropical forest
B Water body, bare soil, or rock
C Temperate grassland
D Agricultural cropland in peak season
Correct! NDVI values near zero or negative typically indicate non-vegetated surfaces: open water (negative), bare soil, rock, sand, or urban areas. Healthy vegetation reflects strongly in the NIR band, pushing NDVI above 0.3.
Not quite. An NDVI of 0.08 is very low (near bare soil). Vegetation typically produces NDVI values above 0.1 (sparse) to 0.6+ (dense). Values near zero indicate bare soil, rock, or built-up areas, while water often produces negative NDVI values.
GeoJSON + NLP

GeoJSON: The Universal Web Mapping Format

GeoJSON is an open standard format (IETF RFC 7946) for encoding geographic features using JSON.4 It is natively supported by Leaflet, Mapbox, Google Maps, and virtually every web mapping library. It is also the format we will teach our AI to generate.

GeoJSON Geometry Types

  • Point: A single location (markers, POIs)
  • LineString: A sequence of connected points (roads, rivers)
  • Polygon: A closed area (boundaries, zones)
  • MultiPoint / MultiLineString / MultiPolygon: Collections
  • GeometryCollection: Mixed geometry types

Key rules

  • Coordinates are always [longitude, latitude] (note the order!)
  • Polygon rings must be closed (first point = last point)
  • The standard CRS is WGS84 (EPSG:4326)
GeoJSON
{
  "type": "Feature",
  "properties": {
    "name": "ISU Strasbourg",
    "type": "university"
  },
  "geometry": {
    "type": "Point",
    "coordinates": [
      7.7676,
      48.5734
    ]
  }
}
⚠️
Common pitfall: GeoJSON uses [longitude, latitude] order, but Leaflet's L.latLng() uses (latitude, longitude). This mismatch is the #1 source of "my data is in the ocean" bugs. Fortunately, L.geoJSON() handles the conversion automatically.
GeoJSON + NLP

AI-Generated GeoJSON

One of the most powerful applications of function calling is having the AI generate valid GeoJSON from natural language descriptions. The user describes a geographic feature in plain English, and the AI produces the structured data.

Example conversation

🧑
"Draw a circle around Paris with a 50km radius and mark the Eiffel Tower"
🤖
functionCall: drawCircle({lat: 48.856, lng: 2.352, radius: 50000})
functionCall: addMarker({lat: 48.858, lng: 2.294, label: "Eiffel Tower"})

For more complex shapes, you can define a addGeoJSON function that accepts raw GeoJSON:

Function Declaration
{
  name: 'addGeoJSON',
  description: 'Add a GeoJSON FeatureCollection to the map. Use for complex shapes like country borders, river paths, or multi-polygon regions.',
  parameters: {
    type: 'OBJECT',
    properties: {
      geojson: { type: 'STRING', description: 'Valid GeoJSON string' },
      style:   { type: 'OBJECT', description: 'Leaflet path style options',
        properties: {
          color:       { type: 'STRING' },
          fillColor:   { type: 'STRING' },
          fillOpacity: { type: 'NUMBER' }
        }
      }
    },
    required: ['geojson']
  }
}
GeoJSON + NLP

Code: Complete Pipeline from Query to Map

JavaScript
// Dispatcher: handle all function calls from Gemini
function executeFunctionCall(functionCall) {
  const { name, args } = functionCall;

  switch (name) {
    case 'addMapMarker':
      return L.marker([args.latitude, args.longitude])
        .addTo(map).bindPopup(args.label).openPopup();

    case 'drawCircle':
      return L.circle([args.latitude, args.longitude], {
        radius: args.radius,
        color: args.color || '#10b981',
        fillOpacity: 0.15
      }).addTo(map);

    case 'addGeoJSON':
      try {
        const geojsonData = JSON.parse(args.geojson);
        return L.geoJSON(geojsonData, {
          style: args.style || { color: '#10b981' }
        }).addTo(map);
      } catch (e) {
        return { error: 'Invalid GeoJSON: ' + e.message };
      }

    case 'setMapView':
      map.setView([args.latitude, args.longitude], args.zoom || 10);
      return { success: true };

    case 'clearMap':
      map.eachLayer(layer => {
        if (layer !== tileLayer) map.removeLayer(layer);
      });
      return { success: true };

    default:
      return { error: `Unknown function: ${name}` };
  }
}
🛡️
Defense in depth: Always wrap GeoJSON parsing in a try/catch. AI-generated JSON can contain syntax errors. Return meaningful error messages so Gemini can self-correct and try again.
GeoJSON + NLP

Validation: Trust but Verify

AI-generated spatial data can contain errors. You need a robust validation layer between Gemini's output and your map.

Common AI-generated GeoJSON errors

ErrorExampleFix
Lat/Lng swapped [48.85, 2.35] as [2.35, 48.85] Check if lng is in lat range
Out-of-range coords latitude: 200 Clamp to [-90, 90] / [-180, 180]
Unclosed polygon First point ≠ last point Append first point to close ring
Invalid JSON Trailing comma, missing bracket Parse in try/catch, report to AI
Wrong winding order Clockwise instead of counter-clockwise Use turf.js rewind()
JavaScript
function validateCoordinates(lat, lng) {
  if (lat < -90 || lat > 90)   return { valid: false, error: 'Latitude must be between -90 and 90' };
  if (lng < -180 || lng > 180) return { valid: false, error: 'Longitude must be between -180 and 180' };
  return { valid: true };
}
🔄
Self-correction loop: When validation fails, return the error as a functionResponse to Gemini. The model can read the error, understand what went wrong, and retry with corrected parameters. This is the foundation of agentic behavior.
Agentic Pattern

What Makes AI "Agentic"?

An agentic AI goes beyond single-turn question answering. It can plan, execute, observe results, and adjust its approach over multiple steps. The foundational framework is the ReAct pattern (Reasoning + Acting).3 This paradigm is now being applied to Earth observation, with emerging work on LLM agents that autonomously query and analyze satellite data.7

1
👀
Observe
Read user request + context
2
💭
Think
Plan next action
3
Act
Call a function / tool
4
🔍
Observe
Read the result

The cycle repeats until the AI determines the task is complete. This is fundamentally different from a single prompt-response interaction.

Simple AI (Chat)

  • Single turn: question → answer
  • No memory of intermediate steps
  • Cannot recover from errors
  • Output is always text

Agentic AI (ReAct)

  • Multi-turn: plan → act → observe → repeat
  • Maintains context across steps
  • Self-corrects based on feedback
  • Output includes actions + reasoning
Agentic Pattern

Multi-Step Reasoning in Practice

Consider the user prompt: "Compare vegetation density in Strasbourg's urban center vs. the surrounding countryside."

An agentic AI would decompose this into multiple steps:

1
THINK
"I need to identify two regions: urban Strasbourg center and surrounding rural areas. I'll zoom to Strasbourg first."
2
ACT
setMapView(48.573, 7.752, 12) → Map pans to Strasbourg
3
ACT
drawCircle(48.573, 7.752, 3000, "red") → Urban zone marked
4
ACT
drawCircle(48.60, 7.85, 5000, "green") → Rural zone marked
5
RESPOND
"I've marked both zones on the map. Urban Strasbourg (red circle) typically shows NDVI 0.1 to 0.3 due to built-up areas. The surrounding countryside (green circle) shows NDVI 0.4 to 0.7 with agricultural and forested land."
🔧
Implementation note: In Gemini, multi-step function calling works by sending functionResponse results back and allowing the model to make additional function calls in subsequent turns, all within the same chat session.
Quiz

Agentic AI Challenge

In the ReAct (Reasoning + Acting) pattern, what happens after the AI executes a tool call and receives the result?
A The conversation ends and the user must submit a new query
B The AI immediately generates a final text response
C The AI observes the result and decides whether to make another tool call or provide a final response
D The result is discarded and the AI starts over from scratch
Correct! The core insight of the ReAct pattern is the observation loop. After each tool result, the AI reasons about what it has learned and decides the next step: call another tool, ask a clarifying question, or provide the final answer. This enables complex, multi-step task completion.3
Not quite. In the ReAct pattern, the AI loops: Observe → Think → Act → Observe. After receiving a tool result, it decides whether more actions are needed. This iterative process allows complex tasks to be broken into manageable steps.
Wrap-Up

Summary of Big Ideas

1
Function calling transforms AI from text generator to agent. By declaring tools, you give the LLM the ability to take actions in the real world (on your map, in your database, through APIs).
2
Your code is the bridge, not the AI. The LLM never directly accesses the DOM or Leaflet. It outputs structured function call objects, and your JavaScript dispatches them. This is a crucial security and control boundary.
3
Domain knowledge lives in the system prompt. The AI does not inherently understand NDVI, spectral bands, or coordinate systems. You inject this expertise through carefully engineered system prompts.
4
GeoJSON is the universal bridge between AI and maps. It is the format that Leaflet, Mapbox, and every web mapping library understand. Teaching AI to generate valid GeoJSON unlocks powerful spatial workflows.
5
Validation is non-negotiable. AI-generated data can contain errors (swapped coordinates, invalid JSON, out-of-range values). Always validate before rendering, and use error feedback to enable self-correction.
6
The ReAct pattern enables multi-step reasoning. Observe, Think, Act, Observe. This cycle allows AI to decompose complex geospatial queries into a sequence of manageable function calls.
Wrap-Up

Glossary of Key Terms

GeoJSON
An open standard format for encoding geographic features (points, lines, polygons) using JSON. Uses [longitude, latitude] coordinate order. Natively supported by Leaflet and most web mapping libraries.
Function Calling
A mechanism where an LLM outputs a structured request to invoke a specific function (with name and arguments) instead of generating text. The application code executes the function and returns the result.
Tool Use
The broader concept of LLMs interacting with external tools, APIs, and systems through function calling. Enables AI to take actions beyond text generation.
NDVI
Normalized Difference Vegetation Index. Computed as (NIR - Red) / (NIR + Red). Values range from -1 to 1, with values above 0.3 indicating vegetation presence.
Spectral Index
A mathematical combination of satellite spectral bands designed to highlight specific surface features (vegetation, water, built-up areas). NDVI, NDWI, and NDBI are common examples.
Multimodal AI
An AI model that can process multiple data types (text, images, audio, video) in a single request. Gemini is multimodal, enabling analysis of satellite imagery alongside text prompts.
Agentic AI
AI that can autonomously plan, execute, and iterate on multi-step tasks. It observes results, reasons about next steps, and adapts its approach, rather than simply responding to a single prompt.
ReAct Pattern
A framework combining Reasoning and Acting. The AI alternates between thinking steps (reasoning traces) and action steps (tool calls), using observations to guide subsequent actions.
System Prompt
A special instruction sent at the beginning of every conversation that defines the AI's role, knowledge, and behavioral rules. For EO applications, it embeds spectral, geographic, and analytical expertise.
Sentinel-2 Bands
The 13 spectral bands captured by ESA's Sentinel-2 satellite. Key bands include B2 (Blue), B3 (Green), B4 (Red), B8 (NIR), and B11/B12 (SWIR). Used for computing vegetation, water, and urban indices.
Wrap-Up

References & Resources

Academic References

  1. [1] Schick, T., Dwivedi-Yu, J., Dessì, R., Raileanu, R., Lomeli, M., Hambro, E., Zettlemoyer, L., Cancedda, N., & Scialom, T. (2023). Toolformer: Language Models Can Teach Themselves to Use Tools. Advances in Neural Information Processing Systems (NeurIPS 2023), 36.
    DOI: 10.48550/arXiv.2302.04761
  2. [2] Rolf, E., Klemmer, K., Robinson, C., & Kerner, H. (2024). Mission Critical: Satellite Data is a Distinct Modality in Machine Learning. Proceedings of the 41st International Conference on Machine Learning (ICML 2024).
    DOI: 10.48550/arXiv.2402.01444
  3. [3] Yao, S., Zhao, J., Yu, D., Du, N., Shafran, I., Narasimhan, K., & Cao, Y. (2023). ReAct: Synergizing Reasoning and Acting in Language Models. International Conference on Learning Representations (ICLR 2023).
    DOI: 10.48550/arXiv.2210.03629
  4. [4] Butler, H., Daly, M., Doyle, A., Gillies, S., Hagen, S., & Schaub, T. (2016). The GeoJSON Format. RFC 7946, Internet Engineering Task Force (IETF).
    DOI: 10.17487/RFC7946
  5. [5] Drusch, M., Del Bello, U., Carlier, S., Colin, O., Fernandez, V., Gascon, F., Hoersch, B., Isola, C., Laberinti, P., Martimort, P., Meygret, A., Spoto, F., Sy, O., Marchese, F., & Bargellini, P. (2012). Sentinel-2: ESA's Optical High-Resolution Mission for GMES Operational Services. Remote Sensing of Environment, 120, 25-36.
    DOI: 10.1016/j.rse.2011.11.026
  6. [6] Ji, Y., Gao, S., Nie, Y., Majić, I., & Janowicz, K. (2025). Foundation Models for Geospatial Reasoning: Assessing the Capabilities of Large Language Models in Understanding Geometries and Topological Spatial Relations. International Journal of Geographical Information Science.
    DOI: 10.1080/13658816.2025.2511227
  7. [7] Kao, C.-H., Zhao, W., Revankar, S., Speas, S., Bhagat, S., Datta, R., Phoo, C. P., Mall, U., Vondrick, C., Bala, K., & Hariharan, B. (2025). Towards LLM Agents for Earth Observation. arXiv preprint.
    DOI: 10.48550/arXiv.2504.12110
  8. [8] Luo, Q., Xu, L., Lin, Q., Wu, S., Mao, R., Wang, C., Feng, H., Huang, B., & Du, Z. (2025). GeoJSON Agents: A Multi-Agent LLM Architecture for Geospatial Analysis, Function Calling vs Code Generation. arXiv preprint.
    DOI: 10.48550/arXiv.2509.08863
  9. [9] Gramacki, P., Martins, B., & Szymański, P. (2024). Evaluation of Code LLMs on Geospatial Code Generation. Proceedings of the 7th ACM SIGSPATIAL Workshop on AI for Geographic Knowledge Discovery (GeoAI 2024).
    DOI: 10.1145/3687123.3698286

External Resources

🌟 Pioneer Profile
πŸ‘€

Marie Tharp

Oceanographic Cartographer

She created the first scientific map of the Atlantic Ocean floor, proving the theory of continental drift.

🌍 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 the urban growth of Austin, Texas.

πŸ“š 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

Which Javascript library is widely considered the industry standard for lightweight, interactive web maps?
A
React.js
B
Three.js
C
Leaflet.js
βœ… Correct! Leaflet is the leading open-source library for mobile-friendly interactive maps.
❌ Incorrect. The right answer was C. Leaflet is the leading open-source library for mobile-friendly interactive maps.

πŸ“ 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.