This demo uses the Google AppEngine as a data store for users to pin photos on a map with server side scripting in Python. You can read about a similar demo that uses Google Spreadsheets for persistence here.

Two AppEngine tables are used, one for the photos and one for comments on the photos. The html map page reads the photo data using a JSON format feed created by a Python script. Updates are made using HTML forms with Python scripts handling the HTTP POSTs to update the data store.

The Python source for the demo is here. A very small amount of Django templating is used to get the login/logout markup on to the map page.

The AppEngine Users API is used so that you have to be logged on, via a Google account, to 'pin' a photo. You can only 'repin' or 'unpin' photos using the same account that they were 'pinned' from (the administrator's login can delete any photo). Comments can be posted on photos. If you are logged on, you are identified as a comment's poster by your Google nickname, otherwise your comment is annonymous. Currently, the Users API returns an email address as a user's nickname.

More interesting features:

  • A dynamic script tag is used to load new photos so that their original pixel width and height can be obtained. These are used to preserve aspect ratio when the photos are scaled for thumbnails and InfoWindow contents.
  • With the appspot.com hosting, you can not use photo URL's copied directly from images displayed online by Google Picassa.

Here is the demo itself.