2007-05-01

GPS-Koordinaten in EXIF-Infos nachführen

Angeregt durch ein Mail von Alexander Klein und einen Artikel in der aktuellsten c’t 10/2007 will ich jetzt doch noch erklären, wie die GPS-Positionen aus meinem ersten Artikel von der Karte in die Bilder gelangen.

In der Karten-Seite befindet sich ein HTML-Formular, das die Eingabe von Breite und Länge erlaubt:

<form method="post" action="exifupd.php">
    <input type="hidden" name="image" value="<?php echo $image ?>" />
    <label for="lat">Latitude:</label>
    <input type="text" id="lat" name="lat" /><br />
    <label for="lon">Longitude:</label>
    <input type="text" id="lon" name="lon" /><br />
    <button type="submit">Update</button>
</form>

Die Werte im Formular werden per JavaScript im onclick() Event der Karte gesetzt:

GEvent.addListener(gMap, 'click', function(obj, pos) {
    document.getElementById('lat').value = pos.lat();
    document.getElementById('lon').value = pos.lng();
});

exifupd.php setzt die Koordinaten via ein Python-Skript ins Bild hinein. Die relevante Zeile des Update-Skripts ist diese:

exec("sudo -u me /home/me/bin/gpstag '{$_POST['lat']}' '{$_POST['lon']}' '{$_SERVER['DOCUMENT_ROOT']}{$_POST['image']}'", $result, $rc);

Der Python-Skript gpstag benötigt seinerseits exiv2, ein Kommandozeilen-Tool zum Bearbeiten von EXIF-Infos.

Diese zwei Zeilen in /etc/sudoers ermöglichen sudo, dass www-data, der User, als der mein Webserver läuft, in meinem Namen das Programm gpstag ausführen darf:

# Apache may update GPS data in images
www-data        ALL = (me) NOPASSWD: /home/me/bin/gpstag

Das Bearbeiten von sudoers erfordert root-Rechte und sollte immer mit dem Befehl visudo geschehen.

Als letztes wird der Update-Skript noch mit einem Eintrag in .htaccess passwortgeschützt:

# Password protection for GPS updates

<Files exifupd.php>
    AuthType Basic
    AuthName "GPS Update"
    AuthUserFile /home/me/lib/htpasswd/php
    Require valid-user
</Files>

Wie man ein Passwort-File bereitstellt, ist unter man htpasswd nachzulesen.

20:27 [/software/php] exif_gps_update Google Trackback
Tags: