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:
gps
exif
jpeg
google maps
php
python