#!/bin/bash
#-- Define function to process coordinates
function calc() {
echo "scale=6; $1" | bc
}
function longTrans() {
dir=$2
deg=$(echo "$1" | cut -c-3)
min=$(echo "$1" | cut -c4-)
val=$(calc "$deg+$min/60")
[ $dir = "W" ] && val=-$val
echo " $val"
}
function latiTrans() {
dir=$2
deg=$(echo "$1" | cut -c-2)
min=$(echo "$1" | cut -c3-)
val=$(calc "$deg+$min/60")
[ $dir = "S" ] && val=-$val
echo " $val"
}
#-- Initialize variables
IFS=,
title="KinetaMap track";
[ $# -gt 0 ] && title="$1";
#-- Create temporal files
rm -rf tBlock cBlock hBlock fBlock;
touch cBlock tBlock hBlock fBlock;
#-- Writing down Header block
echo '' >> hBlock
echo '> hBlock
echo 'xmlns:gx="http://www.google.com/kml/ext/2.2">' >> hBlock
echo '' >> hBlock
echo " $title" >> hBlock
echo ' ' >> hBlock
echo ' ' >> hBlock
echo ' #myLinestyle' >> hBlock
echo ' myTrack' >> hBlock
echo ' ' >> hBlock
echo ' clampToGround' >> hBlock
#-- Writing down Footer block
echo ' ' >> fBlock
echo ' ' >> fBlock
echo '' >> fBlock
echo '' >> fBlock
#-- Process all lines from the standard input
while read line; do
set -- $(echo "$line")
if [ $3 = "A" -a $1 = '$GPRMC' ]; then
rawTime=$(echo "$2" | cut -d. -f1);
hh=$(echo "$rawTime" | cut -c1-2);
mm=$(echo "$rawTime" | cut -c3-4);
ss=$(echo "$rawTime" | cut -c5-6);
latiVal=$(latiTrans $4 $5);
longVal=$(longTrans $6 $7);
shift
DD=$(echo "$9" | cut -c1-2);
MM=$(echo "$9" | cut -c3-4);
YY=$(echo "$9" | cut -c5-6);
cLine=" $longVal $latiVal 0";
tLine=" 20$YY-$MM-$DD"T"$hh:$mm:$ss"Z"";
echo "$tLine" >> tBlock;
echo "$cLine" >> cBlock;
fi
done
#-- Output the result to the standard output
cat hBlock
cat tBlock
cat cBlock
cat fBlock
#-- Delete temporal files
rm -rf tBlock cBlock hBlock fBlock;