Script: Geotagged Photos to GIS

One of the data deliverables to the NJ National Guard as part of our GIS Internship program is photo and video documentation of the state’s Readiness Centers. There’s even a SDSFIE (a somewhat complicated, cumbersome data schema) entity type specifically for the location where photographs were taken. (Aside: it’s not surprising that “photograph_location_point” is in SDSFIE, because it seems like everything is in SDSFIE.) We have some cameras that have integrated GPS, so we’ve used them for documenting the field work. The problem was, “how do we get geotagged photos into GIS?”

I think it’s somewhat ridiculous that ArcGIS Explorer has the ability to add geotagged photos to the map, but ArcGIS Desktop doesn’t have a built-in means of recognizing geotagged photos. ArcCatalog already examines JPGs it finds for additional information in the case that the JPG is a spatially-aware aerial photo or a rectified map. Even a tool for creating a feature class out of geotagged photos would be great.

Well, ArcToolbox allows you to write your own custom tools through either ModelBuilder (ESRI’s flowchart-based analysis modeling component) or scripts written in Python. I wrote the following script to take a directory of images and for those .JPGs with GPS data in the Exif metadata, create a point feature class containing the spatial location of the photo, along with the photo’s name and complete pathname.

You can download the script (along with a configured tool for use in ArcToolbox) here. The script is GPLv3-licensed. It requires the Python Imaging Library, which takes only a minute or two to install.

I’m pleased with the results. ArcGIS 9.3 recognizes path names in attribute fields and makes them links accessible through the Identify window. You can go from a folder of geotagged pictures to an interactive layer in ArcGIS in under a minute.

If you have any questions about the script, leave them in the comments or email them to me. Also, if you find any bugs (Exif data varies somewhat from camera manufacturer to manufacturer), let me know and I’ll try to squash them.

Happy geotagging!

This entry was posted in Data, ESRI, Visualization and tagged , , , , , . Bookmark the permalink.

8 Responses to Script: Geotagged Photos to GIS

  1. Alper says:

    This is a great script, thank you for all your efforts. I may give an idea to enhance the script if possible. I generally direct it to folders that contains both videos and photos. Result is an error code. Filtering the folder contents for “photos only” before processing may help.

  2. Thomas Emge says:

    John,

    there is a tool out there called ArcPhoto. You might want to give it a try at http://resources.esri.com/arcgisdesktop/dotnet/index.cfm?fa=codeGalleryDetails&scriptId=16492 (for ArcGIS 9.2 til 9.3.1)
    and http://resources.arcgis.com/gallery/file/geoprocessing/details?entryID=8C3643DC-1422-2418-8836-CF0510413D40 (for ArcGIS 10)

    – Thomas

  3. Edward S says:

    hello John,

    thank you for developing such a great tool.

    However, i am having trouble running it. whenever i try to create the shapefile, it returns an error saying “: argument of type ‘NoneType’ is not iterable
    Failed to execute (GeotaggedPhotosToFC).”

    I am running ArcGIS 9.3, Windows 7 32 bit with 4GB RAM.

    What can i do to fix it?

    Thank you.

    • John Reiser says:

      Edward,

      Where did you find my tool? I updated the script to better handle null values in Exif data, however because it has been reposted (ArcScripts and elsewhere) I’m not sure if you have the latest version. I believe I put a date in the header of the script, what date is your copy? If it is the most current version, you should email me (jr@njgeo.org) one of your geotagged photos and I’ll take a look to see why the file is not read properly.

  4. Shawn says:

    Hello, I am with the Forest Service, and am trying to use your tool. Maybe I am dense, but I can’t figure out how to get it all working. Do you have any instructions that you have put together, by chance? If so, would you please email them to me?

    Many thanks!

  5. Thank you so much for creating a tool that should be included by default in the toolchain. I really appreciate you your time and effort and for releasing it to the public. Good luck with your other projects!

  6. Chris says:

    I’ve tried the program but ourred the following error:
    : ERROR 000354: The name contains invalid characters
    Failed to execute (CreateFeatureclass).
    What could be the reason?

    Thanks,

    Chris