# Find latitude/longitude in JPEG image files, # using ImageMagick "identify" # updated: 10/16/2015 # $debug = 0; while (<>) { undef $lat; undef $lon; /__END__/ && exit 0; chomp; print $_, "\n"; $v = `identify -verbose "$_" | grep -e 'GPS.*itudeRef:' -e Latitude: -e Longitude:` ; print $v, "\n"; $latref = $lonref = ''; if ( $v =~ qr{LatitudeRef: ([NESW])} ) { $latref = $1; } if ( $v =~ qr{LongitudeRef: ([NESW])} ) { $lonref = $1; } if ( $v =~ qr{Latitude: (\d+)/(\d+), (\d+)/(\d+), (\d+)/(\d+)}m ) { $debug && printf "%s %s %s %s %s %s\n", $1, $2, $3, $4, $5, $6; $d = $1/$2; $m = $3/$4; $s = $5/$6; $lat = $d + ($m/60) + ($s/3600); $debug && print "d=$d, m=$m, s=$s, lat=$lat\n"; } if ( $v =~ qr{Longitude: (\d+)/(\d+), (\d+)/(\d+), (\d+)/(\d+)}m ) { $debug && printf "%s %s %s %s %s %s\n", $1, $2, $3, $4, $5, $6; $d = $1/$2; $m = $3/$4; $s = $5/$6; $lon = $d + ($m/60) + ($s/3600); $debug && print "d=$d, m=$m, s=$s, lon=$lon\n"; } if (! defined($lat) or ! defined($lon)) { print "no latitude or longitude found\n"; next; } if ($lat =~ /\d/ && $lon =~ /\d/) { printf("lat, lon = %f, %f\n", $lat, $lon); printf("http://maps.google.com/maps?q=%s%f,%s%f\n", $latref, $lat, $lonref, $lon); print "--\n"; } } # exif:GPSLatitudeRef: N # exif:GPSLongitude: 97/1, 56/1, 2931/100 # exif:GPSLongitudeRef: W # exif:GPSTimeStamp: 20/1, 14/1, 8/1 __DATA__ photo 1.JPG __END__