- DESIGN.md: full design incl. driving-trip requirements (R1-R4), stays model, focus mode, mobile, provenance rules - SURVEY.md: open-source landscape - mock/: interaction mock (Florence itinerary, focus mode, stays, region stops, mobile layout) - router/: Go module (stdlib-only) with Router interface (Valhalla + OSRM backends), stop_cost, optimize_stops, corridor, routectl CLI, bench (5 real NE-corridor tasks, 26 checks passing), integration tests, and setup-osrm.sh for the self-hosted router - osm/: NH+MA+CT+NY PBFs (gitignored) + setup artifacts
128 lines
8.9 KiB
Markdown
128 lines
8.9 KiB
Markdown
# Survey: existing open-source projects in the LLM + maps domain
|
|
|
|
Compiled 2026-09-04. Categories are ordered by proximity to the target
|
|
system (a chat assistant answering map questions: routes/travel times,
|
|
businesses, opening hours, products/services).
|
|
|
|
## 1. Closest matches: LLM tool layers over OpenStreetMap
|
|
|
|
These provide *part* of the architecture (tools for an LLM), not a complete
|
|
product. This is the most active corner of the space.
|
|
|
|
| Project | What it is | Notes |
|
|
|---|---|---|
|
|
| [geodaai/openassistant](https://github.com/geodaai/openassistant) | OpenAssistant (open-source LLM assistant framework) with an **OpenStreetMap tool plugin**: geocoding, reverse geocoding, routing, isochrone analysis | Framework + tools, no map-UI product; tools mix with other tools for multi-step tasks. Python. |
|
|
| [jagan-shanmugam/open-streetmap-mcp](https://github.com/jagan-shanmugam/open-streetmap-mcp) | **MCP server** exposing OSM to LLM clients: geocoding, POI search, routing | One of several near-identical MCP servers (2025+ wave). |
|
|
| [NERVsystems/osmmcp](https://github.com/NERVsystems/osmmcp) | OSM **MCP server, written in Go**: geocoding, routing, nearby places, neighborhood analysis, EV charging stations | Go implementation — reusable pieces for us; same "MCP server" pattern. |
|
|
| [visuelconcept/myosm-mcp-server](https://github.com/visuelconcept/myosm-mcp-server) | Another OSM MCP server (geocoding etc.) | |
|
|
| [IBM/chuk-mcp-geocoder](https://github.com/IBM/chuk-mcp-geocoder) | MCP geocoder: forward/reverse, batch, nearby places, route waypoints, admin boundaries | Useful geocoding reference. |
|
|
| [steveattewell/osm-ai-map](https://github.com/steveattewell/osm-ai-map) | Demonstrator: ChatGPT interprets natural language → **Overpass queries** → results on a map | Old (pre-function-calling era) but exactly the target interaction; demonstrates the pattern on a real map UI. |
|
|
| [Aravindak27/LLM-GIS-ASSISTANT](https://github.com/Aravindak27/LLM-GIS-ASSISTANT) | AI-driven GIS assistant; natural language → maps, climate graphs, spatial analysis (Open-Meteo, WorldPop, OSM) | Analyst-oriented, not POI/routing-focused. |
|
|
| [DBishal13/geospatial-data-copilot](https://github.com/DBishal13/geospatial-data-copilot) | Natural-language interface over spatial infrastructure data (SF utility poles etc.) | Niche dataset but same idea: NL → structured geospatial query. |
|
|
|
|
## 2. GIS-workbench agents (QGIS plugins & the like)
|
|
|
|
A crowded niche, all aimed at *analysts inside QGIS* rather than end-user
|
|
map questions. Still useful for prompting patterns (inject layer/CRS context
|
|
into the prompt, generate+execute code):
|
|
|
|
- [opengeos/GeoAgent](https://github.com/opengeos/GeoAgent) — shared AI agent
|
|
layer for geospatial Python packages, map widgets, QGIS plugins.
|
|
- [xinguangYan/GeoPilot](https://github.com/xingguangYan/GeoPilot) — NL →
|
|
QGIS Python code.
|
|
- **GIS Chat for QGIS** (zenodo.org/records/18916276) — LLM chat panel in
|
|
QGIS, injects live workspace context.
|
|
- [gladcolor/LLM-Geo](https://github.com/gladcolor/LLM-Geo),
|
|
**IntelliGeo** (intelligeo.org),
|
|
[Teakinboyewa/SpatialAnalysisAgent](https://github.com/Teakinboyewa/SpatialAnalysisAgent),
|
|
[r-wenger/LLMFileDescribe](https://github.com/r-wenger/LLMFileDescribe).
|
|
- [iamtekson/GeoAgent](https://github.com/iamtekson/GeoAgent) (QGIS plugin,
|
|
distinct from opengeos/GeoAgent).
|
|
|
|
**Takeaway:** nobody here targets "ask about a business / route / hours";
|
|
they target geodata processing.
|
|
|
|
## 3. Research code & benchmarks (evaluation assets)
|
|
|
|
| Project | What it gives us |
|
|
|---|---|
|
|
| [knowledge-computing/MapQA-dataset](https://github.com/knowledge-computing/MapQA-dataset) | **MapQA**: 3,154 OSM QA pairs (SoCal, Illinois), 9 question types incl. routing & POI attributes; code for both a retrieval-based and an LLM-based approach. Our primary eval set. |
|
|
| [OSU-slatelab/MapQA](https://github.com/OSU-slatelab/MapQA) | *Different* "MapQA" — QA on US choropleth maps. Don't confuse. |
|
|
| [rohinmanvi/GeoLLM](https://github.com/rohinmanvi/GeoLLM) | ICLR'24: extract geospatial knowledge from LLMs using **auxiliary OSM data in prompts**; models + datasets. Validated that OSM context unlocks LLM geo-knowledge. |
|
|
| [Geo-R2LLM/groke](https://github.com/Geo-R2LLM/groke) | GROKE (ACL'26): vision-free, training-free hierarchical LLM reasoning **over the OSM graph** for navigation-instruction evaluation. |
|
|
| [makunyang/Geo-Loc](https://github.com/makunyang/Geo-Loc) | GeoKG-Loc: urban knowledge graph from OSM + LLM parsing of spatial constraints → coordinate estimation. |
|
|
| [MarcWeberFS/Text-to-sql](https://github.com/MarcWeberFS/Text-to-sql) | **Text-to-PostGIS**: NL → SQL for PostGIS with saved-query memory + benchmark. Direct alternative to (or complement of) the fixed tool catalog: let the LLM write PostGIS SQL. |
|
|
| [nl2sql-geospatial-benchmark](https://github.com/2023302141060/nl2sql-geospatial-benchmark) | 200-question NL2GeoSQL benchmark. |
|
|
| MapBench / MapReason-OSM / GeoLLM-OSM (papers) | VLM map-reading benchmarks; code scattered, mostly paper-driven. |
|
|
| [CityMind-Lab/Awesome-Location-Intelligence](https://github.com/CityMind-Lab/Awesome-Location-Intelligence) | Curated list of geospatial-representation-learning papers/datasets/code — good ongoing pointer. |
|
|
|
|
## 4. The mature building blocks (everyone builds on these)
|
|
|
|
- **Routing:** [OSRM](https://github.com/Project-OSRM/osrm-backend) (fast,
|
|
C++, table API), [Valhalla](https://github.com/valhalla/valhalla)
|
|
(multimodal, isochrones, matrix, elevation, TSP; open global server now
|
|
exists), [GraphHopper](https://github.com/graphhopper/graph-hopper)
|
|
(easiest to configure, car/bike/foot).
|
|
- **Geocoding:** [Nominatim](https://github.com/osmandapp/nominatim),
|
|
Photon (MeiliSearch-based, lighter).
|
|
- **Map data:** [Overpass API](https://github.com/danimw/overpass-api)
|
|
(query engine), `osm2pgsql` / [osmium-tool](https://github.com/osmcode/osmium-tool)
|
|
(ingest), Geofabrik extracts.
|
|
- **Opening hours:** `osm-opening-hours` (Python), `opening_hours` (JS),
|
|
`is-it-open-now` (JS) — the standard evaluators for the OSM hours language.
|
|
- **Frontend:** Leaflet / MapLibre GL, OSM tile servers (tileserver-gl).
|
|
|
|
## 5. Travel-itinerary agents (prior art for the itinerary framing)
|
|
|
|
All research-grade; none are OSM-native, none treat the itinerary as a
|
|
versioned state object, and their toolkits are synthetic sandboxes (or
|
|
Google Maps), not production geodata services:
|
|
|
|
- **TravelPlanner** (OSU-NLP-Group/TravelPlanner, ICML'24) — benchmark: 1,225
|
|
planning intents over ~4M records with a tool sandbox. The eval standard
|
|
for this task class.
|
|
- **TravelAgent** (jiangjiechen.github.io/publication/travelagent, 2024) —
|
|
LLM planning with four modules incl. itinerary generation & refinement;
|
|
paper-level.
|
|
- **AgentTravel** (OpenReview) — knowledge-augmented agent framework for
|
|
spatially-feasible itineraries.
|
|
- **Trip Weaver** (manolo-alvarez.github.io/projects/TripWeaver) — fine-tuned
|
|
small LLM for itineraries on consumer hardware.
|
|
- assorted LangGraph/LangChain multi-agent planner demos — thin, not robust.
|
|
|
|
## 6. Gap analysis — what does *not* exist yet
|
|
|
|
1. **No turnkey consumer product** "chat with your region's map": business
|
|
discovery + opening hours + routes in a chat/map UI. Everything is either
|
|
a demo, a tool server (MCP), or an analyst plugin.
|
|
2. **The MCP servers (2025 wave) are a signal**: the ecosystem standardized
|
|
on "OSM tools as MCP" but they are thin (hosted APIs, no local data,
|
|
no hours evaluation, no `along_route`, no semantic POI search, no eval).
|
|
We can *consume* osmmcp-style tools rather than rebuild them, or reuse
|
|
the Go code.
|
|
3. **Opening-hours-aware QA is underserved** — nearly no project treats
|
|
"open now / open when I arrive" as a first-class capability.
|
|
4. **Eval is research-only** — MapQA is a dataset; no project ships a CI
|
|
regression harness for map-QA answers.
|
|
5. **Hybrid structured + semantic POI retrieval** (PostGIS + vector index)
|
|
appears in the FOS4G 2026 comparison paper but no strong open-source
|
|
implementation of it.
|
|
6. **No production itinerary-refinement product over real OSM data** with a
|
|
deterministic feasibility validator and versioned diffs — the itinerary
|
|
agents above are benchmarks/papers, the map-QA projects are Q&A.
|
|
|
|
## Implications for our design
|
|
|
|
- **Reuse, don't rebuild:** routing/geocoding/hours libraries and even an
|
|
MCP server's tool set are off-the-shelf; our differentiators are (a) the
|
|
chat+map product, (b) hours-aware multi-hop tools (`along_route` + hours),
|
|
(c) hybrid retrieval, (d) evaluation.
|
|
- **Consider text-to-PostGIS as a second tool tier** (Text-to-sql /
|
|
PostGISer evidence): fixed tools for the common 90%, an LLM-generated
|
|
SQL escape hatch for the long tail, with a read-only DB role as the
|
|
safety boundary.
|
|
- **MapQA-dataset** is the natural benchmark to wire in from day one.
|
|
- **MCP as an interface option:** if we build our tool server in MCP form,
|
|
it works with Claude/Cursor/etc. for free *and* with our own agent —
|
|
low extra cost, high optionality.
|