Quick-and-Dirty Geotagging with a Bash Script

Productivity Sauce
When you need to quickly geotag a bunch of photos with an approximate location (e.g., city and country), a simple Bash shell script can help you to do it much faster than a heavy-weight application like digiKam. The script uses the Nominatim service to perform forward geocoding (i.e., obtain the geographical coordinates of a given place name) and a combination of curl, jq and tr tools to extract the latitude and longitude values. It then uses the ExifTool to write the obtained coordinates to all JPEG files in the current directory. To install jq and ExifTool on Debian and Ubuntu-based distributions, run the apt-get install curl jq libimage-exiftool-perl command as root.
To deploy the script, copy and paste the code below into a new text file and save it under the geotag name.
#!/bin/bash lat=$(curl "http://nominatim.openstreetmap.org/search?city=$1&country=$2&format=json" | jq '.[0] | .lat' | tr -d '"') lon=$(curl "http://nominatim.openstreetmap.org/search?city=$1&country=$2&format=json" | jq '.[0] | .lon' | tr -d '"') exiftool -GPSLongitude=$lon -GPSLatitude=$lat -ext jpg .
Copy the script to the /usr/sbin directory, and change the script's permissions to make it executable:
sudo cp geotag /usr/local/bin/ sudo chown root:root /usr/local/bin/geotag sudo chmod 755 /usr/local/bin/geotag
To geotag photos using the script, run the geotag command followed by the desired city and country, for example: geotag tokyo japan
Here is how the script works. The curl tool uses a HTTP request to fetch geographical data for the specified city in the JSON format. Sometimes this request returns an array of places that match the specified criteria. In most cases, the first item in the array is the relevant one. So when the JSON output is piped to the jq command, it extracts the latitude and longitude values from the first item in the array. The tr tool then strips quotes around the latitude and longitude values, and the ExifTool writes them into all JPEG photos in the current directory.
comments powered by DisqusIssue 262/2022
Buy this issue as a PDF
News
-
The 14" Pinebook Pro Linux Laptop is Shipping
After a considerable delay, the 14" version of the Pinebook Pro laptop is, once again, available for purchase.
-
OpenMandriva Lx ROME Technical Preview Released
OpenMandriva’s rolling release distribution technical preview has been released for testing purposes and adds some of the latest/greatest software into the mix.
-
Linux Mint 21 is Now Available
The latest iteration of Linux Mint, codenamed Vanessa, has been released with a new upgrade tool and other fantastic features.
-
Firefox Adds Long-Anticipated Feature
Firefox 103 has arrived and it now includes a feature users have long awaited…sort of.
-
System76 Refreshes Their Popular Oryx Pro Laptop with a New CPU
The System76 Oryx Pro laptop has been relaunched with a 12th Gen CPU and more powerful graphics options.
-
Elive Has Released a New Beta
The Elive team is proud to announce the latest beta version (3.8.30) of its Enlightenment-centric Linux distribution.
-
Rocky Linux 9 Has Arrived
The latest iteration of Rocky Linux is now available and includes a host of new features and support for new architecture.
-
Slimbook Executive Linux Ultrabook Upgrading Their CPUs
The Spanish-based company, Slimbook, has made available their next generation Slimbook Executive Linux ultrabooks with a 12th Gen Intel Alder Lake CPU.
-
Fedora Linux is Coming to the Raspberry Pi 4
Thanks to significant work in the upstream, the upcoming release of Fedora 37 will introduce support for the Raspberry Pi 4.
-
New Linux Ultrabook from TUXEDO Computers
TUXEDO Computers has released a new 15" Ultrabook running Linux.