(Born4Flight | FlyCamCzech)
Image Meta Locator is a lightweight desktop tool for extracting GPS metadata and visualizing photo locations on an interactive map. Designed with performance and elegance in mind, it supports drag-and-drop workflows, reverse geocoding, and smooth UI interaction for reviewing image coordinates, dates, and location data.
- Automatic Height Calculation: Calculate actual drone height above terrain using GPS altitude and terrain elevation data
- Negative Height Detection: Automatic detection and warning for inaccurate flight height data
- TIFF Orthomosaic Support: Upload orthomosaic TIFF files to extract actual map resolution for accurate calculations
- DJI Drone Presets: Pre-configured drone models with accurate GSD values:
- DJI Phantom 4 PRO (1.36 cm/px at 50m)
- DJI Phantom 4 (2.19 cm/px at 50m)
- DJI Mavic 2 PRO (1.17 cm/px at 50m)
- DJI Mavic 2 ZOOM (1.82 cm/px at 50m)
- Custom Drone Setup: Manual input for reference height and GSD values
- Ratio-Based Calculation: Professional photogrammetry formula:
Height = (Map_GSD / Drone_GSD) × Drone_Height - Manual Height Adjustment: Override calculated heights when they're incorrect (e.g., showing 3m instead of actual height)
- Manual Recalculation Button: "🔧 Recalculate" button available anytime, not just for negative heights
- Light Theme: Clean, professional white background design throughout
- Modern GUI: Responsive interface built with PySide6
- Professional Dialogs: Clean, modern height recalculation dialog with proper styling
- Visual Indicators: Clear distinction between calculated and manually adjusted heights
- Enhanced Status Messages: Better feedback for recalculation actions
- Drag & Drop Support: Effortlessly drag
.jpg,.tiff,.dngfiles into the app window - Image Preview: Instantly view the selected photo before extracting metadata
- TIFF Processing: Advanced support for orthomosaic TIFF files with rasterio
- Interactive Map: Built-in OpenStreetMap viewer shows the GPS location with a pinpoint
- Reverse Geocoding: Converts coordinates into a human-readable address using
geopy - Click-to-Copy: Copy full address, photo date, or coordinates with a single click
- Coordinate Format Toggle: Switch between decimal and WGS 84 (degrees, minutes, seconds) formats
- PDF Export: Generate professional PDF reports with original image, metadata, and location map
- High-Quality Output: Custom fccTYPO fonts and professional formatting
- Complete Analysis: Flight height analysis and recalculation data included in exports
- Manual Adjustment Marking: Properly marked manual adjustments in PDF reports
- Multiple Elevation APIs: Integration with free elevation services for accurate terrain data
- Flight Safety Warnings: Automatic warnings for negative heights or heights above 120m
- Smart Address Formatting: Automatic two-line formatting for better readability
- Live Connection Status: Status bar shows whether online services are available
- Optimized Performance: Uses lazy loading and background threads for smooth operation
- File Information: Filename and file format
- GPS Data: Latitude, longitude, altitude (if available)
- Flight Height Analysis:
- GPS altitude (total), terrain elevation, and actual drone flight height above terrain
- Multiple elevation data sources for accuracy
- Flight safety warnings and compliance checks
- Manual adjustment indicators when applicable
- Location: Reverse-geocoded address from coordinates
- Date/Time: Original photo capture date from EXIF
- Python 3.8+
- PySide6 >= 6.5.0
- PySide6-WebEngine >= 6.5.0
- Pillow >= 9.0.0
- rawpy >= 0.17.0
- exifread >= 3.0.0
- geopy >= 2.3.0
- requests >= 2.28.0
- reportlab >= 4.0.0
- rasterio >= 1.3.0
# Clone the repository
git clone https://github.com/Jakub-Espandr/ImageMetaLocator.git
cd ImageMetaLocator
# Install dependencies
pip install -r requirements.txt
# Run the application
python main.py- Start the app with
python main.py - Drag a supported image into the window, or use the file picker
- View metadata, map, and reverse-geocoded address
- Copy coordinates: Click on coordinates to copy them to clipboard
- Toggle coordinate format: Use the WGS 84 button to switch between decimal and degrees/minutes/seconds format
- Export PDF: Click "Export Results" to generate a professional PDF report
- Automatic Detection: When negative flight height is detected, a recalculation dialog opens automatically
- Manual Recalculation: Click the "🔧 Recalculate" button anytime to open the height recalculation dialog
- Upload TIFF: Select an orthomosaic TIFF file to extract actual map resolution
- Select Drone: Choose from DJI presets or use "Other" for custom parameters
- Manual Adjustment: If the calculated height is incorrect, enable manual adjustment and set the correct height
- Apply Changes: Click "Recalculate Height" to update the metadata
- Automatic: Uses GPS altitude and terrain elevation data
- TIFF-Based: Uses actual orthomosaic resolution with drone reference GSD
- Manual Override: Direct height input when calculations are incorrect
ImageMetaLocator/
├── main.py # Application entry point
├── core/ # Core functionality
│ ├── metadata.py # Metadata extraction and flight height analysis
├── ui/ # PySide6 GUI components
│ ├── main_window.py # Main application window
│ └── widgets.py # Custom widgets (dialogs, map, drop area)
├── utils/ # Helpers
│ ├── resources.py # Asset loading and management
│ └── config.py # Configuration utilities
├── assets/ # Icons, fonts, and styling
├── requirements.txt # Python dependencies
└── LICENSE # License information
This project is licensed under the Non-Commercial Public License (NCPL v1.0)
© 2025 Jakub Ešpandr – Born4Flight, FlyCamCzech
See the LICENSE file for full terms.
- Built with ❤️ using PySide6, Pillow, rawpy, exifread, geopy, reportlab, and rasterio
- Special thanks to the open-source community for elevation APIs and mapping services