Desktop trip planner with Google Maps integration and automatic scanning for points of interest along a route or within a radius.
The user interface is in Romanian. Button names below are given in Romanian, with the English meaning in brackets.
Turist Pro is a trip-planning application that lets you:
- find and display points of interest on an interactive map
- plan custom routes through multiple destinations
- automatically scan for points of interest along the planned route
- manage your own database of places (imported from Excel)
- export routes to KML for GPS devices and apps
- Interactive Google Maps view
- 4 map types: Roadmap, Satellite, Hybrid, Terrain
- Add points by clicking on the map or by searching
- Drag & drop to reorder waypoints
- Visual preview of the planned route
- Configurable radius (10โ200 km)
- Multiple keywords per search
- Automatic quality filter (rating โฅ 4.0 for restaurants)
- Sort by distance or rating
- Automatic scanning along the planned route
- Configurable scan interval (5โ50 km)
- Configurable allowed deviation from the route (500 m โ 10 km)
- KML export with every point found
- Detailed logging to text files
- Import from Excel (.xlsx)
- Predefined column structure:
- name, community size, patron saint (hram), type, year
- GPS coordinates
- region, archdiocese, metropolis
- web links
- Unique IDs generated automatically
- Separate visual layer on the map
- Filter by rating (1โ5 stars)
- Filter by number of reviews
- Filter by source (custom / Google)
- Sort by distance or popularity
- Search within the results
- Recently used routes
- User preferences
- Favourite keywords
- Map position
- Scan settings
- Python 3.8+
- PySide6 (Qt 6): desktop GUI
- Google Maps Platform: Maps JavaScript API, Places API, Directions API
- googlemaps (Python client for the Google Maps APIs)
- OpenPyXL: Excel import
- python-dotenv, requests
pip install PySide6 googlemaps openpyxl python-dotenv requests- Get an API key from the Google Cloud Console.
- Enable these services:
- Maps JavaScript API
- Places API
- Directions API
- Create a
.envfile in the application folder:
GOOGLE_MAPS_API_KEY=your_api_key_hereturist_pro_v05/
โโโ turist_pro_v05.py # main application
โโโ custom_data_manager.py # custom data manager
โโโ .env # API key (never commit it!)
โโโ map_template.html # map template
โโโ Logs/ # log folder (created automatically)
โโโ date_custom.xlsx # (optional) custom data file
python turist_pro_v05.py- Option 1: click on the map
- Option 2: search in the text field at the top
- Option 3: the "๐ Locaศie Curentฤ" button (current location, via IP geolocation)
- Set the search radius (slider, 10โ200 km).
- Enter keywords (e.g. "bisericฤ" = church, "mฤnฤstire" = monastery, "muzeu" = museum).
- Click "๐ Cฤutare Radialฤ" (radial search).
- Review the results in the "Rezultate" (results) tab.
- Add waypoints:
- click "Adaugฤ Waypoint" (add waypoint) and search for the place,
- or click directly on the map while waypoint mode is active.
- Reorder them by drag & drop in the list.
- Remove unwanted points with the "๐๏ธ" button.
- Click "๐ฏ Calculeazฤ Rutฤ" (calculate route) for a preview.
- Click "๐ SCANARE LINIARฤ" (linear scan) to search along the route.
Parameters:
- Scan interval: distance between search points (5โ50 km)
- Google deviation: how far from the route to search Google Places (500 m โ 10 km)
- Custom deviation: how far from the route to include custom places (0.5โ20 km)
After the scan:
- results appear in the "Rezultate" tab
- a detailed log file is written to
Logs/ - the "๐พ EXPORT KML" button becomes active
- every point is marked on the map
After a linear scan:
- Click "๐พ EXPORT KML".
- Choose the folder and file name.
- The file contains:
- the full route
- all waypoints
- all places found
- details for each place (rating, number of reviews, types)
The column headers stay in Romanian, because the application reads them that way.
| Column | Index | Header | Meaning | Format | Example |
|---|---|---|---|---|---|
| C | 2 | Nume | name | text | "Biserica Sf. Nicolae" |
| D | 3 | Vieศuitori | community size | number | "5000" |
| E | 4 | Hram | patron saint | text | "Sf. Nicolae" |
| F | 5 | Tip | type | text | "Bisericฤ" |
| G | 6 | An | year | number/text | "1850" |
| H | 7 | Coordonate | coordinates | "lat,lng" | "47.1585, 27.6014" |
| I | 8 | Regiune | region | text | "Moldova" |
| J | 9 | Arhiepiscopie | archdiocese | text | "Iaศi" |
| K | 10 | Mitropolie | metropolis | text | "Moldovei" |
- The first row is the header and is skipped.
- Coordinates can be separated by
,or;. - Empty cells are filled automatically with "-".
- Web links: put a hyperlink on the cell in column C (name).
- Unique IDs are generated from name + coordinates.
C: Biserica Vovidenia (with a hyperlink to its website)
D: 3500
E: Sf. Maria
F: Bisericฤ
G: 1803
H: 47.1585, 27.6014
I: Moldova
J: Iaศi
K: Moldovei ศi Bucovinei
- Restaurants / cafรฉs / bars: minimum rating 4.0, applied automatically
- Other categories: no rating filter
- Filtering by number of reviews is available in the UI
# Maximum distance for "nearby" in radial mode
MAX_RADIAL_SEARCH = 200_000 # metres
# Default interval between scan points
DEFAULT_SCAN_STEP = 20 # km
# Default deviation from the route
DEFAULT_DEVIATION_GOOGLE = 3000 # metres
DEFAULT_DEVIATION_CUSTOM = 5000 # metresA log file is written automatically for every scan:
Logs/
โโโ scan_2025-01-28_143522.txt
- timestamp for every action
- scan parameters used
- number of scan points
- a detailed table for each candidate:
- name (max. 32 characters)
- rating
- number of votes
- deviation from the route
- status (accepted / skipped)
- final statistics
[14:35:25] [INFO] ๐ Puncte de scanare (Pioneze): 8
[14:35:26] [DATA] ๐ PUNCT SCANARE 1/8 ((47.158, 27.601))
[14:35:26] [DATA] ๐ Keyword 'restaurant': 12 candidaศi brut.
[14:35:26] [DATA] NUME | RAT. | VOTURI | ABATERE | STATUS
[14:35:26] [DATA] ------------------------------------------------------------------------------------------
[14:35:26] [DATA] Restaurant Panoramic | 4.5 | 324 | 1250m | โ
ACCEPTAT
[14:35:26] [DATA] Bistro La Castel | 3.8 | 89 | 890m | โ SKIP CALITATE (3.8<4.0)
pip install pyinstaller
pyinstaller --onefile --windowed \
--add-data "map_template.html;." \
--add-data ".env;." \
--icon=icon.ico \
--name="TuristPro" \
turist_pro_v05.py# Distance between two coordinates
haversine_distance(lat1, lon1, lat2, lon2) -> float
# Decode a Google polyline
decode_polyline(polyline_str) -> List[Tuple[float, float]]
# Distance from a point to a line segment
point_line_distance(point, start, end) -> float- Check the
.envfile. - Make sure the APIs are enabled in the Google Cloud Console.
- Check the key restrictions (IP, referrer).
- Check your internet connection.
- Check the JavaScript console (Debug menu).
- Regenerate the map (menu โ Regenerare Hartฤ).
- Check the Excel structure (correct columns).
- Check the coordinate format (lat,lng).
- Check the logs for import errors.
- Use fewer keywords.
- Increase the scan interval.
- Reduce the search radius.
- โ Logging to console and file
- โ Detailed table for every scan candidate
- โ Working KML export
- โ Custom data manager with 3 new columns
- โ Automatic quality filtering
- โ Improved UI with tabs and icons
- โ Saving and restoring the application state
Private project. All rights reserved.
Mihai Mereu (github.com/mmereu97). Built to plan tourist routes and discover points of interest across Romania, including its monasteries and churches.
Version: 0.5 ยท Date: November 2024
