
A powerful, privacy-focused, browser-based tool to visualize and analyze GPS data from your photos. Simply drag and drop images to generate interactive maps, heatmaps, elevation profiles, and trip statistics.
A powerful, privacy-focused, browser-based tool to visualize and analyze GPS data from your photos. Simply drag and drop images to generate interactive maps, heatmaps, elevation profiles, and trip statistics.
I've always wanted a self-hosted tool to analyze my photos and turn them into maps. Then came my Croatian vacation, where the wind decided my hammock was its mortal enemy. At 2 AM, sleep-deprived and slightly windburnt, I retreated to the beach and coded the entire core of this app on my phone like a complete maniac.
It's still a beautiful disaster—powered by sea breeze, insomnia, and questionable life choices. But shockingly, most of it actually works.
All translations besides Bavarian (which I painstakingly did myself, because I'm apparently that specific flavor of weird) were churned out by AI, mostly EuroLLM and Claude. So if German reads like a robot having a stroke, you know why.
![]() | ![]() | ![]() | ![]() |
|---|
| Interactive Map | Dark Mode | Elevation Profile | Overpass Import |
11 languages supported:
Your photos never leave your device!
All GPS extraction and processing happens entirely in your browser. No images are uploaded to any server. The only network requests are:
This means your personal photos and location data remain 100% private. Also, there is no logging at all from the app.
| Category | Technology |
|---|---|
| Frontend | HTML5, CSS3 (Vanilla), JavaScript (ES6+) |
| Mapping | Leaflet.js, Leaflet.heat, Leaflet.PolylineDecorator |
| EXIF Parsing | exifr |
| Charting | Chart.js |
| Export | dom-to-image |
| Backend | PHP 8.2+ (for asset serving and security headers) |
public/ directoryFor production use, deploy to any PHP-capable web server (Apache, Nginx with PHP-FPM, etc.)
gps-track-viewer/
├── public/ # Web root
│ ├── assets/
│ │ ├── js/ # Application JavaScript
│ │ │ ├── app.js # Main application logic
│ │ │ └── TrackParser.js # GPX/KML parsing
│ │ └── styles.css # Application styles
│ ├── lib/ # PHP classes
│ │ ├── Assets/ # Asset handling
│ │ ├── Security/ # Session & security
│ │ ├── View/ # Template rendering
│ │ └── Config.php # Configuration
│ ├── templates/ # PHP templates
│ │ └── app.php # Main application template
│ ├── vendor/ # Frontend libraries (Leaflet, etc.)
│ ├── index.php # Application entry point
│ └── router.php # Development server router
└── README.md
Contributions are welcome! Please feel free to submit issues and pull requests.
GPS Track Viewer is built on the shoulders of giants. We thank the developers and contributors of these amazing open-source projects:
If you find this useful and want to support:
Bitcoin (BTC): bc1q3lz8vxpk0rchqn6dq8g08rkcqts425csuvnjr2477uzdenak5n8sfds2ke
For questions, suggestions, or bug reports, please open an issue on GitHub.