Script: Extract the Numerical GPS Values Using an Apple Script

by: 
Last modified: Jun 14, 2016 11:15 PM
4 10175 Last modified Jun 14, 2016 11:15 PM

Photos for Mac will display photos on a map, if the photos have been tagged with GPS data, but it does not show the numerical values for the GPS coordinates.


This little script will display latitude, longitude, altitude for the currently selected photo in a panel and copy the coordinates to the clipboard:

It works best, when the photo has been selected in the "All Photos" album. Other albums and views may produce errors.


GPS tags are read only in the Apple Script dictionary for Photos, so it is not possible to use this kind of scripts to edit the GPS tags. We can only read and display them.


-- This script will display the GPS values and the altitude for a selected photo in a dialog panel.

-- The coordinates will be copied to the clipboard


on ensure_val(the_value, default_value)


-- if the_value is defined return the value, otherwise the default value

if the_value is equal to "missing value" then

return default_value

else

return the_value

end if

end ensure_val


-- on run {}

tell application "Photos"


activate


set imageSel to (get selection) -- get the selected image


if imageSel is {} then

error "Please select an image."

end if

tell the first item of imageSel

set loc to get the location--retrieve longitude and latitude as list

set lati to (the first item of loc) as string

set longi to (the second item of loc) as string

set alti to get the altitude as string-- retrieve the altitude

end tell


end tell


-- check for undefined values

set lati to ensure_val(lati, "latitude empty")

set longi to ensure_val(longi, "longitude empty")

set alti to ensure_val(alti, "altitude empty")


-- display the result in a dialog panel

set panel_message to "Latitude: " & lati & "

Longitude: " & longi & "

Altitude: " & alti & "


Copied to the clipboard"

display dialogpanel_messagebuttons ¬

"OK" with iconcautiondefault button "OK"


-- copy the GPS data to the clipboard

set clipboard_message to " " & lati & " " & longi & " " & alti

set the clipboard toclipboard_message


return clipboard_message


-- end run


Here is a second version, that you can try, if your library is a large iCloud Photo Library. Then the script may give errors, if the photos have not been selected in the "All Photos" album.

There is a work-around for this problem proposed by NicFletcher: Don't ask for the current selection, but add the photos you want to process to an album with a fixed name.

  • Create an album with a fixed name - mycurrentselection or similar - and add all photos you want to process to this album.
  • Instead of the "get current selection" process the photos in this album.


Here is a sample Apple Script by NicFletcher that uses this method:

https://discussions.apple.com/thread/6999613?answerId=28087786022#28087786022



I modified my script a bit to include Nic's fix. Also I added some code to catch errors and to try again on error after a short delay.


-- This script will display the GPS values and the altitude for a selected photo in a dialog panel.

-- The coordinates will be copied to the clipboard


-- to pass the mage to be processed create a top level album named PhotoDropBox

-- Add the photo as the first item to this album.

-- If you want to ccall this album differently, set the variable "theAlbumName" to this name.


on ensure_val(the_value, default_value)


-- check if a value is defined and set it to the default, if it is undefined


-- if the_value is defined return the value, otherwise the default value

if the_value is equal to "missing value" then

return default_value

else

return the_value

end if

end ensure_val


--on run()

set ReadFromAlbum to true-- set this to true, if you want to pass the photos in a toplevel album

set theAlbumName to "PhotoDropBox" -- Enter the name of your album here.



set imageSel to {}


tell application "Photos"


activate

if (ReadFromAlbum) then -- the photos will be passed in a toplevel album named "PhotoDropBox"


try


if existscontainertheAlbumName then


set thePhotosBuffer to containertheAlbumName

set imageSel to every media item of thePhotosBuffer

else

error "Album " & theAlbumName & "does not exist"

end if


on error errTexttwonumbererrNumtwo

display dialog "Cannot open album: " & errNumtwo & return & errTexttwo

end try


else -- process the selected photos from the All Photos album

try

set imageSel to (get selection)

on error errTexttwonumbererrNumtwo

display dialog "Cannot get the selection: " & errNumtwo & return & errTexttwo

end try


end if



-- check, if the album or the selected photos do contain images

if imageSel is {} then

error "Please select an image."

else



-- repeat with im in imageSel

try


tell the first item of imageSel

set loc to get the location--retrieve longitude and latitude as list

set lati to (the first item of loc) as string

set longi to (the second item of loc) as string

set alti to get the altitude as string -- retrieve the altitude

end tell

on error errText number errNum

display dialog "Error: " & errNum & return & errText & "Trying again"

try

delay 2

tell the first item of imageSel

set loc to get the location--retrieve longitude and latitude as list

set lati to (the first item of loc) as string

set longi to (the second item of loc) as string

set alti to get the altitude as string -- retrieve the altitude

end tell


on error errTexttwonumbererrNumtwo

display dialog "Skipping image due to repeated error: " & errNumtwo & return & errTexttwo

error "giving up"

end try

end try


-- end repeat

end if

end tell


-- check for undefined values

set lati to ensure_val(lati, "latitude empty")

set longi to ensure_val(longi, "longitude empty")

set alti to ensure_val(alti, "altitude empty")


-- display the result in a dialog panel

set panel_message to "Latitude: " & lati & "

Longitude: " & longi & "

Altitude: " & alti & "


Copied to the clipboard"

display dialogpanel_messagebuttons ¬

"OK" with iconcautiondefault button "OK"


-- copy the GPS data to the clipboard

set clipboard_message to " " & lati & " " & longi & " " & alti

set the clipboard toclipboard_message


return clipboard_message


-- end run

Welcome to Apple Support Community
A forum where Apple customers help each other with their products. Get started with your Apple ID.