An AI-powered geospatial application that allows you to explore and visualize vast Earth science data using natural language.
Use this tutorial to build your own Earth Copilot in Azure and interact with geospatial data without writing code. Earth Copilot will allow you to:
- Interact with geospatial data using natural language queries
- Generate and execute SpatioTemporal Asset Catalog (STAC) API queries
- Explore 126+ Microsoft Planetary Computer (MPC) STAC collections
- Search private, public, or hybrid datasets
- Render diverse STAC collections on Azure maps
- Integrate Earth Copilot into your own research workflows in Azure
Inspired by the NASA and Microsoft Earth Copilot 1.0 prototype, this version features a production-ready architecture built on modern AI agent frameworks, creating an intelligent system that understands scientific questions, automatically finds the right datasets, and delivers interactive visualizationsβall through natural conversation.
Whether you're a scientist or student, Earth Copilot helps you spend less time finding the right data and more time unlocking insights.
π₯ Watch Satya Nadella introduce NASA Earth Copilot at Microsoft Ignite 2024: View Here
1) Queries that require map visualizations
- "Show me satellite imagery of Dubai urban expansion in 2020"
- "Show me radar imagery of Houston Texas during Hurricane Harvey August 2017"
- "Show me HLS Landsat imagery for Washington State forests from 2024"
- "Show me burned area mapping for Montana wildfire regions 2023"
- "Show me land surface temperature for Kansas wheat fields during summer 2024"
Data Flow: User Query β React UI β Azure Function App β Semantic Kernel β Microsoft Planetary Computer STAC APIs β Results β Map Visualization and Response
2) Contextual queries looking for information
- "How was NYC impacted by Hurricane Sandy"
- "What was the impact of Hurricane Florence 2018 in the North Carolina Outer Banks in 2018"
- "How did vegetation recover after flooding in Missouri River valley 2023"
- "What are the long-term climate trends affecting Pacific Northwest forests"
- "Explain the correlation between El NiΓ±o events and wildfire patterns in California"
Data Flow: User Query β React UI β Azure Function App β Semantic Kernel & LLM β Results β Chat Response
3) Queries grounded in private storage data through Retrieval Augmented Generation (RAG)
- "Analyze our proprietary STAC collection for mineral exploration sites in Nevada"
- "Compare our private agricultural monitoring data with public MODIS vegetation indices"
- "Search our internal disaster response imagery catalog for similar flood patterns"
- "Query our custom satellite constellation data for urban heat island analysis"
- "Find relevant datasets in our private STAC catalog for infrastructure monitoring projects"
Data Flow: React UI β Data Catalog Selection β User Chat Query β NASA VEDA AI Search Index & LLM β Chat Response
βοΈ React UI (earth-copilot/react-ui/)
- Main entry point UI: Unified query search for all requests
- Chat Interface: GeoCopilot chat panel with conversation history leveraging Azure AI and semantic understanding
- Map Visualization: Azure Maps integration with satellite data overlays
- Data Catalog Pane: Connection to private, public and hybrid data sources
π§ Router Function App (earth-copilot/router-function-app/)
- Semantic Kernel Translator: Agentic query classification and entity extraction that translates natural language to customized STAC parameter queries
- Location Resolver: Multi-strategy geocoding for map rendering of diverse data catalog types (Azure Maps, Nominatim, AI)
- Temporal Resolver: Resolves query datetimes to correct search format
- Collection Mapper: Intelligent satellite data collection selection that routes search to most appropriate STAC data catalog depending on query intent
- STAC Integration: Function app API connectivity to Microsoft Planetary Computer for executing translated queries
ποΈ Core Infrastructure (earth-copilot/core/)
- Configuration Management: Environment variables and settings
- Logging System: Structured logging for debugging and monitoring
- Error Handling: Robust error recovery and feedback
EC/
βββ π earth-copilot/ # Main application directory
β βββ π react-ui/ # React frontend application
β β βββ π src/
β β β βββ π components/ # React components
β β β β βββ Chat.tsx # Main chat interface
β β β β βββ MapView.tsx # Azure Maps integration
β β β β βββ DatasetDropdown.tsx # Data source selection
β β β β βββ ...
β β β βββ π services/ # API integration services
β β β β βββ api.ts # Backend API calls
β β β β βββ vedaSearchService.ts # VEDA search integration
β β β βββ π ui/ # UI layout components
β β βββ .env.example # Frontend environment template
β β βββ package.json # Node.js dependencies
β β βββ vite.config.ts # Vite build configuration
β βββ π router-function-app/ # Azure Functions backend
β β βββ function_app.py # Main API endpoints
β β βββ semantic_translator.py # NL to STAC translation
β β βββ location_resolver.py # Geocoding services
β β βββ collection_profiles.py # Data collection mappings
β β βββ local.settings.json.example # Function app config template
β β βββ requirements.txt # Python dependencies
β β βββ host.json # Azure Functions configuration
β βββ π core/ # Shared utilities
β β βββ config.py # Configuration management
β β βββ logging.py # Logging utilities
β βββ π infra/ # Infrastructure as Code
β β βββ main.bicep # Main Bicep template
β β βββ π app/ # Application-specific resources
β βββ π ai-search/ # Azure AI Search setup
β β βββ π scripts/ # Search index creation
β βββ azure.yaml # Azure Developer CLI config
βββ π documentation/ # Project documentation
β βββ π images/ # Screenshots and diagrams
β βββ endpoint_architecture.md # API documentation
β βββ semantic_translator_logic.md # Translation logic docs
β βββ ...
βββ π tests/ # Test suites
β βββ π e2e/ # End-to-end tests
β βββ π integration/ # Integration tests
β βββ π unit/ # Unit tests
β βββ π debug/ # Debug utilities
βββ π scripts/ # Utility scripts
β βββ π stac_availability/ # STAC data exploration
βββ π tools/ # Development tools
βββ .env.example # Root environment template
βββ README.md # This file
βββ AZURE_SETUP_GUIDE.md # Azure setup instructions
βββ STARTUP_GUIDE.md # Quick start guide
βββ setup-all-services.sh # Automated setup script
βββ requirements.txt # Root Python dependencies
To develop and deploy this application, recommended technical background includes:
- Azure Cloud Services - Creating and configuring Azure AI Foundry, Azure Maps, Azure Functions, and Azure AI Search
- Python Development - Backend API development, Azure Functions, and Python package management
- React/TypeScript - Frontend development, Vite build system, and modern JavaScript frameworks
- AI/ML Concepts - Understanding of LLMs, Semantic Kernel, and natural language processing
- Geospatial Data - STAC standards and satellite imagery concepts
- Infrastructure as Code - Bicep templates and Azure resource deployment
- Environment Configuration - Managing API keys, environment variables, and service connections
You can deploy this application using Agent mode in Visual Studio Code, your preferred IDE or using Code Spaces directly:
Create all required Azure services for complete architecture. Follow the detailed guide: AZURE_SETUP_GUIDE.md
This guide covers step-by-step creation of required services:
Required Services:
- Azure AI Foundry - Core AI query processing and natural language understanding with GPT-5 deployment
- Azure Maps - Geographic coordinate resolution and location services
- Azure Function App - Serverless compute for backend API endpoints
- Azure AI Search - Vector search and document indexing for enhanced query capabilities
Optional Services:
- Azure Application Insights - Performance monitoring and diagnostics
- Azure Key Vault - Secure storage of API keys and secrets
- Azure Static Web Apps - Frontend hosting for production deployment
Data Sources:
- Microsoft Planetary Computer STAC APIs - Global satellite data catalog with standardized geospatial data access
- NASA VEDA - Hosts Earth science datasets from NASA missions and research programs
An example of what earth copilot resource group and services could look like:

An example of what Foundry model deployment could look like:

The application requires multiple environment files for different components:
-
Root Environment: Create
.envfile in project root containing Azure service credentials- Template: See
.env.examplefor required variables - Purpose: Backend API services (Azure OpenAI, Azure Maps, etc.)
- Template: See
-
React UI Environment: Create
.envfile inearth-copilot/react-ui/- Template: See
earth-copilot/react-ui/.env.example - Purpose: Frontend variables (all prefixed with
VITE_)
- Template: See
-
Function App Settings: Configure
earth-copilot/router-function-app/local.settings.json- Template: See
local.settings.json.examplein the same directory - Purpose: Azure Functions runtime configuration
- Template: See
Setup: Copy each .example file, remove the .example extension, and fill in your Azure service credentials.
Earth Copilot requires Azure services and proper configuration to function. Follow these guides in order:
-
π§ Azure Services Setup: AZURE_SETUP_GUIDE.md
- Create Azure AI Foundry (GPT-5 deployment)
- Set up Azure Maps and AI Search
- Configure environment variables
-
π Application Startup: STARTUP_GUIDE.md
- Install dependencies and run the application
- Multiple startup options (automated, VS Code, manual)
- Testing and troubleshooting
-
βοΈ Technical Reference: SYSTEM_REQUIREMENTS.md
- Detailed system requirements and dependencies
- Version compatibility matrix
- Advanced troubleshooting
- Semantic Kernel 1.36.2 required - the setup script installs the correct version
- Imports: Run
python verify-requirements.pyto check for compatibility
# First-time setup (after Azure services are created)
./setup-all-services.sh
# Start all services (automated - recommended)
./run-all-services.sh
# Manual development (two terminals required)
# Terminal 1: cd earth-copilot/router-function-app && func host start
# Terminal 2: cd earth-copilot/react-ui && npm run dev
# Access at: http://localhost:5173Below is a summary of collections and visualization capabilities available in Earth Copilot based on the latest assessment of MPC data catalog availability.
ποΈ Elevation & Terrain - Excellent Availability Primary collections: cop-dem-glo-30, cop-dem-glo-90 | Best for: topography, watersheds, slope analysis
π₯ Fire Detection - High Availability Primary collections: modis-14A1-061, modis-14A2-061, modis-64A1-061 | Best for: wildfire tracking, burn assessment
π± Vegetation/Agriculture - High Availability Primary collections: modis-13Q1-061, modis-11A1-061, modis-15A2H-061 | Best for: crop health, forest monitoring
π‘οΈ Temperature/Thermal - High Availability Primary collections: modis-11A1-061, goes-cmi | Best for: heat analysis, thermal stress
π Snow & Ice - High Availability Primary collections: modis-10A1-061, viirs-snow-cover | Best for: snow coverage, seasonal analysis
ποΈ Urban/Infrastructure - Good Availability Primary collections: naip, sentinel-2-l2a | Best for: city planning, development tracking
π‘ SAR/Radar - Good Availability Primary collections: sentinel-1-grd, sentinel-1-rtc | Best for: flood mapping, all-weather monitoring
π°οΈ Optical Satellite - Good Availability Primary collections: sentinel-2-l2a, landsat-c2-l2, hls2-l30 | Best for: urban development, coastal monitoring
βοΈ Climate & Weather - Variable Availability Primary collections: era5-pds, daymet-daily-na | Best for: historical weather, climate analysis
π Marine & Ocean - Variable Availability Primary collections: goes-cmi, modis-sst | Best for: ocean temperature, water quality
MIT License - see LICENSE.txt for details.
This project may contain trademarks or logos for projects, products, or services. Authorized use of Microsoft trademarks or logos is subject to and must follow Microsoft's Trademark & Brand Guidelines. Use of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship. Any use of third-party trademarks or logos are subject to those third-party's policies.
Earth Copilot 2.0 was advised by Juan Carlos Lopez and inspired by NASA's Earth Copilot 1.0 developed by Minh Nguyen.
A big thank you to our collaborators:
- Microsoft Planetary Computer
- NASA
- Microsoft Team: Juan Carlos Lopez, Jocelynn Hartwig & Minh Nguyen
Built for the Earth science community with β€οΈ and AI







