A tool for matching Overture Maps data with OpenStreetMap elements and applying enriched tags to OSM.
Overmatch helps OSM contributors improve map data by:
- Matching OSM amenities (restaurants, cafes, bars, etc.) with corresponding Overture Maps data
- Reviewing tag differences in a visual comparison interface
- Applying enriched tags from Overture to OSM elements
- Tracking which elements have been processed to avoid duplicate work
The system consists of three components:
βββββββββββββββββββ
β Matching β Python scripts for geospatial matching
β Scripts β (OSM β Overture)
ββββββββββ¬βββββββββ
β JSONL output
βΌ
βββββββββββββββββββ
β Tracking API β FastAPI + DynamoDB on AWS Lambda
β (FastAPI) β Tracks processed elements & stores matches
ββββββββββ¬βββββββββ
β REST API
βΌ
βββββββββββββββββββ
β Web Frontend β React + MapLibre
β (React) β Visual review and tagging interface
βββββββββββββββββββ
Python scripts that perform geospatial matching between OSM and Overture data:
match.py: Core matching algorithm using spatial indexing and fuzzy name matchingget_osm_ids.py: Fetches OSM elements for a given areabuild_query.py: Builds Overpass queries for OSM dataget_categories.py: Analyzes Overture category distributions
Key features:
- Spatial indexing (R-tree) for efficient nearest-neighbor search
- Fuzzy name matching using RapidFuzz
- Configurable distance and similarity thresholds
- Outputs JSONL format with match metadata
Dependencies: GeoPandas, RapidFuzz, rtree, atlus, overturetoosm
FastAPI service deployed on AWS Lambda that tracks processed elements:
- GET/POST
/osm: Track which OSM elements have been uploaded with changes - GET/POST
/overture: Track which Overture elements have been marked as non-matching - GET
/matches: Retrieve OSM-to-Overture matches from DynamoDB
Key features:
- Serverless architecture (Lambda + DynamoDB)
- Millisecond response times at any scale
- Timestamp tracking for audit trails
- Infrastructure as Code (CloudFormation)
Cost: under $5/month for moderate usage
See api/README.md for detailed deployment instructions.
React application for reviewing matches and applying tags:
- Visual comparison table showing OSM vs Overture tags
- Interactive map with MapLibre GL
- Support for multiple Overture matches per OSM element
- Batch upload to OSM via authenticated changesets
- Automatic deduplication using tracking API
Key features:
- Color-coded tag differences
- Live OSM data fetching
- Relation-based area selection
- OAuth authentication with OSM
- Persistent state management (Zustand)
See front_end/IMPLEMENTATION_NOTES.md for implementation details.
Provided under the MIT License.
Contributions welcome! Please ensure:
- Matching scripts handle edge cases (nodes, ways, relations)
- API changes are reflected in CloudFormation template
- Frontend changes maintain TypeScript type safety
For issues or questions, please open an issue on GitHub.