From 3f4a1a59480323f3c9666a8363a74336c1412c0f Mon Sep 17 00:00:00 2001 From: Jack Sampson Date: Thu, 16 Oct 2014 10:44:05 -0400 Subject: [PATCH 1/2] Addition of Google Maps friendly coordinates Added a latitudeDegrees, which calculates the GPS position into only degrees, which Google Maps uses. --- Adafruit_GPS.cpp | 12 ++++++++++++ Adafruit_GPS.h | 1 + 2 files changed, 13 insertions(+) diff --git a/Adafruit_GPS.cpp b/Adafruit_GPS.cpp index 3bca0de..e0c8c88 100755 --- a/Adafruit_GPS.cpp +++ b/Adafruit_GPS.cpp @@ -79,11 +79,14 @@ boolean Adafruit_GPS::parse(char *nmea) { minutes = 50 * atol(degreebuff) / 3; latitude_fixed = degree + minutes; latitude = degree / 100000 + minutes * 0.000006F; + latitudeDegrees = (latitude-100*int(latitude/100))/60.0; + latitudeDegrees += int(latitude/100); } p = strchr(p, ',')+1; if (',' != *p) { + if (p[0] == 'S') latitudeDegrees *= -1.0; if (p[0] == 'N') lat = 'N'; else if (p[0] == 'S') lat = 'S'; else if (p[0] == ',') lat = 0; @@ -105,11 +108,14 @@ boolean Adafruit_GPS::parse(char *nmea) { minutes = 50 * atol(degreebuff) / 3; longitude_fixed = degree + minutes; longitude = degree / 100000 + minutes * 0.000006F; + longitudeDegrees = (longitude-100*int(longitude/100))/60.0; + longitudeDegrees += int(longitude/100); } p = strchr(p, ',')+1; if (',' != *p) { + if (p[0] == 'W') longitudeDegrees *= -1.0; if (p[0] == 'W') lon = 'W'; else if (p[0] == 'E') lon = 'E'; else if (p[0] == ',') lon = 0; @@ -186,11 +192,14 @@ boolean Adafruit_GPS::parse(char *nmea) { long minutes = 50 * atol(degreebuff) / 3; latitude_fixed = degree + minutes; latitude = degree / 100000 + minutes * 0.000006F; + latitudeDegrees = (latitude-100*int(latitude/100))/60.0; + latitudeDegrees += int(latitude/100); } p = strchr(p, ',')+1; if (',' != *p) { + if (p[0] == 'S') latitudeDegrees *= -1.0; if (p[0] == 'N') lat = 'N'; else if (p[0] == 'S') lat = 'S'; else if (p[0] == ',') lat = 0; @@ -212,11 +221,14 @@ boolean Adafruit_GPS::parse(char *nmea) { minutes = 50 * atol(degreebuff) / 3; longitude_fixed = degree + minutes; longitude = degree / 100000 + minutes * 0.000006F; + longitudeDegrees = (longitude-100*int(longitude/100))/60.0; + longitudeDegrees += int(longitude/100); } p = strchr(p, ',')+1; if (',' != *p) { + if (p[0] == 'W') longitudeDegrees *= -1.0; if (p[0] == 'W') lon = 'W'; else if (p[0] == 'E') lon = 'E'; else if (p[0] == ',') lon = 0; diff --git a/Adafruit_GPS.h b/Adafruit_GPS.h index a417255..2233fba 100755 --- a/Adafruit_GPS.h +++ b/Adafruit_GPS.h @@ -134,6 +134,7 @@ class Adafruit_GPS { // and minutes stored in units of 1/100000 degrees. See pull #13 for more details: // https://github.com/adafruit/Adafruit-GPS-Library/pull/13 int32_t latitude_fixed, longitude_fixed; + float latitudeDegrees, longitudeDegrees; float geoidheight, altitude; float speed, angle, magvariation, HDOP; char lat, lon, mag; From 0aeb82c1b6002c6a86b812070926b96d58b8798d Mon Sep 17 00:00:00 2001 From: Tony DiCola Date: Fri, 24 Oct 2014 17:38:36 -0700 Subject: [PATCH 2/2] Update parsing example to show new long/lat degrees values. --- examples/parsing/parsing.pde | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/examples/parsing/parsing.pde b/examples/parsing/parsing.pde index a4656d3..543a7bf 100644 --- a/examples/parsing/parsing.pde +++ b/examples/parsing/parsing.pde @@ -161,6 +161,10 @@ void loop() // run over and over again Serial.print(GPS.latitude, 4); Serial.print(GPS.lat); Serial.print(", "); Serial.print(GPS.longitude, 4); Serial.println(GPS.lon); + Serial.print("Location (in degrees, works with Google Maps): "); + Serial.print(GPS.latitudeDegrees, 4); + Serial.print(", "); + Serial.println(GPS.longitudeDegrees, 4); Serial.print("Speed (knots): "); Serial.println(GPS.speed); Serial.print("Angle: "); Serial.println(GPS.angle);