Inte för att det är svårt att hitta program som kan kommunicera med GPS-mottagare på Linux, men här är ett handgripligt och användbart sätt, om än inte så grafiskt. Det program som används finns dessutom till både Windows och OS X.
Genom att använda gpsbabel så kan man inte bara ansluta till och överföra information från mottagaren, det går även att skicka lite olika kommandon och konvertera mellan en del filformat.
Vill man skapa skript för att föra över och bearbeta filer, kanske göra om dem till ESRI-shape på en gång, så är terminalkommandon ett bra och enkelt alternativ, så länge man vet vad man gör.
För att testa den första delen i detta inlägg så behöver du en Garmin GPS och programmet gpsbabel (andra OS installerar på annat sätt).
sudo apt-get install gpsbabel
Det kommer att fungera med andra typer av GPS-mottagare än Garmin också, men då skall man inte använda exakt de kommandon som visas här nedan. Detaljer om detta går att läsa på hemsidan http://www.gpsbabel.org.
Anslut din GPS-mottagare till datorn och kör kommandot (på Linux):
dmesg | grep tty
[EDIT] Om det inte dyker upp något om Garmin så kan du prova ladda modulen med:
sudo modprobe garmin_gps
Nu har jag inte någon vanlig serieport på min dator så jag kan inte testa om det fungerar med seriell kabel, men med USB så bör man få ett svar liknande detta:
user@pc:~$ dmesg | grep tty [ 3610.282353] garmin_gps 2-1.3.4.3:1.0: Garmin GPS usb/tty converter detected [ 3610.283000] usb 2-1.3.4.3: Garmin GPS usb/tty converter now attached to ttyUSB0
Det första kommandot (dmesg) läser en buffert i operativsystemets kärna där kommandon som berör externa enheter lagras. Det går att tömma bufferten med dmesg -C. Den andra delen ”fångar” (grep) rader som innehåller texten tty, som finns i sökvägen till seriella enheter. Antingen så använder man alltså det ovan angivna kommandot, eller så tömmer man bufferten, ansluter GPS-mottagaren, väntar lite och kör dmesg.
I resultatet ovan så hittar jag det som är intressant på sista raden, nämligen vilken port som mottagaren är ansluten (ttyUSB0) och den kompletta sökvägen blir därför:
/dev/ttyUSB0
När man använder gpsbabel så är syntaxen:
gpsbabel [options] -i INTYPE -f INFILE -o OUTTYPE -F OUTFILE
Om man inte har med OUTTYPE och OUTFILE så skrivs resultatet till skärmen.
Prova att skriva:
gpsbabel -i garmin -f /dev/ttyUSB0
Ersätt /dev/ttyUSB0 om du har en annan anslutning (har du Windows eller OS X kan du prova med usb: ).
Vill du spara dessa waypoints i en fil så blir kommandot:
gpsbabel -i garmin -f /dev/ttyUSB0 -o gpx -F punkter.gpx
Vill du spara i ett annat format så kan du prova exempelvis:
- csv
- kml
- nema
Tyvärr finns inte shape (shp) med som alternativ, men det tittar vi närmare på lite senare.
Vill du i stället för waypoints spara ner spårloggen så blir kommandot:
gpsbabel -t -i garmin -f /dev/ttyUSB0 -o gpx -F tracklog.gpx
I stället för tracks (-t) så kan man även hämta rutter (-r) eller realtidsdata (-T). Vill man spara realtidsdata så fungerar dock inte gpx-formatet. Använd då i stället exempelvis csv (kommaseparerad textfil).
Nu fungerar ju gpsbabel på mer än garminmottagare också. Det går att göra om filer i ett format till ett annat, men framför allt ansluta till andra externa gps-mottagare:
- Fugawi
- Magellan
- iblue747
- m241
- mtk
Ovan är bara några exempel på mottagare och de senare är av ”logger” typ, som kan vara bra att ha en nedladdningsfunktion för.
Om man har en Garmin så finns det ytterligare möjligheter. Genom olika tillägg så kan man få olika saker att hända.
gpsbabel -i garmin,get_posn -f /dev/ttyUSB0
Ovanstående hämtar positionen just nu.
gpsbabel -i garmin,power_off -f /dev/ttyUSB0
Med kommandot ovan så stänger man av mottagaren direkt. Andra mottagare accepterar andra kommandon.
ESRI Shape
Då så, du har lyckats hitta din anslutna mottagare och hämtat dina data till en gpx-fil, men hur blir det nu shapeformat?
Då får man använda ett litet kommandoprogram till, nämligen ”ogr2ogr”. Detta kan konvertera mellan massor av olika format, inklusive gpx och shp. Det går naturligtvis att använda andra program för konverteringen också, men om man vill göra allt i ett skript eller med terminalkommandon så är detta ett bra sätt.
Ogr2ogr ingår i GDAL och installeras på Linux med kommandot:
sudo apt-get install gdal-bin
Det är dock ganska stor chans att du redan har detta installerat… Även Windows och OS X kan använda ogr, men för detta hänvisar jag till http://gdal.org.
För att göra om gpx till shape så skriver man:
ogr2ogr -f "ESRI Shape" målfiler källfilen.gpx
I exemplet ovan står det ”målfiler”. Detta beror på att gpx kan innehålla flera geometrier och därför skapas en katalog med det angivna namnet och i den en fil för varje typ av geometri och typ av data. Exempelvis så skapas både ett punkt- och ett linjelager för spårpunkter. Det går att begränsa vilka lager som skall konverteras med tillägget ”tracks”, ”track_points”, ”waypoints” och så vidare.
ogr2ogr -f "ESRI Shape" målfiler källfilen.gpx "track_points"
Ett fel som normalt uppstår är när datum och tid skall omvandlas till shape. Detta kan man fixa med ännu ett tillägg:
ogr2ogr -f "ESRI Shape" målfiler källfilen.gpx "track_points" -fieldTypeToString DateTime
Vill man så kan man även göra om data till SWEREF99TM medan man ändå är igång:
ogr2ogr -t_srs EPSG:4326 -f "ESRI Shape" målfiler källfilen.gpx -fieldTypeToString DateTime
Nu skall vi väl också vara ärliga och säga att det är inte sådär vansinnigt mycket data som kommer via gpsbabel och som överförs till shape om man följer instruktionerna ovan. Det är i princip bara positionen och ett höjdvärde. Ingen satellitinformation, inga HDOP med mera, jo namn och liknande på waypoints kommer med men det är väldigt många kolumner med NULL som värde. Detta är dock inte gpsbabels fel utan en brist i Garminmottagaren. Med en annan typ av mottagare så kan mer information överföras.
Vill du sedan skriva data till GPS-mottagaren så går det också bra. Vänd bara på kommandona och gå från (shape till gpx och) gpx till garmin med gpsbabel.