#!/usr/bin/perl -- use Getopt::Std; use Image::ExifTool; use Image::ExifTool::Location; use Geo::GeoNames; my %Options; getopt('h', \%Options); if ( $Options{'h'} ) { print "Usage: geonametag.pl \n"; exit; } my $place = new Geo::GeoNames(); my $image = Image::ExifTool->new(); foreach $argnum (0 .. $#ARGV) { $filename = $ARGV[$argnum]; if ( -e $filename ) { $image->ExtractInfo($filename); my ($lat, $lng) = $image->GetLocation(); if ($lat ne '' && $lng ne '') { $placename = $place->find_nearby_placename( lat => $lat, lng => $lng, style=> "FULL", maxRows => 1, radius => 1 ); $areainformation = "$placename->[0]->{'name'}, $placename->[0]->{'countryName'}"; $image->SetNewValue('GPSAreaInformation', $areainformation); $image->WriteInfo($filename); print "$filename ($lat, $lng): $areainformation\n"; } else { print "$filename is not geotagged.\n"; } } else { print "$file: No such file.\n"; } }