const { exec } = require('child_process'); // ----------------------------------------------------------------------------- // FOTO: GPS da ExifReader // ----------------------------------------------------------------------------- function extractGpsFromExif(tags) { if (!tags?.gps) return null; const lat = tags.gps.Latitude; const lng = tags.gps.Longitude; const alt = tags.gps.Altitude; if (lat == null || lng == null) return null; return { lat: Number(lat), lng: Number(lng), alt: alt != null ? Number(alt) : null }; } // ----------------------------------------------------------------------------- // VIDEO: GPS via exiftool (VERSIONE ORIGINALE CHE FUNZIONA) // ----------------------------------------------------------------------------- function extractGpsWithExiftool(videoPath) { //console.log(videoPath); return new Promise((resolve) => { const cmd = `exiftool -n -G1 -a -gps:all -quicktime:all -user:all "${videoPath}"`; exec(cmd, (err, stdout) => { if (err || !stdout) return resolve(null); // 1) GPS Coordinates : const userData = stdout.match(/GPS Coordinates\s*:\s*([0-9.\-]+)\s+([0-9.\-]+)/i); if (userData) { return resolve({ lat: Number(userData[1]), lng: Number(userData[2]), alt: null }); } // 2) GPSLatitude / GPSLongitude const lat1 = stdout.match(/GPSLatitude\s*:\s*([0-9.\-]+)/i); const lng1 = stdout.match(/GPSLongitude\s*:\s*([0-9.\-]+)/i); if (lat1 && lng1) { return resolve({ lat: Number(lat1[1]), lng: Number(lng1[1]), alt: null }); } // 3) GPSCoordinates : const coords = stdout.match(/GPSCoordinates\s*:\s*([0-9.\-]+)\s+([0-9.\-]+)/i); if (coords) { return resolve({ lat: Number(coords[1]), lng: Number(coords[2]), alt: null }); } resolve(null); }); }); } module.exports = { extractGpsFromExif, extractGpsWithExiftool };