69 lines
2 KiB
JavaScript
69 lines
2 KiB
JavaScript
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 : <lat> <lng>
|
|
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 : <lat> <lng>
|
|
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 };
|