Simon Zambrovski

"One Cannot Not Communicate" – Watzlawick

Browsing Posts published by Simon

In my previous posts I defined a number of use cases I want to process with. Especially, I was interested in GPS Tracking using a mobile phone and already posted about it. I tried to reuse my experiences with GPS Track for another GPS related subject: geo-tagging / geo-coding. The idea behind a geo-coded image is to embed the geographical coordinates in the image data. Mostly the information is stored using EXIF metadata. There are three approaches how to create geo-oded images:

  • Use a camera supporting GPS directly or some GPS add-on and put geo location in the time of image capture.
  • Assign the location to the images afterwards using e.G. Flickr and locating the image on the map manually.
  • Record the GPS track (Usecase 1.2) during the photo session and use time correlation information to assign location to images.

Surprising, but I want to tell about the third approach. For that you need a GPS track and some programs that read the timestamp from image metadata and search for the nearest (timely) track point in your track and write GPS coordinates (latitude, longitude, altitude) back to EXIF metadata of the image. Sounds like a simple batch process, doesn’t it?

Recording GPS data

The first setback I suffered was that my tracks recorded with GPS Track does not contain any time information. GPS Track program remove all timestamps, which makes the usage of the program impossible for the geo-tagging. I searched for an alternative and found GPS Log. It is available on a German page but the program supports English, German, Dutch and Polish.

After the installation on the J2ME enabled mobile phone supporting Bluetooth stack (JSR-83) you have to set up the program. The settings are started automatically, but can be changed later in the main menu. The basic part of the configuration is a search of the GPS receiver and setup of the log file. Go to device URL, devicelist, inquiry and select your GPS receiver. Then enable the logging and select an appropriate place, where the tracks can be saved.

gpslog001 gpslog002 gpslog003

The main menu of the program is structured as follows:

  • start/stop start/stop tracking
  • settings
    • device url the url of the GPS device, in form btspp://DEVICE-ID:com-port
      • devicelist list of available BT devices
        • inquiry start search for devices
    • filesystem a place where to write the track files
    • fileprefix name prefix of the track file
    • enable log write a track file?
    • enable vibration enable phone vibration
    • enable backlight switch backlight on?
    • enable sexagesian coordinates format the coordinates in grade, minute, second instead of fractional of grade
    • update interval time between two track points
    • manual interval if update interval set to manual – number of seconds between two track points
    • loglevel level of logging (for debugging purposes)
  • console java console
    • clear clears the console
    • save saves the console to a file
  • about version information (1.29 is the last currently available)
  • exit

After the simple configuration you are done and can (hopefully) see something similar on your display:

gpslog005

The resulting file is stored in NMEA 0183 format and contain the movement track. It can be transmitted to the workstation together with the images from you camera. Now you are ready for the offline part of the data processing.

Post processing

In the following I present three approaches for the same goal: read the time information of images and track points, find the correlation and write the results back.

Manual (GPSBabel, gps2photo)

I tried it manually first, following some instructions of a German computer magazine c’t. For using GPSBabel to convert from NMEA 0183 to GPX, the command for this is gpsbabel.exe -t -w -i nmea -f track.txt -o gpx -F track.gpxx where track.txt is NMEA file name and track.gpxx is the target file name. GPSBabel is very helpful, because additionally to the standards like NMEA it also supports vendor specific standards like Garmin, Magelan, Tom Tom and others. A useful front end can be found at GPSVisualizer. Then I used gps2photo Perl script, that writes the coordinates from GPX file to the corresponding images. The problem with that is, that you require a Perl installation (Active Perl in case of Windows) and Image::ExifTool and XML::Parser modules. The Active Perl 5.10 I installed only contain the latter, but not the first one, so I had to download and install it manually. After the installation you need to run perl gpsPhoto.pl –dir c:\photos –gpsfile c:\photos\track.gpxx for processing the directory of images c:\photos with a trackfile located in c:\photos\track.gpxx. I really got the result after hours of installation and configuration, I and swore never to repeat this. The resulting GPS tags are finally:
[source lang=”bash”]
GPSVersionID: 2, 2, 0, 0
GPSLatitudeRef: ‘N’
GPSLatitude: 53, 38, 18527/1537
GPSLongitudeRef: ‘E’
GPSLongitude: 9, 56, 40876/1671
GPSAltitudeRef: 1
GPSAltitude: 53
GPSTimeStamp: 15, 28, 41
GPSImgDirectionRef: ‘T’
GPSImgDirection: 0
GPSMapDatum: ‘WGS-84’
GPSDateStamp: ‘2008:01:06’
[/source]
During the writing of this article I looked on the Internet for some resources and found a list of software that can be useful for geo-tagging/geo-coding on the homepage of GPSlog. Because I only have a Windows workstation, I could try out GPicSync and PhotoMapper. For the Mac users the GPS Photo Linker seems to be a standard software.

GPicSync

GPicSync is a small free available program written in python that executes the steps above automatically. At the time of writing it is available in version 1.23 beta. In addition to simple geo-coding it supports export of the track as Google Earth KLM or Google Map, read directly NMEA or GPX, supports additional geo-tags and geo-names and supports camera RAW formats. Because I’m using a Canon Rebel XTi (EOS 400D) it is of utmost importance for me to geo-code the raw files directly. This feature makes this program to my favorite.

Copiks Photomapper

Photomapper allows to load GPS information file and images and write the GPS location back to the images. The export to Google Earth is also possible. The UI looks more advanced as in the case of GPicSync, but the program only supports JPEG images, so GPicSync remains my favorite.

For own development

In the time between my headache with manual tagging and finding of GPicSync I searched over the web for resources of reading and writing of EXIF metadata and parsing NMEA in Java. NMEA 0183 seems to be trivial, There are several interesting developments according to the EXIF subject:

  • jrawi is a Java library for reading images coded in “camera raw” format;
  • metadata extractor is a generic framework to read EXIF metadata. Currently only JPEG format is supported, but the authors mention that support of additional media types should be simple.
  • The most promising development seems to be Sanselan that should become an Apache project soon. In contrast to the others, it support writing of images, which makes it a first class candidate self-made solution. Unfortunately, Sanselan does not support RAW formats. I played around with the framework – it seems to be pretty convenient.

Technorati tags: , , , , , , , , , , , , ,

As most Java developers using Eclipse IDE, I prefer to use it for everything. All right, I’m not using Eclipse to control my media player, but I’m using it for publishing.

Since my project work, I’m a TeX user and not a MS Word user. Even if I’m pretty good in using old MS Office, I’m completely lost with MS Office 2007. Beside of this fact, I like the way how you create documents using LaTex because it is similar to coding – you write you source code and compile the output.

Publishing in LaTeX under Windows is possible using MikTeX. In addition you need an editor. Under Linux, one would use vi or emacs. For Windows several alternatives are possible: WinEDT that is good, but a commercial product or TexnicCenter which is a good freeware editor. The problem with both of them is: they only support editing and not other activities around the publishing. Especially, activity that is of utmost importance for me is versioning of the artifacts. Version control systems are excellent integrated in Eclipse, and with help of Texlipse you get the entire environment needed for LaTeX publishing.

One feature, I missed all the time using Texlipse was spell checking. It was supported by Texlipse since 2005, but I got it not configured. Today, after my professor told me once again to use a spellchecker, I promised to set up the Aspell inside of Texlipse. With some help from Gedankenstrom and reading the aspell help I got it. Here is a short description (I assume that Texlipse is successfully installed).

aspell

  1. Download Aspell.
  2. Install Aspell (to any! directory) and dictionaries.
  3. Open Preferences->Texlipse->Spell Checker
  4. Enter the Aspell command (a complete path to aspell.exe)
  5. Correct Aspell arguments to -a -t –lang=%language
  6. Open Preferences->Texlipse->Spell Checker->Environment
  7. Create a new environment variable with key: prefix and value:
    path-to-your-aspell-directory, using / insted of \.
  8. Press Ctrl + Shift + 6 for spell checking

Technorati tags: , , , ,

In order to be able to track the technology impact on this page, I introduce a new About page, that reveals the technological background of this site. I will also publish about the customizations I execute.

And I wish all of you a happy new year!

tags: , ,