Photo Gallery


As a lifelong traveler and enjoyer of adventures, I always through photographs did an excellent job of marrying together location, time, and experience into a rich datapoint – something I wanted to track throughout my life. I built a system to facilitate the capturing of this information to sometimes painstaking precision (e.g. I look at a photo’s geo coordinates to assign the correct timezone to the “date taken” piece of metadata..).

Today this project has expanded into a Photo Gallery  website that features over 10,000 photos and videos, organized into 300+albums, and close to 60 gigabytes of space (luckily on S3 this spaced costs less than $2 a month).  Visit the site here, or take a quick look at my geo-tagged photo footprint:

Google maps to be initialized here..

What: Custom website built to enable the cataloging of photos and videos, with support for photo metadata extraction, geo-tagging, user captioning, and easy search & retrieval.

Technologies: Ubuntu Linux, Postgres SQL Database with PostGIS extension, PHP, REST APIs, Amazon Web Services (S3, Elastic Transcoder), Google Maps JavaScript API v3, jQuery, asynchronous programming

Diagram displaying the various technologies used in my Photo Gallery project. The main coordinator is an Ubuntu Linux container, with a REST API written in PHP, which handles the bulk of photo metadata processing and retrieval. Amazon Web Services, specifically S3, is used for photo file storage. Metadata is stored in a Postgres database, and geospatial functionality include geotagging and location-based search is used throughout the application, taking advantage of Postgres's PostGIS extension. The Gallery also supports queued photo processing, and uses AWS's Elastic Transcoder Service to encode videos into acceptable HTML5 video formats (now mp4).

Start: December of 2012

Recent Improvements: In early 2017,  I migrated from MySQL intoPostgres/PostGIS. The main motivation for this was to take advantage of PostGIS’s geospatial features (location-based searching, storage of more complex geometries like polylines for hiking routes, etc.). Along with this migration, I realized that Postgres supported dates with timezones, and updated my existing photo data and import process to pay attention to dates with timezones. I also added support for uploading GPX tracks, which I had begun accumulating may of

Possible Future Improvements: Frontend re-vamp (current HTML & CSS is from 2012-2013), addition of GeoServer and proper OGC APIs like WFS and WMS (especially since my polyline data set is already larger than 1megabyte when sent over the wire in vector format; it would be nice to rasterize this data and expose it as a WMS layer instead).

Inspiration: This project grew out of the on-going frustration I faced with cataloging my travel photos in a single accessible location. What started as a simple custom CMS on a L.A.M.P. stack has grown to include technologies like AWS S3, and geo-spatially enabled functionality provided by PostGIS/Postgres.