Har du en QSTARZ GPS logg (MTK II chipset) och använder Linux? Då är detta inlägg för dig.
Min GPS logger är en mycket användbar liten burk. En av och på knapp och en ”fånga waypoint” knapp, och inget mera. Den är superkänslig och jag kan ha den i fickan på jackan när jag är ute och behöver inte bry mig så mycket mer om den. Batteriet varar gott och väl en hel dag och om man inte loggar allt som går att logga så är det ingen risk att man fyller minnet heller.
Vill du läsa vidare så klicka…
Problemet har varit att den levererades endast med programvara för Windows, och ganska dålig programvara när man väl fick igång den.
För Linux så finns ett kommandoprogram kallat gpsbabel som går att använda för de flesta GPS mottagare, dock inte denna. Däremot så kan man hämta hem mtkbabel som är skräddarsydd för mottagare med MTK chipset.
För att slippa skriva alla kommandon med flaggor och filnamn med mera varje gång så tänkte jag att det var dags att lära mig lite om skript. För er som är vana vid skript så är det nog inget nytt jag tar upp här, men mina ögon har i alla fall öppnats för möjligheterna med skript i Linux.
Skriptet är en vanlig textfil som jag döper till GPS-unload utan filändelse, och sparar i en ”bin” katalog i min hemmamapp.
För att det skall fungera att skriva in ”GPS-unload” i ett kommandofönster så lägger jag till en rad i filen .bashrc som ligger i hemkatalogen (glöm inte punkten).
export PATH=$PATH:/home/klakar/bin/
Detta gör att sökvägen till bin katalogen alltid läses in så fort jag loggar in. Mitt användarnamn är ”klakar” så här får du skriva in det som gäller för dig.
Tillbaka till skriptet. Första raden talar om för datorn vilken kommandotolk som skall användas, i det här fallet ”bash” men det finns flera. Resten av skriptet går jag igenom rad för rad nedan.
#!/bin/bash
echo -n ”Var är loggarna insamlade > ”
read plats
if [[ -n $plats ]]
then
plats=”_”$plats
fi
Filnamn=$(date +”%d%H%M”)”B”$(date +”%b%y”)$plats
Filnamn=${Filnamn^^*}
Filnamn=${Filnamn// /_}
sudo mtkbabel -p /dev/ttyACM0 -f $Filnamn -c
echo filen $Filnamn.gpx skapad.
sudo mtkbabel -p /dev/ttyACM0 -E
Alla rader som börjar med ”echo” skriver något till skärmen i det här fallet. Det första som händer är att skriptet frågar efter var loggarna är insamlade. Detta är inte nödvändigt, men det blir lättare att hitta rätt logg om man har något som refererar till innehållet i filnamnet.
Read väntar på att användaren skall mata in något och det som skrivs in lagras i variabeln ”plats”.
Därefter kommer en IF sats som avslutas med FI. IF satsen körs om variabeln $plats inte är tom. Det vill säga om man inte matar in något så struntar skriptet i att köra satsen.
Om man har matat in något så läggs ett understreck till framför texten i variabeln. Obetydligt kan man tycka, men jag tycker det blir enklare att läsa filnamnet på det här sättet, ni förstår lite senare.
De kommande tre raderna skapar och bearbetar det ”Filnamn” som kommer att användas i resten av skriptet. Först så skapas variabeln Filnamn och tilldelas ett datumvärde på formatet ”datum timme minut tidszon månad år” vilket är standarden för ”Date Time Group” eller DTG, men man kan naturligtvis välja ett format som passar en själv. Dessutom så läggs variabeln $plats till på slutet, så om variabeln är tom så läggs inget till, annars så skrivs texten man skapat i IF satsen ovan till. Nu kanske det är lättare att förstå varför jag vill ha ett mellanrum före texten.
Den andra Filnamn raden gör om alla tecken till stora bokstäver och den tredje byter ut alla blanktecken mot understreck. Många system ogillar filer som innehåller blanktecken, så jag försöker regelmässigt att undvika detta.
Raden som börjar med ”sudo” kör sedan själva avtankningskommandot. Det skall jag säga att det inte är säkert att exakt denna formulering fungerar för dig då detta kan vara lite beroende på GPS modell och dator/operativsystem. Mtkbabel letar på USBporten /dev/ttyACM0 efter GPS mottagaren. En fil med filnamnet $Filnamn (se ovan) skapas och alla loggar skrivs till filen i GPX format. Utan att man ber om det så läggs även loggens rå-fil till med samma filnamn, fast med tillägget .bin.
Sista raden raderar GPS loggen från mottagaren.
Nu skulle man kunna vara nöjd, men varför det. Nedanstående lägger jag till i skriptet för att städa lite i GPX filen och skapa ESRI Shape för spårloggar och waypoints.
trackfil=$Filnamn”_trk”
punktfil=$Filnamn”_wpt”
sudo ogr2ogr -f ”ESRI Shapefile” $trackfil.shp $Filnamn.gpx ”track_points” -fieldTypeToString DateTime
sudo ogr2ogr -f ”ESRI Shapefile” $punktfil.shp $Filnamn.gpx ”waypoints” -fieldTypeToString DateTime
Jag använder samma ”Filnamn” som tidigare men lägger till _trk respektive _wpt för att särskilja filer med waypoints och spårloggar.
Kommandot ogr2ogr kan en massa konster och här använder jag det för att konvertera GPX formatet, som är ett ”kännt format” till ESRI Shape. Det sista på varje rad behövs då konverteringen av DateTime till Shape tappar klockan. Därför så sparas datum och tid som en textsträng.
Några kommentarer:
Jag har lagt till en ”Custom Launcher” i min startmeny som kör kommandot i ett terminalfönster när man klickar på ikonen.
Alla filer skapas i den katalog man för närvarande befinner sig i. I mitt fall blir det alltid i min hemmakatalog.
Om du vill veta lite mer om vad ett kommando gör så skriv ”kommando -h” i terminalfönstret.
Det går att lägga till # tecken framför text i skriptfilen. Allt det efterföljande betraktas då som kommentarer.
Det går att utveckla skriptet hur mycket som helst. Du utför kanske samma sak med filerna du skapat varje gång? Detta kanske går att utföra med ett terminalkommando…