#!/bin/bash
# KR - q&d, 2014-01-02
function abs ()
{
declare -i res
res=$1
if [[ $res -lt 0 ]]
then
let "res *= (-1)"
fi
eval $1="$res"
}
function containsElement ()
{
local e
for e in "${@:2}"; do [[ "$e" == "$1" ]] && return 0; done
return 1
}
echo
echo "Viele Kameras speichern Datum/Uhrzeit, nicht aber die Position per gps"
echo "Dieses Script liest eine gpx-Datei und sucht in den trackpoints nach einem Datum, dass"
echo "möglichst nah an der exif-Information der Fotos liegt"
echo "Verwende das Tag DateTimeOriginal, da dies von meiner Kamera geliefert wird"
echo "(eventuell ist hier eine Anpassung des Scripts fuer andere Kameras noetig)"
echo "In die gpx-Datei wird dann ein waypoint aufgenommen, der den Namen des Fotos traegt"
echo "Damit kann das Bild dann von JBs gpxViewer angezeigt werden"
echo "Die originale gpx-Datei wird als backup gespeichert."
echo
echo "Da ich direkt beim ersten Versuch eine Abweichung von einer Stunde hatte (MESZ vs UTC), wird ein Zeit-Shift
eingebaut. (Eingabe unten). Das Datum des Fotos wird fuer die Berechnung veraendert.
GPS-Daten sind laut wikimedia in utc angegeben, wie eine Kamera speichert weiss ich nicht, daher ist die
Korrektur vorgesehehen. Es sind Angaben in Stunden oder Sekunden moeglich,
da evtl. auch mal die Zeit bei einem der Geraete verstellt ist..."
echo
echo "Beispielaufruf: insertPhotoWaypoints.sh 2013-08-01-Donnerstag*jpg 2013-08-01-Felsentor.gpx"
if [[ $# -lt 2 ]]
then
echo -e "\n -> Fehler: Anzahl Parameter stimmt nicht"
exit
fi
nargs=$#
files=("$@")
echo ${files[@]}
gpx=${files[$((nargs-1))]}
unset files[$((nargs-1))]
let nargs--
echo -e "\nBild-Dateien: " ${files[@]}
echo "GPX-Datei: " $gpx
echo "Stundenkorrektur (Berechnung Foto Datum wird geschoben, zb +1 / -1) Stress mit Sommerzeit und so :-) [0]"
echo "Angabe auch in Sekunden möglich, z.B. 1800s oder -1800s (vgl. Delta der Ausgabe) Kommazahlen nicht moeglich"
read tshift
if [[ "$tshift". == "." ]]
then
tshift=0
else
right=${tshift:(-1)}
if [[ $right == 's' ]]
then
tshift=${tshift/s/}
let "tshift *= 1" #sicher int?
else
let "tshift *= 3600"
fi
echo "Shift in Sekunden: $tshift"
fi
echo "Enter: weiter, ctrl-c zum abruch, d -> dry, keine Aenderung, nur Analyse "
read dry
#template wegpunkt
wpTemplate='\n
\n
%ele\n
\n
%bildName\n
\n
\n
Scenic Area\n
\n'
declare -a wpA
declare -a posA
#datei in array lesen
mapfile -t gpxContent < "$gpx"
#bilder abarbeiten
for b in "${files[@]}"
do
echo -e "\nBild " $b
bildDatum=$(exif $b -t DateTimeOriginal | grep -m 1 "Value" | cut -c 10-28)
if [[ $bildDatum"." = "." ]]
then
echo $b has no exif - or is actually renamed - we do nothing
continue
fi
datum=${bildDatum/ */}
datum=$(echo $datum | tr ':' '-')
#bash ersetzt nur ein zeichen?
zeit=${bildDatum/* /}
bildDatum="$datum $zeit"
secondsBildSince1970=$(date -d "$bildDatum" '+%s')
if [[ tshift -ne 0 ]]
then
let "secondsBildSince1970 += tshift"
zeit=$(date -d @$secondsBildSince1970 '+%T')
datum=$(date -d @$secondsBildSince1970 '+%F')
bildDatum="$datum $zeit (korrigiert)"
fi
#echo $secondsBildSince1970
open=0
#minimalwerte sind die werte deren trackpoint den geringsten zeitlichen Abstand
#vom korrigierten Datum/Zeit des Fotos hat
unset deltaMin
unset tmin
unset positionMin
unset elevationMin
for l in "${gpxContent[@]}"
do
#suche nach trkpt
if [[ "$l" == *"*/}
elif [[ "$l" == *"/}
elevation=${elevation/<*/}
fi #wenn "*""* ]]
then #time tag weg
l=${l/