Advertisement
Arris

Get GPS data

Nov 18th, 2017
309
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // --------------------------
  2. // install:
  3. // npm install exif
  4.  
  5. var ExifImage = require('exif').ExifImage;
  6. var fs = require('fs');
  7.  
  8. isEmpty = function(obj) {
  9.     return Object.keys(obj).length === 0;
  10. }
  11.  
  12. exif_get_gpsdata = function(exif )
  13. {
  14.     var gps = exif.gps;
  15.     if ( isEmpty(gps) ) {
  16.         return null;
  17.     }
  18.  
  19.     var lat = gps.GPSLatitude   || null;
  20.     var lon = gps.GPSLongitude  || null;
  21.  
  22.     if (!lat || !lon) {
  23.         return null;
  24.     }
  25.  
  26.     //Convert coordinates to WGS84 decimal
  27.     var latRef = gps.GPSLatitudeRef || "N";
  28.     var lonRef = gps.GPSLongitudeRef || "W";
  29.  
  30.     lat = (lat[0] + lat[1]/60 + lat[2]/3600) * (latRef == "N" ? 1 : -1);
  31.     lon = (lon[0] + lon[1]/60 + lon[2]/3600) * (lonRef == "W" ? -1 : 1);
  32.  
  33.     var imgDir = gps.GPSImgDirection || NaN;
  34.  
  35.     var altRef = gps.GPSAltitudeRef || NaN;
  36.  
  37.     var alt = gps.GPSAltitude || 0;
  38.     var alt = gps.GPSAltitude * (altRef == 0 ? 1 : -1);
  39.  
  40.     return {
  41.         'lat' : lat.toFixed(6),
  42.         'lon' : lon.toFixed(6),
  43.         'alt' : alt.toFixed(1),
  44.         'dir' : imgDir.toFixed(3)
  45.     }
  46. }
  47.  
  48.  
  49. // --------------------------
  50. if (process.argv.length <= 2) {
  51.     console.log("Usage: " + __filename + " path/to/directory");
  52.     process.exit(-1);
  53. }
  54. var path = process.argv[2];
  55.  
  56. var files_list = fs.readdirSync(path);
  57.  
  58. var total_files = 0;
  59. var valid_files = 0;
  60.  
  61. files_list.map(function (fn) {
  62.     var filename = path + '\\' + fn;
  63.  
  64.     total_files++;
  65.     new ExifImage({ image : filename }, function (error, exifData) {
  66.  
  67.         if (!error) {
  68.             var data = exif_get_gpsdata( exifData );
  69.             if (data) {
  70.                 valid_files++;
  71.                 console.log(filename + ' -> Lat: '+data.lat+', Lon: '+data.lon+', Alt: '+data.alt+', Dir: '+data.dir );
  72.             }
  73.         }
  74.     });
  75. })
  76. console.log();
  77. console.log('Total files: ' , total_files);
  78. console.log('Valid files: ', valid_files);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement