AI-powered chat assistant for ArcGIS Pro. Ask questions in natural language and let the AI execute GIS operations for you — including Google Earth Engine integration.
- Natural language GIS operations -- describe what you want, get it done
- Map context awareness -- automatically reads your layers, fields, extent, spatial reference, and raster band info
- ArcPy code generation & execution -- generates and runs Python code directly in ArcGIS Pro
- Google Earth Engine integration -- query, process, and download GEE data directly from the chat
- Multi-provider support -- choose the AI backend that works for you
- Multi-tool execution -- handles complex tasks requiring multiple sequential operations
- Automatic error recovery -- retries alternative approaches when a tool fails
- Conversation history management -- smart truncation with debug JSONL logging
| Provider | Cost | Setup |
|---|---|---|
| Google Gemini | Free tier available | Get API key |
| Ollama | Free (local) | Install Ollama |
| Anthropic (Claude) | Paid | Get API key |
| OpenAI (GPT) | Paid | Get API key |
| OpenAI-compatible | Varies | Azure OpenAI, LM Studio, vLLM, etc. |
- Download
GISChat_Setup.exefrom the latest release - Run the installer -- it will guide you through provider selection and API key setup
- Open (or restart) ArcGIS Pro
- Find the GIS Chat tab in the ribbon
- Download
GISChat.esriAddinXfrom the latest release - Double-click the file to install it
- Open ArcGIS Pro and go to GIS Chat tab > Settings to configure your provider and API key
GIS Chat can query, process, and download data from Google Earth Engine directly. To enable:
- Install the GEE Python package -- open the ArcGIS Pro Python Command Prompt (Start Menu > ArcGIS > Python Command Prompt) and run:
pip install earthengine-api - Authenticate -- in the same prompt (or ArcGIS Pro's Python window), run:
This opens a browser for Google sign-in (one-time only).
import ee ee.Authenticate()
- Configure in GIS Chat -- go to Settings and enter your GEE project ID (e.g.
my-gee-project). When you save, GIS Chat will verify the connection.
If you don't have a GEE project, create one at code.earthengine.google.com.
After setup, you can ask things like "Load recent Sentinel-2 for my study area from GEE" and the AI will handle the full workflow: querying the catalog, downloading, and adding the data to your map.
| You say | GIS Chat does |
|---|---|
| "Buffer the roads layer by 500 meters" | Runs arcpy.analysis.Buffer with your parameters |
| "How many features are in the parcels layer?" | Queries arcpy.management.GetCount and reports the result |
| "Select buildings within 1 km of the river" | Runs SelectLayerByLocation with the right layers |
| "Add a new text field called 'Status' to parcels" | Runs arcpy.management.AddField |
| "What coordinate system is this map using?" | Reads map context and answers directly |
| "Export selected features to a shapefile" | Generates and runs the export code |
| "Load recent Sentinel-2 NDVI from GEE for the study area" | Queries GEE, downloads, and adds the raster to the map |
| "Calculate flow accumulation from the DEM" | Runs Spatial Analyst tools and adds the result |
- .NET 8 SDK (x64)
- ArcGIS Pro 3.6+ (for the Esri NuGet package)
- Python 3.9+ (for packaging scripts)
dotnet restore GISChat.sln
dotnet build GISChat.sln -c Release -p:Platform=x64python package_addin.py --config Releasepip install pyinstaller
cd installer
pyinstaller --onefile --windowed --add-data "../GISChat/bin/x64/Release/net8.0-windows10.0.19041.0/GISChat.esriAddinX;." GISChatSetup.pyGISChat/
├── GISChat/ # ArcGIS Pro add-in (C#/WPF)
│ ├── Config.daml # ArcGIS Pro add-in manifest
│ ├── GISChat.csproj # Project file
│ ├── Images/ # Toolbar icons
│ ├── Models/
│ │ ├── AddinSettings.cs # Settings persistence
│ │ └── ChatMessage.cs # Chat message model
│ ├── Module1.cs # Add-in module entry point
│ ├── OpenChatButton.cs # Ribbon button to open chat
│ ├── OpenSettingsButton.cs # Ribbon button for settings
│ ├── Properties/
│ │ └── AssemblyInfo.cs
│ ├── Services/
│ │ ├── ConnectionChecker.cs # API connectivity check
│ │ ├── LlmProvider.cs # Provider enum & defaults
│ │ ├── LlmService.cs # Unified multi-provider LLM client
│ │ ├── Logger.cs # File logger with GitHub issue builder
│ │ ├── MapContextService.cs # Reads ArcGIS Pro map state
│ │ ├── ModelFetcher.cs # Dynamic model list fetching
│ │ └── PythonExecutor.cs # ArcPy code execution bridge
│ └── Views/
│ ├── ChatDockPane.xaml # Chat panel UI
│ ├── ChatDockPane.xaml.cs
│ ├── ChatDockPaneViewModel.cs
│ ├── MessageTemplateSelector.cs
│ ├── SettingsWindow.xaml # Settings dialog
│ └── SettingsWindow.xaml.cs
├── GISChat.sln # Solution file
├── installer/
│ └── GISChatSetup.py # Standalone GUI installer
├── package_addin.py # Packages .esriAddinX from build output
├── create_icons.py # Generates placeholder icon PNGs
└── LICENSE # MIT License
- API keys are stored locally only in
%APPDATA%/GISChat/settings.json - Keys are never transmitted anywhere except to the selected AI provider's API endpoint
- The
settings.jsonfile is excluded from version control via.gitignore - All AI requests go directly from your machine to the provider -- no intermediary server
If you use GIS Chat in your research, please cite the preprint:
Fehér, Zs. Z. (2026). GIS Chat: Bridging Natural Language and Desktop GIS Automation with LLM-Powered GIS Plugins. EarthArXiv preprint, submitted to SoftwareX. DOI: 10.31223/X54Z09
@article{feher2026gischat,
title={GIS Chat: Bridging Natural Language and Desktop GIS Automation with LLM-Powered GIS Plugins},
author={Feh{\'e}r, Zsolt Zolt{\'a}n},
year={2026},
doi={10.31223/X54Z09},
note={EarthArXiv preprint, submitted to SoftwareX}
}MIT License -- see LICENSE for details.
Copyright (c) 2026 Zsolt Zoltan Feher
