Originally published November 12, 2018 on LinkedIn.
Geotagged images are taken constantly, usually by people with smartphones, perhaps even by people unaware that latitude-longitude information is embedded in the header of the images. For many casual users, seeing these images in a smartphone’s built-in Photo app with a simple map feature is all the mapping they’ll want. But for the carto-literati, nothing short of a photo-map service and map will suffice.
This post walks through Python 3 code that uses the Python Imaging Library (PIL) and ArcGIS Online API for Python to extract geotag info, build a CSV, and publish the data out as an ArcGIS Online data service. The required software stack looks like this:
- Python 3.x
- Jupyter Notebooks
- ArcGIS Online API for Python
- This workflow also assumes your images are stored in a local Dropbox folder(or similar file synchronization tool).
The sample Python code can be found on GitHub. The sample of the ArcGIS Online map is above and in the article header graphic. After getting the stack installed, you’ll need to download the sample script and enter your:
- Local Dropbox folder path
- Web URL to the shared Dropbox folder
- Your ArcGIS Online details
My sample images included 150+ iPhone images of a recent trip to Italy. The first block of Python code uses PIL to read the image headers and write out a CSV to the root image folder. Because the images are local, this section of the script runs very quickly. You can stop here if you just want the CSV file or run the second code block to publish the CSV to your ArcGIS Online account. From there, add your new map layer to a map and share! Your markers will be clickable with a link to your images.
Using geotagged images can be a great way to capture verifiable data in a project-based learning or citizen science exercise. Students can collect data with photographs, share their images to a DropBox file request, and then use this script to map the pictures.