В третьей части был описан сервис, который получает координаты и сохраняет их в MariaDB базе.
Теперь опишу скрипты, которыми я генерирую gpx-файлы.
Скрипт db2gpx.sh, который генерирует gpx:
#!/bin/bash if [ "$2" == "" ] then { /usr/bin/echo "Usage: ./db2gpx.sh clientname trackname" } else { CLIENT=$1 TRACKNAME=$2 MYSQL_DB=gpsdb MYSQL_HOST=127.0.0.1 MYSQL_USER=dbuser MYSQL_PASS=dbpass MYSQL_TABLE=track GPXHEADER="<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <gpx\n xmlns=\"http://www.topografix.com/GPX/1/1\"\n version=\"1.1\"\n creator=\"Wikipedia\"\n xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xsi:schemaLocation=\"http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd\">" GPXBODY="\t<metadata>\n \t\t<name>$1</name>\n \t</metadata>" TIME=`/usr/bin/echo $1 | /usr/bin/awk '{print substr($0,1,4) "-" substr($0,5,2) "-" substr($0,7,2) "T" substr($0,9,2) ":" substr($0,11,2) ":" substr($0,13,2) "Z"}'` /usr/bin/echo -e $GPXHEADER /usr/bin/echo -e "\t<time>$TIME</time>" /usr/bin/echo -e $GPXBODY /usr/bin/echo -e "\t<trk>\n\t\t<name>exercise</name>\n\t\t<trkseg>" ### SQL /usr/bin/mysql -N --user=$MYSQL_USER --password=$MYSQL_PASS --host=$MYSQL_HOST --database=$MYSQL_DB --execute="SELECT lon, lat, alt, pdate, ptime FROM $MYSQL_TABLE WHERE client=\"$CLIENT\" AND dbid=\"$TRACKNAME\" ORDER BY pid" | /usr/bin/awk '{print "\t\t\t<trkpt lat=\""$2"\" lon=\""$1"\">\n\t\t\t\t<time>"$4"T"$5"Z</time>\n\t\t\t\t<ele>"$3"</ele>\n\t\t\t</trkpt>"}' /usr/bin/echo -e "\t\t</trkseg>\n\t</trk>\n</gpx>" } fi
Скрипт generateGPX.sh, который запускает генерирование треков:
#!/bin/bash MYSQL_DB=gpsdb MYSQL_HOST=127.0.0.1 MYSQL_USER=dbuser MYSQL_PASS=dbpass MYSQL_TABLE=track # На основе треки, созданных раньше этой даты, не будут генерироваться gpx-файлы # Здесь за 2 месяца до текущей даты. MINDATE=`/usr/bin/date -d "-2 month" "+%Y%m%d%H%M%S"` # Получаем список клиентов, которые загружали треки CLIENTS=`/usr/bin/mysql -N --user=$MYSQL_USER --password=$MYSQL_PASS --host=$MYSQL_HOST --database=$MYSQL_DB --execute="SELECT DISTINCT client FROM $MYSQL_TABLE"` for CLIENT in $CLIENTS do # Получаем список доступных треков. TRACKS=`/usr/bin/mysql -N --user=$MYSQL_USER --password=$MYSQL_PASS --host=$MYSQL_HOST --database=$MYSQL_DB --execute="SELECT DISTINCT dbid FROM $MYSQL_TABLE WHERE client=\"$CLIENT\" ORDER BY dbid DESC"` for TRACK in $TRACKS do if [ $TRACK -gt $MINDATE ]; then { # Генерируем gpx-файлы. ./db2gpx.sh $CLIENT $TRACK > $CLIENT-$TRACK.gpx }; fi done done
Добавим права на запуск:
chmod +x db2gpx.sh chmod +x generateGPX.sh
Для генерирования файлов с треками достаточно запустить ./generateGPX.sh