Skip to main content

Optimizes travel routes using Google Maps Geocoding API and the traveling salesman problem solver from OR-Tools.

Project description

Travecto

Stars Forks Watchers Repo Size Language Count Top Language Issues Last Commit Release Sponsor Build

Optimizes travel routes using Google Maps Geocoding API and the traveling salesman problem solver from OR-Tools.

⚙️ Features

  • Solves the traveling salesman problem for optimal route planning.
  • Geocodes place names using Google Maps API with intelligent fallback strategies.
  • Caches geocoding results to minimize API calls.
  • Supports mandatory locations per day with automatic clustering.
  • Calculates realistic travel times based on mixed Metro and walking transportation.
  • Generates interactive route maps with satellite and street view options.
  • Handles Unicode normalization for international place names.
  • Configurable rate limiting with exponential backoff retry logic.
  • TOML-based configuration for easy customization.

⚠️ Disclaimers

  • Google API Key Required: This tool requires a valid Google Maps Geocoding API key. Pricing applies based on usage (Google offers 10,000 requests per month free).
  • Transportation Model: Travel time calculations assume a mixed Metro/walking model optimized for the Paris Metro system. Accuracy may vary for other transportation systems.
  • Rate Limiting: Default rate limit is set to 50 QPS to stay within Google API limits. Adjust based on your API quota.
  • Licensing Restrictions: Google's terms are notably restrictive. Geocoding results cannot be stored permanently outside of Google's services. You may cache results for up to 30 days for performance, but permanent storage is only allowed if data is displayed on a Google map and used within Google's ecosystem, which is not the case for Travecto as it uses Folium, which uses Leaflet for displaying maps.

🚀 Installation

With PyPI

pip install travecto

With pipx

pipx install travecto

With Conda

conda create -n travecto python=3.9 -y # up to 3.13
conda activate travecto
pip install travecto

From Source

git clone https://github.com/Inc44/Travecto.git
cd Travecto

To install the package:

pip install .

To install only the dependencies:

pip install -r requirements.txt

If you install only the dependencies, run the program using python -m travecto.cli (or python -OO travecto/cli.py) instead of the travecto command.

🛠️ Build from Source

pip install build
python -m build

📦 Publish

pip install twine
twine upload dist/*

🧾 Configuration

Set environment variable:

setx /M GOOGLE_MAPS_API_KEY your_api_key

Or create a .env file:

GOOGLE_MAPS_API_KEY=your_api_key

Check by restarting the terminal and using:

echo %GOOGLE_MAPS_API_KEY%

📖 Usage Examples

Basic Route Planning

Calculate optimal routes for all configured cities:

python -m travecto.cli

Generate Interactive Maps

Create HTML maps showing optimized routes:

python -m travecto.cli --maps

Custom Configuration

Use custom configuration file:

python -m travecto.cli --input config.toml

Custom Output Directory

Save maps to specific directory:

python -m travecto.cli --maps --output html

🎨 Command-Line Arguments

Argument Description
-i, --input <path> Path to the TOML configuration file. Default: demo.toml.
-o, --output <path> Directory for map files. Default: routes.
--maps Generate interactive HTML maps for visualization.
--workers <n> Number of OR-Tools search workers. Default: 32.
--loglevel <level> Set logging level (NOTSET, DEBUG, INFO, WARNING, ERROR, CRITICAL). Default: ERROR.

🎯 Motivation

Planning efficient tourist routes in large cities like Paris requires solving complex optimization problems. Traditional route planners fail to optimize across multiple locations or lack the flexibility for mandatory stops. Google Maps supports a maximum of 10 destinations and MapQuest supports a maximum of 26 addresses. So in the summer of 2025, as I had a need for about 80 stops, I decided to create this tool to solve multi-day touring itineraries using proven algorithms while maintaining practical transportation models for European cities.

🐛 Bugs

Not yet found.

⛔ Known Limitations

  • Geocoding heavily depends on Google Maps API quality and may fail for very obscure locations; therefore, adding a postal code at the end of the destination name or defining renaming patterns is recommended.
  • The transportation model assumes a uniform Metro/walking mix, which may not reflect actual city-specific conditions.
  • OR-Tools TSP solver may not find globally optimal solutions for very large datasets within time limits.

🚧 TODO

  • Support Multiple Transportation Modes: Add support for car, public transport, and walking-only routing with configurable speed parameters.
  • Real-Time Transit Integration: Replace haversine distance calculations with Google Directions API for accurate travel times, including traffic conditions.
  • Interactive Configuration GUI: Create a web interface for adding cities, places, and constraints without modifying configuration files.
  • Multi-Objective Optimization: Enable optimization for factors beyond distance, such as opening hours, crowd levels, and personal preferences.

🙏 Thanks

Creators of:

🤝 Contribution

Contributions, suggestions, and new ideas are heartily welcomed. If you're considering significant modifications, please initiate an issue for discussion before submitting a pull request.

📜 License

MIT

This project is licensed under the MIT License. See the LICENSE file for details.

💖 Support

BuyMeACoffee Ko-Fi Patreon

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

travecto-2025.8.12.tar.gz (17.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

travecto-2025.8.12-py3-none-any.whl (17.1 kB view details)

Uploaded Python 3

File details

Details for the file travecto-2025.8.12.tar.gz.

File metadata

  • Download URL: travecto-2025.8.12.tar.gz
  • Upload date:
  • Size: 17.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.5

File hashes

Hashes for travecto-2025.8.12.tar.gz
Algorithm Hash digest
SHA256 9c0ef514b1bdd72b37561f0386bafbc57287a429be2198cb1edd3d9ca47fdf52
MD5 67d01d54a92077cc254df3e7a392de64
BLAKE2b-256 374ee0aa388a1017486127881fcd4ddd20fa06b63e111eaf8a5c8f5e56c8005c

See more details on using hashes here.

File details

Details for the file travecto-2025.8.12-py3-none-any.whl.

File metadata

  • Download URL: travecto-2025.8.12-py3-none-any.whl
  • Upload date:
  • Size: 17.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.5

File hashes

Hashes for travecto-2025.8.12-py3-none-any.whl
Algorithm Hash digest
SHA256 1188024ae60ee749309714e1513ef953aadc54a3a5d0cad362917fe8f4ee7aae
MD5 b253b4c5d9dcb2e8f495737f6aa7460f
BLAKE2b-256 7e85849a5f0e352885f95aa2a94164161980ddec37a538334de5d08a09642506

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page