How to display your Arduino GPS NMEA data in Google Earth

Print Friendly, PDF & Email
For GEarth, Lat Long of:
$GNGLL,5014.6947,N,00515.7258,W,135203.000
becomes:
50 14.6947N 005 15.7258W
Paste into Search bar:

GNRMC,135203.000 is the time GMT:
13:52:03
If you want to use linux tools for parsing particular data, a simple example to start when you have loaded a blank sketch and seeing all the GPS data in the serialmon, is to view that with socat in a terminal instead, then parse what you want with awk, which could then be sent to a text or data file using e.g. > RMCtext.txt at the end:

this gives only $*RMC lines:

$GNRMC,163013.000,A,5014.6943,N,00515.7251,W,0.00,10.80,250819,,,A*52
$GNRMC,163014.000,A,5014.6943,N,00515.7251,W,0.00,10.80,250819,,,A*55
If you want both the RMC and GGA lines shown in the vid parsed :

$GNRMC,165830.000,A,5014.6945,N,00515.7270,W,0.00,10.80,250819,,,A*58 $GNGGA,165831.000,5014.6945,N,00515.7271,W,1,08,1.2,140.4,M,0.0,M,,*6E 
If you want to separate these comma  delimited fields and print one or more only:

171104.000
171105.000
For time and Lat/Long on one line:

010837.000 5014.6967 N 00515.7299 W
010838.000 5014.6966 N 00515.7298 W
010839.000 5014.6965 N 00515.7298 W
The Lat/Long is decimal not degrees so would have to be calculated. A first step is isolate the degrees by dividing by 100 and -100 for West:

011454.000 50.1469 N -5.15732 W
011455.000 50.1469 N -5.15732 W
Co-ords for Gmaps takes the form:

50.146910 -5.15727 in decimal degrees format which Gmaps accepts, but is about 10km out:

Miles out in Gmaps, even with a conversion from decimal to DMS. How does that work?
Full circle = 360 x 60 x 60 = 1,296,000 DMS secs.
First divide GPS decimal value by 100 to get degrees (first error there surely?)
50.146910, then multiply fraction 0.146910 by 60 = 8.81892 mins.
then multiply fraction 0.146982 mins by 60 = 48.876 secs
50 deg, 8 mins, 49.1 secs N
Same for Long:
-5.15727W = -5 deg, .15727 x 60 = 9.4362 mins, .4362 x 60 = 26.172 secs
-5 deg, 9 mins, 26.172 secs W
Gmaps needs format: 50°8’49.1”N  5°9’26”W
50°14’41.7″N 5°15’43.5″W
(1 degree is 1 NM of earth curvature at sea level, hence ship’s/plane’s speed in knots etc.)
In summary for programming a parser: ALL YOU HAVE TO DO FOR BEST REAL ACCURACY in GMaps is format to the above: 50 14.6947N 005 15.7258W:
Take the GPS VALUES E.G.:  5014.6973,N,00515.7277,W
create a single space 2 dec places before the decimal point for each field, leave the point alone:
50 14.6973,N
Strip the trailing comma before “,N”:
50 14.6973N 
strip a space between the next fields then same for next coord.:
50 14.6973N 005 15.7277W
So far, very crude, but works..I love sed!:

50 14.6956N 005 15.7257W
Now fire it into Gmaps:??
You can simulate the GPS stream if working away from the unit on your pipe one liner, something like:

The above GPS socat could be used with a Pi as a data logger, if various Arduino GPS parsing examples from the web like the one below doesn’t work for you, as they did not for my Neo7, because it’s for the Adafruit GPS library and module:

My Neo 7 data gives a specific Lat/Long line that needs modifying to be Google Earth friendly, where field $2 is decimal Lat North, and field $4 is Long West:
$GNGLL,5014.6953,N,00515.7249,W,171828.000,A,A*50
the time data GMT is in field $2, 17:23:07 :
$GNGGA,172307.000,5014.6953,N,00515.7244,W,1,10,1.1,141.9,M,0.0,M,,*61