]> git.mxchange.org Git - flightgear.git/commitdiff
Add a small utility that can read a saved GPS track, interpolate data points
authorcurt <curt>
Sat, 2 Jul 2005 20:53:42 +0000 (20:53 +0000)
committercurt <curt>
Sat, 2 Jul 2005 20:53:42 +0000 (20:53 +0000)
at some higher frequency, approximate roll/pitch angles, and blast the result
over to FlightGear using FGNetFDM udp packets.

utils/GPSsmooth/Makefile.am [new file with mode: 0644]
utils/GPSsmooth/ShortDemo.txt [new file with mode: 0644]
utils/GPSsmooth/gps.cxx [new file with mode: 0644]
utils/GPSsmooth/gps.hxx [new file with mode: 0644]
utils/GPSsmooth/main.cxx [new file with mode: 0644]
utils/Makefile.am
utils/js_server/Makefile.am

diff --git a/utils/GPSsmooth/Makefile.am b/utils/GPSsmooth/Makefile.am
new file mode 100644 (file)
index 0000000..8b3c2ec
--- /dev/null
@@ -0,0 +1,9 @@
+noinst_PROGRAMS = GPSsmooth
+
+GPSsmooth_SOURCES = \
+       gps.cxx gps.hxx \
+       main.cxx
+
+GPSsmooth_LDADD = -lsgtiming -lsgmisc -lplibnet -lz
+
+INCLUDES = -I$(top_srcdir)/src
diff --git a/utils/GPSsmooth/ShortDemo.txt b/utils/GPSsmooth/ShortDemo.txt
new file mode 100644 (file)
index 0000000..0f5180b
--- /dev/null
@@ -0,0 +1,1004 @@
+$GPGSV,3,1,12,01,23,247,48,03,05,252,41,05,11,099,41,09,36,055,45*7E
+$GPGSV,3,2,12,11,07,322,00,14,62,260,44,15,43,179,45,18,47,101,43*7A
+$GPGSV,3,3,12,19,15,278,42,21,09,160,37,22,80,051,44,35,25,131,41*7F
+$GPGLL,4513.2294,N,09308.6713,W,175212,A,D*5D
+$GPBOD,,T,,M,,*47
+$PGRME,2.6,M,3.1,M,4.0,M*2C
+$PGRMZ,1198,f,3*2A
+$GPRTE,1,1,c,*37
+$GPRMC,175214,A,4513.2363,N,09308.6684,W,12.8,10.9,010705,1.3,E,D*03
+$GPRMB,A,,,,,,,,,,,,A,D*0E
+$GPGGA,175214,4513.2363,N,09308.6684,W,2,12,1.1,371.8,M,-31.2,M,,*7D
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,35,1.6,1.1,1.1*3E
+$GPGSV,3,1,12,01,23,247,49,03,05,252,42,05,11,099,41,09,36,055,45*7C
+$GPGSV,3,2,12,11,07,322,00,14,62,260,43,15,43,179,45,18,47,101,45*7B
+$GPGSV,3,3,12,19,15,278,42,21,09,160,38,22,80,051,45,35,25,131,41*71
+$GPGLL,4513.2363,N,09308.6684,W,175214,A,D*5D
+$GPBOD,,T,,M,,*47
+$PGRME,2.5,M,2.9,M,3.8,M*29
+$PGRMZ,1220,f,3*2A
+$GPRTE,1,1,c,*37
+$GPRMC,175216,A,4513.2436,N,09308.6692,W,16.1,349.7,010705,1.3,E,D*3D
+$GPRMB,A,,,,,,,,,,,,A,D*0E
+$GPGGA,175216,4513.2436,N,09308.6692,W,2,12,1.1,369.3,M,-31.2,M,,*7D
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,35,1.6,1.1,1.1*3E
+$GPGSV,3,1,12,01,23,247,48,03,05,252,43,05,11,099,40,09,36,055,43*7B
+$GPGSV,3,2,12,11,07,322,00,14,62,260,46,15,43,179,46,18,47,101,45*7D
+$GPGSV,3,3,12,19,15,278,42,21,09,160,41,22,80,051,45,35,25,131,41*7F
+$GPGLL,4513.2436,N,09308.6692,W,175216,A,D*5F
+$GPBOD,,T,,M,,*47
+$PGRME,2.5,M,2.9,M,3.8,M*29
+$PGRMZ,1212,f,3*2B
+$GPRTE,1,1,c,*37
+$GPRMC,175218,A,4513.2561,N,09308.6730,W,26.2,349.8,010705,1.3,E,D*36
+$GPRMB,A,,,,,,,,,,,,A,D*0E
+$GPGGA,175218,4513.2561,N,09308.6730,W,2,11,1.3,364.1,M,-31.2,M,,*77
+$GPGSA,A,3,01,03,05,09,,14,15,18,19,21,22,35,2.1,1.3,1.5*3C
+$GPGSV,3,1,12,01,23,247,46,03,05,252,42,05,11,099,40,09,36,055,43*74
+$GPGSV,3,2,12,11,07,322,00,14,62,260,48,15,43,179,44,18,47,101,45*71
+$GPGSV,3,3,12,19,15,278,42,21,09,160,40,22,80,051,44,35,25,131,40*7E
+$GPGLL,4513.2561,N,09308.6730,W,175218,A,D*5B
+$GPBOD,,T,,M,,*47
+$PGRME,2.6,M,3.0,M,4.0,M*2D
+$PGRMZ,1194,f,3*26
+$GPRTE,1,1,c,*37
+$GPRMC,175220,A,4513.2720,N,09308.6774,W,29.5,346.4,010705,1.3,E,D*31
+$GPRMB,A,,,,,,,,,,,,A,D*0E
+$GPGGA,175220,4513.2720,N,09308.6774,W,2,11,1.5,362.6,M,-31.2,M,,*7C
+$GPGSA,A,3,01,03,05,09,,14,15,18,19,21,22,35,2.3,1.5,1.6*3B
+$GPGSV,3,1,12,01,23,247,48,03,05,252,43,05,11,099,38,09,36,055,43*74
+$GPGSV,3,2,12,11,07,322,00,14,62,260,47,15,43,179,45,18,47,101,45*7F
+$GPGSV,3,3,12,19,15,278,43,21,09,160,00,22,80,051,46,35,25,131,40*79
+$GPGLL,4513.2720,N,09308.6774,W,175220,A,D*57
+$GPBOD,,T,,M,,*47
+$PGRME,2.5,M,3.1,M,4.0,M*2F
+$PGRMZ,1190,f,3*22
+$GPRTE,1,1,c,*37
+$GPRMC,175222,A,4513.2824,N,09308.6899,W,25.1,308.0,010705,1.3,E,D*32
+$GPRMB,A,,,,,,,,,,,,A,D*0E
+$GPGGA,175222,4513.2824,N,09308.6899,W,2,11,1.6,368.7,M,-31.2,M,,*71
+$GPGSA,A,3,01,03,05,09,,14,15,18,19,21,22,35,2.3,1.6,1.6*38
+$GPGSV,3,1,12,01,23,247,47,03,05,252,44,05,11,099,39,09,36,055,42*7C
+$GPGSV,3,2,12,11,07,322,00,14,62,260,46,15,43,179,43,18,46,101,45*79
+$GPGSV,3,3,12,19,15,278,00,21,09,160,43,22,80,051,46,35,25,131,39*77
+$GPGLL,4513.2824,N,09308.6899,W,175222,A,D*52
+$GPBOD,,T,,M,,*47
+$PGRME,2.8,M,3.1,M,4.2,M*20
+$PGRMZ,1210,f,3*29
+$GPRTE,1,1,c,*37
+$GPRMC,175224,A,4513.2846,N,09308.7081,W,23.7,274.6,010705,1.3,E,D*3C
+$GPRMB,A,,,,,,,,,,,,A,D*0E
+$GPGGA,175224,4513.2846,N,09308.7081,W,2,12,2.1,373.6,M,-31.2,M,,*7F
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,35,3.0,2.1,2.1*3A
+$GPGSV,3,1,12,01,23,247,00,03,05,252,00,05,11,099,38,09,36,055,44*78
+$GPGSV,3,2,12,11,07,322,39,14,62,260,43,15,43,179,46,18,46,101,44*72
+$GPGSV,3,3,12,19,15,278,00,21,09,160,43,22,80,051,46,35,25,131,40*79
+$GPGLL,4513.2846,N,09308.7081,W,175224,A,D*50
+$GPBOD,,T,,M,,*47
+$PGRME,2.9,M,3.5,M,4.6,M*21
+$PGRMZ,1226,f,3*2C
+$GPRTE,1,1,c,*37
+$GPRMC,175226,A,4513.2848,N,09308.7247,W,20.4,274.5,010705,1.3,E,D*3B
+$GPRMB,A,,,,,,,,,,,,A,D*0E
+$GPGGA,175226,4513.2848,N,09308.7247,W,2,12,1.0,375.7,M,-31.2,M,,*7E
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,35,1.6,1.0,1.2*3C
+$GPGSV,3,1,12,01,23,247,00,03,05,252,00,05,11,099,38,09,36,055,43*7F
+$GPGSV,3,2,12,11,07,322,40,14,62,260,41,15,43,179,48,18,46,101,47*73
+$GPGSV,3,3,12,19,15,277,38,21,09,160,41,22,80,051,47,35,25,131,40*7E
+$GPGLL,4513.2848,N,09308.7247,W,175226,A,D*54
+$GPBOD,,T,,M,,*47
+$PGRME,2.6,M,3.1,M,4.1,M*2D
+$PGRMZ,1232,f,3*29
+$GPRTE,1,1,c,*37
+$GPRMC,175228,A,4513.2909,N,09308.7357,W,19.4,323.6,010705,1.3,E,D*3B
+$GPRMB,A,,,,,,,,,,,,A,D*0E
+$GPGGA,175228,4513.2909,N,09308.7357,W,2,12,1.3,367.0,M,-31.2,M,,*73
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,35,2.0,1.3,1.5*3D
+$GPGSV,3,1,12,01,23,247,40,03,05,252,00,05,11,099,40,09,36,055,44*73
+$GPGSV,3,2,12,11,07,322,00,14,62,260,44,15,43,179,46,18,46,101,47*7C
+$GPGSV,3,3,12,19,15,277,00,21,09,160,43,22,80,051,49,35,25,131,39*77
+$GPGLL,4513.2909,N,09308.7357,W,175228,A,D*5E
+$GPBOD,,T,,M,,*47
+$PGRME,2.9,M,3.3,M,4.4,M*25
+$PGRMZ,1204,f,3*2C
+$GPRTE,1,1,c,*37
+$GPRMC,175230,A,4513.3040,N,09308.7351,W,27.3,9.6,010705,1.3,E,D*30
+$GPRMB,A,,,,,,,,,,,,A,D*0E
+$GPGGA,175230,4513.3040,N,09308.7351,W,2,12,1.4,353.2,M,-31.2,M,,*7B
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,35,2.0,1.4,1.3*3C
+$GPGSV,3,1,12,01,23,247,42,03,05,252,39,05,11,099,41,09,36,055,44*7A
+$GPGSV,3,2,12,11,07,322,00,14,62,260,46,15,43,179,46,18,46,101,45*7C
+$GPGSV,3,3,12,19,15,277,41,21,09,160,41,22,80,051,48,35,25,131,40*7F
+$GPGLL,4513.3040,N,09308.7351,W,175230,A,D*54
+$GPBOD,,T,,M,,*47
+$PGRME,2.5,M,3.0,M,3.9,M*20
+$PGRMZ,1159,f,3*27
+$GPRTE,1,1,c,*37
+$GPRMC,175232,A,4513.3178,N,09308.7295,W,24.4,14.2,010705,1.3,E,D*0D
+$GPRMB,A,,,,,,,,,,,,A,D*0E
+$GPGGA,175232,4513.3178,N,09308.7295,W,2,12,1.1,352.3,M,-31.2,M,,*7F
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,35,1.6,1.1,1.2*3D
+$GPGSV,3,1,12,01,23,247,44,03,05,252,39,05,11,099,40,09,36,055,45*7C
+$GPGSV,3,2,12,11,07,322,00,14,62,260,46,15,43,179,45,18,46,101,45*7F
+$GPGSV,3,3,12,19,15,277,44,21,09,160,40,22,80,051,47,35,25,131,40*74
+$GPGLL,4513.3178,N,09308.7295,W,175232,A,D*55
+$GPBOD,,T,,M,,*47
+$PGRME,2.6,M,2.9,M,3.9,M*2B
+$PGRMZ,1156,f,3*28
+$GPRTE,1,1,c,*37
+$GPRMC,175234,A,4513.3258,N,09308.7265,W,13.2,15.3,010705,1.3,E,D*07
+$GPRMB,A,,,,,,,,,,,,A,D*0E
+$GPGGA,175234,4513.3258,N,09308.7265,W,2,12,1.1,358.1,M,-31.2,M,,*7F
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,35,1.7,1.1,1.3*3D
+$GPGSV,3,1,12,01,23,247,46,03,05,252,39,05,11,099,41,09,36,055,45*7F
+$GPGSV,3,2,12,11,07,322,00,14,62,260,46,15,43,179,45,18,46,101,46*7C
+$GPGSV,3,3,12,19,15,277,42,21,09,160,40,22,80,051,46,35,25,131,40*73
+$GPGLL,4513.3258,N,09308.7265,W,175234,A,D*5D
+$GPBOD,,T,,M,,*47
+$PGRME,2.6,M,3.0,M,4.0,M*2D
+$PGRMZ,1175,f,3*29
+$GPRTE,1,1,c,*37
+$GPRMC,175236,A,4513.3314,N,09308.7226,W,12.2,30.0,010705,1.3,E,D*0E
+$GPRMB,A,,,,,,,,,,,,A,D*0E
+$GPGGA,175236,4513.3314,N,09308.7226,W,2,11,1.0,355.4,M,-31.2,M,,*79
+$GPGSA,A,3,01,03,05,09,,14,15,18,19,21,22,35,1.7,1.0,1.3*3C
+$GPGSV,3,1,12,01,23,247,45,03,05,252,39,05,11,099,41,09,36,055,44*7D
+$GPGSV,3,2,12,11,07,322,00,14,62,260,48,15,43,179,46,18,46,101,46*71
+$GPGSV,3,3,12,19,15,277,43,21,09,160,40,22,80,051,45,35,25,131,39*7F
+$GPGLL,4513.3314,N,09308.7226,W,175236,A,D*51
+$GPBOD,,T,,M,,*47
+$PGRME,2.5,M,2.9,M,3.8,M*29
+$PGRMZ,1166,f,3*2B
+$GPRTE,1,1,c,*37
+$GPRMC,175238,A,4513.3368,N,09308.7110,W,20.3,65.1,010705,1.3,E,D*0C
+$GPRMB,A,,,,,,,,,,,,A,D*0E
+$GPGGA,175238,4513.3368,N,09308.7110,W,2,12,1.2,343.2,M,-31.2,M,,*7A
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,35,2.0,1.2,1.5*3C
+$GPGSV,3,1,12,01,23,247,44,03,05,252,40,05,11,099,41,09,36,055,42*74
+$GPGSV,3,2,12,11,07,322,39,14,62,260,45,15,43,179,47,18,46,101,47*76
+$GPGSV,3,3,12,19,15,277,44,21,09,160,40,22,80,056,47,35,25,131,39*7D
+$GPGLL,4513.3368,N,09308.7110,W,175238,A,D*52
+$GPBOD,,T,,M,,*47
+$PGRME,2.5,M,3.0,M,3.9,M*20
+$PGRMZ,1126,f,3*2F
+$GPRTE,1,1,c,*37
+$GPRMC,175240,A,4513.3232,N,09308.6898,W,44.0,147.4,010705,1.3,E,D*30
+$GPRMB,A,,,,,,,,,,,,A,D*0E
+$GPGGA,175240,4513.3232,N,09308.6898,W,2,12,1.4,322.5,M,-31.2,M,,*75
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,35,2.2,1.4,1.1*3C
+$GPGSV,3,1,12,01,23,247,43,03,05,252,41,05,11,099,00,09,36,055,41*74
+$GPGSV,3,2,12,11,07,322,39,14,62,260,44,15,43,179,47,18,46,101,47*77
+$GPGSV,3,3,12,19,15,277,43,21,09,160,40,22,80,056,47,35,25,131,38*7B
+$GPGLL,4513.3232,N,09308.6898,W,175240,A,D*5B
+$GPBOD,,T,,M,,*47
+$PGRME,2.6,M,3.1,M,4.1,M*2D
+$PGRMZ,1058,f,3*27
+$GPRTE,1,1,c,*37
+$GPRMC,175242,A,4513.2962,N,09308.6887,W,44.2,189.4,010705,1.3,E,D*33
+$GPRMB,A,,,,,,,,,,,,A,D*0E
+$GPGGA,175242,4513.2962,N,09308.6887,W,2,12,2.5,306.3,M,-31.2,M,,*74
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,35,3.2,2.5,1.0*3E
+$GPGSV,3,1,12,01,23,247,44,03,05,252,42,05,11,099,35,09,36,055,45*72
+$GPGSV,3,2,12,11,07,322,39,14,62,260,44,15,43,179,44,18,46,101,48*7B
+$GPGSV,3,3,12,19,15,277,42,21,09,160,00,22,80,056,49,35,25,131,00*7B
+$GPGLL,4513.2962,N,09308.6887,W,175242,A,D*58
+$GPBOD,,T,,M,,*47
+$PGRME,2.7,M,3.0,M,4.2,M*2E
+$PGRMZ,1005,f,3*2F
+$GPRTE,1,1,c,*37
+$GPRMC,175244,A,4513.2710,N,09308.6957,W,42.9,188.9,010705,1.3,E,D*33
+$GPRMB,A,,,,,,,,,,,,A,D*0E
+$GPGGA,175244,4513.2710,N,09308.6957,W,2,12,1.5,312.3,M,-31.2,M,,*73
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,35,2.9,1.5,1.3*34
+$GPGSV,3,1,12,01,23,247,44,03,05,252,39,05,11,099,40,09,36,055,48*71
+$GPGSV,3,2,12,11,07,322,40,14,62,260,42,15,43,179,43,18,46,101,48*74
+$GPGSV,3,3,12,19,15,277,41,21,09,160,00,22,80,056,47,35,25,131,00*76
+$GPGLL,4513.2710,N,09308.6957,W,175244,A,D*59
+$GPBOD,,T,,M,,*47
+$PGRME,2.6,M,3.0,M,4.3,M*2E
+$PGRMZ,1025,f,3*2D
+$GPRTE,1,1,c,*37
+$GPRMC,175246,A,4513.2520,N,09308.7005,W,31.9,193.3,010705,1.3,E,D*3B
+$GPRMB,A,,,,,,,,,,,,A,D*0E
+$GPGGA,175246,4513.2520,N,09308.7005,W,2,12,1.3,318.4,M,-31.2,M,,*74
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,35,1.6,1.3,1.0*3D
+$GPGSV,3,1,12,01,23,247,44,03,05,252,40,05,11,099,00,09,36,055,49*7A
+$GPGSV,3,2,12,11,07,322,42,14,62,260,41,15,43,179,00,18,46,101,48*72
+$GPGSV,3,3,12,19,15,277,42,21,09,160,35,22,80,056,45,35,25,131,00*71
+$GPGLL,4513.2520,N,09308.7005,W,175246,A,D*55
+$GPBOD,,T,,M,,*47
+$PGRME,2.7,M,3.1,M,4.3,M*2E
+$PGRMZ,1045,f,3*2B
+$GPRTE,1,1,c,*37
+$GPRMC,175248,A,4513.2363,N,09308.7062,W,30.4,193.0,010705,1.3,E,D*3A
+$GPRMB,A,,,,,,,,,,,,A,D*0E
+$GPGGA,175248,4513.2363,N,09308.7062,W,2,12,1.1,321.5,M,-31.2,M,,*73
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,35,1.6,1.1,1.0*3F
+$GPGSV,3,1,12,01,23,247,43,03,05,252,40,05,11,099,45,09,36,055,50*74
+$GPGSV,3,2,12,11,07,322,41,14,62,260,42,15,43,179,00,18,46,101,50*7B
+$GPGSV,3,3,12,19,15,277,42,21,09,160,00,22,80,056,46,35,25,131,00*74
+$GPGLL,4513.2363,N,09308.7062,W,175248,A,D*5B
+$GPBOD,,T,,M,,*47
+$PGRME,2.9,M,3.0,M,4.4,M*26
+$PGRMZ,1055,f,3*2A
+$GPRTE,1,1,c,*37
+$GPRMC,175250,A,4513.2176,N,09308.7123,W,35.5,194.0,010705,1.3,E,D*32
+$GPRMB,A,,,,,,,,,,,,A,D*0E
+$GPGGA,175250,4513.2176,N,09308.7123,W,2,12,1.7,314.2,M,-31.2,M,,*7F
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,35,2.2,1.7,1.2*3C
+$GPGSV,3,1,12,01,23,247,41,03,05,252,41,05,11,099,45,09,36,055,50*77
+$GPGSV,3,2,12,11,07,322,40,14,62,260,44,15,43,179,00,18,46,101,51*7D
+$GPGSV,3,3,12,19,15,277,42,21,09,160,00,22,80,056,45,35,25,131,41*72
+$GPGLL,4513.2176,N,09308.7123,W,175250,A,D*50
+$GPBOD,,T,,M,,*47
+$PGRME,3.2,M,3.1,M,4.6,M*2F
+$PGRMZ,1031,f,3*28
+$GPRTE,1,1,c,*37
+$GPRMC,175252,A,4513.1966,N,09308.7187,W,38.3,192.2,010705,1.3,E,D*3B
+$GPRMB,A,,,,,,,,,,,,A,D*0E
+$GPGGA,175252,4513.1966,N,09308.7187,W,2,12,1.2,310.1,M,-31.2,M,,*7B
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,35,1.7,1.2,1.2*3F
+$GPGSV,3,1,12,01,23,247,40,03,05,252,42,05,11,099,45,09,36,055,50*75
+$GPGSV,3,2,12,11,07,322,41,14,62,260,45,15,43,179,00,18,46,101,51*7D
+$GPGSV,3,3,12,19,15,277,42,21,09,160,00,22,80,056,45,35,25,131,00*77
+$GPGLL,4513.1966,N,09308.7187,W,175252,A,D*56
+$GPBOD,,T,,M,,*47
+$PGRME,3.3,M,3.0,M,4.7,M*2E
+$PGRMZ,1017,f,3*2C
+$GPRTE,1,1,c,*37
+$GPRMC,175254,A,4513.1753,N,09308.7224,W,40.0,184.9,010705,1.3,E,D*3F
+$GPRMB,A,,,,,,,,,,,,A,D*0E
+$GPGGA,175254,4513.1753,N,09308.7224,W,2,12,1.4,314.0,M,-31.2,M,,*7C
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,35,2.0,1.4,1.4*3B
+$GPGSV,3,1,12,01,23,247,42,03,05,252,41,05,11,099,44,09,36,055,51*74
+$GPGSV,3,2,12,11,07,322,41,14,62,260,43,15,43,179,00,18,46,101,49*72
+$GPGSV,3,3,12,19,15,277,41,21,09,160,00,22,80,056,46,35,25,131,00*77
+$GPGLL,4513.1753,N,09308.7224,W,175254,A,D*52
+$GPBOD,,T,,M,,*47
+$PGRME,4.5,M,3.1,M,5.9,M*21
+$PGRMZ,1030,f,3*29
+$GPRTE,1,1,c,*37
+$GPRMC,175256,A,4513.1504,N,09308.7151,W,46.7,162.4,010705,1.3,E,D*38
+$GPRMB,A,,,,,,,,,,,,A,D*0E
+$GPGGA,175256,4513.1504,N,09308.7151,W,2,12,1.5,327.0,M,-31.2,M,,*7E
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,35,2.1,1.5,1.6*39
+$GPGSV,3,1,12,01,23,247,44,03,05,252,43,05,11,099,42,09,36,055,50*77
+$GPGSV,3,2,12,11,07,322,42,14,62,260,43,15,43,179,46,18,46,101,46*7C
+$GPGSV,3,3,12,19,15,277,41,21,09,160,38,22,80,056,47,35,25,131,00*7D
+$GPGLL,4513.1504,N,09308.7151,W,175256,A,D*51
+$GPBOD,,T,,M,,*47
+$PGRME,2.8,M,3.3,M,4.4,M*24
+$PGRMZ,1073,f,3*2E
+$GPRTE,1,1,c,*37
+$GPRMC,175258,A,4513.1391,N,09308.6906,W,35.8,103.8,010705,1.3,E,D*37
+$GPRMB,A,,,,,,,,,,,,A,D*0E
+$GPGGA,175258,4513.1391,N,09308.6906,W,2,12,1.2,352.2,M,-31.2,M,,*76
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,35,1.8,1.2,1.3*31
+$GPGSV,3,1,12,01,23,247,43,03,05,252,44,05,11,099,41,09,36,055,48*7D
+$GPGSV,3,2,12,11,07,322,44,14,62,260,43,15,43,179,00,18,46,101,44*7A
+$GPGSV,3,3,12,19,15,277,43,21,09,160,37,22,80,056,46,35,25,131,00*71
+$GPGLL,4513.1391,N,09308.6906,W,175258,A,D*5E
+$GPBOD,,T,,M,,*47
+$PGRME,3.0,M,3.1,M,4.5,M*2E
+$PGRMZ,1156,f,3*28
+$GPRTE,1,1,c,*37
+$GPRMC,175300,A,4513.1492,N,09308.6666,W,45.4,27.8,010705,1.3,E,D*0A
+$GPRMB,A,,,,,,,,,,,,A,D*0E
+$GPGGA,175300,4513.1492,N,09308.6666,W,2,11,1.6,366.7,M,-31.2,M,,*72
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,,2.2,1.6,1.2*3B
+$GPGSV,3,1,12,01,23,247,45,03,05,252,45,05,11,099,40,09,36,055,46*75
+$GPGSV,3,2,12,11,07,322,45,14,62,260,44,15,43,179,45,18,46,101,44*7D
+$GPGSV,3,3,12,19,15,277,44,21,09,160,40,22,80,056,46,35,25,131,42*70
+$GPGLL,4513.1492,N,09308.6666,W,175300,A,D*5F
+$GPBOD,,T,,M,,*47
+$PGRME,3.1,M,3.2,M,4.5,M*2C
+$PGRMZ,1203,f,3*2B
+$GPRTE,1,1,c,*37
+$GPRMC,175302,A,4513.1789,N,09308.6745,W,56.8,343.9,010705,1.3,E,A*3A
+$GPRMB,A,,,,,,,,,,,,A,A*0B
+$GPGGA,175302,4513.1789,N,09308.6745,W,1,11,1.3,364.1,M,-31.2,M,,*7B
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,,2.0,1.3,1.3*3D
+$GPGSV,3,1,12,01,23,247,45,03,05,252,00,05,11,099,42,09,36,055,45*75
+$GPGSV,3,2,12,11,07,322,43,14,62,260,45,15,43,179,48,18,46,101,44*77
+$GPGSV,3,3,12,19,15,277,42,21,09,160,41,22,80,056,47,35,25,131,41*75
+$GPGLL,4513.1789,N,09308.6745,W,175302,A,A*51
+$GPBOD,,T,,M,,*47
+$PGRME,2.7,M,3.1,M,4.1,M*2C
+$PGRMZ,1195,f,3*27
+$GPRTE,1,1,c,*37
+$GPRMC,175304,A,4513.2105,N,09308.6835,W,58.5,349.4,010705,1.3,E,A*31
+$GPRMB,A,,,,,,,,,,,,A,A*0B
+$GPGGA,175304,4513.2105,N,09308.6835,W,1,11,1.0,365.9,M,-31.2,M,,*7E
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,,1.5,1.0,1.2*39
+$GPGSV,3,1,12,01,23,247,44,03,05,252,00,05,11,099,43,09,36,055,45*75
+$GPGSV,3,2,12,11,07,322,41,14,62,260,46,15,43,179,48,18,46,101,45*77
+$GPGSV,3,3,12,19,15,277,41,21,09,160,42,22,80,056,48,35,25,131,42*79
+$GPGLL,4513.2105,N,09308.6835,W,175304,A,A*5E
+$GPBOD,,T,,M,,*47
+$PGRME,2.7,M,3.2,M,4.2,M*2C
+$PGRMZ,1201,f,3*29
+$GPRTE,1,1,c,*37
+$GPRMC,175306,A,4513.2438,N,09308.6926,W,62.1,348.4,010705,1.3,E,A*37
+$GPRMB,A,,,,,,,,,,,,A,A*0B
+$GPGGA,175306,4513.2438,N,09308.6926,W,1,11,1.1,362.6,M,-31.2,M,,*7D
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,,1.7,1.1,1.3*3B
+$GPGSV,3,1,12,01,23,247,46,03,05,252,00,05,11,099,43,09,36,055,45*77
+$GPGSV,3,2,12,11,07,322,39,14,62,260,46,15,43,179,49,18,46,101,44*78
+$GPGSV,3,3,12,19,15,277,31,21,09,160,42,22,80,056,49,35,25,131,42*7F
+$GPGLL,4513.2438,N,09308.6926,W,175306,A,A*54
+$GPBOD,,T,,M,,*47
+$PGRME,2.7,M,3.2,M,4.2,M*2C
+$PGRMZ,1190,f,3*22
+$GPRTE,1,1,c,*37
+$GPRMC,175308,A,4513.2772,N,09308.7034,W,61.1,346.4,010705,1.3,E,D*37
+$GPRMB,A,,,,,,,,,,,,A,D*0E
+$GPGGA,175308,4513.2772,N,09308.7034,W,2,12,1.2,366.4,M,-31.2,M,,*70
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,35,1.9,1.2,1.4*37
+$GPGSV,3,1,12,01,23,247,48,03,05,252,47,05,11,099,41,09,36,055,44*79
+$GPGSV,3,2,12,11,07,322,38,14,62,260,45,15,43,179,48,18,46,101,44*7B
+$GPGSV,3,3,12,19,15,277,00,21,09,160,41,22,80,056,49,35,25,131,41*7D
+$GPGLL,4513.2772,N,09308.7034,W,175308,A,D*59
+$GPBOD,,T,,M,,*47
+$PGRME,2.9,M,3.3,M,4.3,M*22
+$PGRMZ,1202,f,3*2A
+$GPRTE,1,1,c,*37
+$GPRMC,175310,A,4513.3062,N,09308.7246,W,60.0,327.2,010705,1.3,E,D*3F
+$GPRMB,A,,,,,,,,,,,,A,D*0E
+$GPGGA,175310,4513.3062,N,09308.7246,W,2,12,1.4,370.1,M,-31.2,M,,*7D
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,35,2.0,1.4,1.4*3B
+$GPGSV,3,1,12,01,23,247,46,03,05,252,47,05,11,099,42,09,36,055,42*72
+$GPGSV,3,2,12,11,07,322,36,14,62,260,45,15,43,179,47,18,46,101,44*7A
+$GPGSV,3,3,12,19,15,277,34,21,09,160,38,22,80,056,48,35,25,131,40*74
+$GPGLL,4513.3062,N,09308.7246,W,175310,A,D*50
+$GPBOD,,T,,M,,*47
+$PGRME,2.6,M,3.1,M,4.0,M*2C
+$PGRMZ,1214,f,3*2D
+$GPRTE,1,1,c,*37
+$GPRMC,175312,A,4513.3279,N,09308.7624,W,62.6,305.0,010705,1.3,E,D*33
+$GPRMB,A,,,,,,,,,,,,A,D*0E
+$GPGGA,175312,4513.3279,N,09308.7624,W,2,12,1.4,369.9,M,-31.2,M,,*77
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,35,2.2,1.4,1.6*3B
+$GPGSV,3,1,12,01,23,247,43,03,05,252,45,05,11,099,40,09,36,055,43*76
+$GPGSV,3,2,12,11,07,322,35,14,62,260,44,15,43,179,48,18,46,101,44*77
+$GPGSV,3,3,12,19,15,277,00,21,09,160,38,22,80,056,47,35,25,131,39*72
+$GPGLL,4513.3279,N,09308.7624,W,175312,A,D*5A
+$GPBOD,,T,,M,,*47
+$PGRME,2.6,M,3.2,M,4.1,M*2E
+$PGRMZ,1214,f,3*2D
+$GPRTE,1,1,c,*37
+$GPRMC,175314,A,4513.3467,N,09308.7865,W,38.5,335.0,010705,1.3,E,D*38
+$GPRMB,A,,,,,,,,,,,,A,D*0E
+$GPGGA,175314,4513.3467,N,09308.7865,W,2,12,1.7,398.2,M,-31.2,M,,*75
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,35,2.5,1.7,1.8*31
+$GPGSV,3,1,12,01,23,247,42,03,05,252,43,05,11,099,41,09,36,055,44*77
+$GPGSV,3,2,12,11,07,322,35,14,62,260,42,15,43,179,48,18,46,101,44*71
+$GPGSV,3,3,12,19,15,277,44,21,09,160,42,22,80,056,44,35,25,131,42*70
+$GPGLL,4513.3467,N,09308.7865,W,175314,A,D*5E
+$GPBOD,,T,,M,,*47
+$PGRME,2.6,M,3.2,M,4.2,M*2D
+$PGRMZ,1307,f,3*2E
+$GPRTE,1,1,c,*37
+$GPRMC,175316,A,4513.3623,N,09308.7729,W,46.4,77.7,010705,1.3,E,D*05
+$GPRMB,A,,,,,,,,,,,,A,D*0E
+$GPGGA,175316,4513.3623,N,09308.7729,W,2,12,1.0,426.7,M,-31.2,M,,*72
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,35,1.7,1.0,1.3*3C
+$GPGSV,3,1,12,01,23,247,41,03,05,252,41,05,11,099,39,09,36,055,42*7F
+$GPGSV,3,2,12,11,07,322,40,14,62,260,38,15,43,179,49,18,46,101,42*79
+$GPGSV,3,3,12,19,15,277,44,21,09,160,44,22,80,056,42,35,25,131,00*76
+$GPGLL,4513.3623,N,09308.7729,W,175316,A,D*59
+$GPBOD,,T,,M,,*47
+$PGRME,2.6,M,3.2,M,4.1,M*2E
+$PGRMZ,1400,f,3*2E
+$GPRTE,1,1,c,*37
+$GPRMC,175318,A,4513.3458,N,09308.7387,W,55.9,140.8,010705,1.3,E,D*30
+$GPRMB,A,,,,,,,,,,,,A,D*0E
+$GPGGA,175318,4513.3458,N,09308.7387,W,2,12,1.3,414.8,M,-31.2,M,,*7F
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,35,2.3,1.3,2.0*38
+$GPGSV,3,1,12,01,24,248,44,03,05,252,41,05,11,099,00,09,36,055,43*79
+$GPGSV,3,2,12,11,07,322,40,14,62,260,41,15,43,179,48,18,46,101,00*70
+$GPGSV,3,3,12,19,15,277,43,21,09,160,41,22,80,056,40,35,25,131,00*76
+$GPGLL,4513.3458,N,09308.7387,W,175318,A,D*59
+$GPBOD,,T,,M,,*47
+$PGRME,2.6,M,3.2,M,4.2,M*2D
+$PGRMZ,1361,f,3*2E
+$GPRTE,1,1,c,*37
+$GPRMC,175320,A,4513.3116,N,09308.7311,W,62.2,172.2,010705,1.3,E,D*3F
+$GPRMB,A,,,,,,,,,,,,A,D*0E
+$GPGGA,175320,4513.3116,N,09308.7311,W,2,12,1.4,403.5,M,-31.2,M,,*78
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,35,2.4,1.4,1.6*3D
+$GPGSV,3,1,12,01,24,248,43,03,05,252,40,05,11,099,00,09,36,055,46*7A
+$GPGSV,3,2,12,11,07,322,38,14,62,260,42,15,43,179,45,18,46,101,50*74
+$GPGSV,3,3,12,19,15,277,42,21,09,160,39,22,80,056,42,35,25,131,00*7A
+$GPGLL,4513.3116,N,09308.7311,W,175320,A,D*52
+$GPBOD,,T,,M,,*47
+$PGRME,2.6,M,3.3,M,4.2,M*2C
+$PGRMZ,1324,f,3*2F
+$GPRTE,1,1,c,*37
+$GPRMC,175322,A,4513.2795,N,09308.7207,W,58.1,165.6,010705,1.3,E,D*3F
+$GPRMB,A,,,,,,,,,,,,A,D*0E
+$GPGGA,175322,4513.2795,N,09308.7207,W,2,12,1.4,393.3,M,-31.2,M,,*78
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,35,2.4,1.4,1.6*3D
+$GPGSV,3,1,12,01,24,248,44,03,05,252,38,05,11,099,39,09,36,055,48*76
+$GPGSV,3,2,12,11,07,322,35,14,62,260,42,15,43,179,43,18,46,101,47*79
+$GPGSV,3,3,12,19,15,277,41,21,09,160,33,22,80,056,42,35,25,131,00*73
+$GPGLL,4513.2795,N,09308.7207,W,175322,A,D*5A
+$GPBOD,,T,,M,,*47
+$PGRME,2.4,M,3.2,M,4.0,M*2D
+$PGRMZ,1290,f,3*21
+$GPRTE,1,1,c,*37
+$GPRMC,175324,A,4513.2519,N,09308.7074,W,55.1,165.1,010705,1.3,E,D*33
+$GPRMB,A,,,,,,,,,,,,A,D*0E
+$GPGGA,175324,4513.2519,N,09308.7074,W,2,11,2.6,384.6,M,-31.2,M,,*7F
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,,3.5,2.6,1.0*3C
+$GPGSV,3,1,12,01,24,248,43,03,05,252,41,05,11,099,00,09,36,055,49*74
+$GPGSV,3,2,12,11,07,322,00,14,62,260,41,15,43,179,41,18,46,101,47*7E
+$GPGSV,3,3,12,19,15,277,41,21,09,160,33,22,80,056,45,35,25,131,00*74
+$GPGLL,4513.2519,N,09308.7074,W,175324,A,D*5C
+$GPBOD,,T,,M,,*47
+$PGRME,3.8,M,3.4,M,5.4,M*23
+$PGRMZ,1262,f,3*2C
+$GPRTE,1,1,c,*37
+$GPRMC,175326,A,4513.2129,N,09308.7001,W,71.0,173.2,010705,1.3,E,D*37
+$GPRMB,A,,,,,,,,,,,,A,D*0E
+$GPGGA,175326,4513.2129,N,09308.7001,W,2,11,3.2,378.7,M,-31.2,M,,*7F
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,,3.9,3.2,1.0*35
+$GPGSV,3,1,12,01,24,248,44,03,04,251,41,05,11,099,00,09,36,055,49*71
+$GPGSV,3,2,12,11,07,322,36,14,62,260,41,15,43,179,40,18,46,101,48*75
+$GPGSV,3,3,12,19,15,277,42,21,09,160,32,22,80,056,46,35,25,131,00*75
+$GPGLL,4513.2129,N,09308.7001,W,175326,A,D*5B
+$GPBOD,,T,,M,,*47
+$PGRME,5.2,M,3.6,M,6.8,M*22
+$PGRMZ,1242,f,3*2E
+$GPRTE,1,1,c,*37
+$GPRMC,175328,A,4513.1841,N,09308.6919,W,44.9,167.3,010705,1.3,E,D*37
+$GPRMB,A,,,,,,,,,,,,A,D*0E
+$GPGGA,175328,4513.1841,N,09308.6919,W,2,11,3.6,374.3,M,-31.2,M,,*78
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,,4.3,3.6,1.0*3C
+$GPGSV,3,1,12,01,24,248,44,03,04,251,42,05,11,099,36,09,36,055,49*77
+$GPGSV,3,2,12,11,07,322,00,14,62,260,42,15,43,179,39,18,46,101,46*73
+$GPGSV,3,3,12,19,15,277,41,21,09,160,33,22,80,056,47,35,25,131,00*76
+$GPGLL,4513.1841,N,09308.6919,W,175328,A,D*50
+$GPBOD,,T,,M,,*47
+$PGRME,3.9,M,4.2,M,7.0,M*25
+$PGRMZ,1228,f,3*22
+$GPRTE,1,1,c,*37
+$GPRMC,175330,A,4513.1567,N,09308.6913,W,55.9,187.2,010705,1.3,E,D*32
+$GPRMB,A,,,,,,,,,,,,A,D*0E
+$GPGGA,175330,4513.1567,N,09308.6913,W,2,10,4.3,378.4,M,-31.2,M,,*7A
+$GPGSA,A,3,01,,05,09,11,14,15,18,19,21,22,,4.8,4.3,1.0*36
+$GPGSV,3,1,12,01,24,248,00,03,04,251,40,05,11,099,36,09,36,055,48*74
+$GPGSV,3,2,12,11,07,322,00,14,62,260,43,15,43,179,38,18,46,101,47*72
+$GPGSV,3,3,12,19,15,277,42,21,09,160,34,22,80,056,49,35,25,131,00*7C
+$GPGLL,4513.1567,N,09308.6913,W,175330,A,D*5A
+$GPBOD,,T,,M,,*47
+$PGRME,5.7,M,4.5,M,8.5,M*20
+$PGRMZ,1242,f,3*2E
+$GPRTE,1,1,c,*37
+$GPRMC,175332,A,4513.1353,N,09308.6963,W,38.1,189.8,010705,1.3,E,D*31
+$GPRMB,A,,,,,,,,,,,,A,D*0E
+$GPGGA,175332,4513.1353,N,09308.6963,W,2,11,1.2,378.9,M,-31.2,M,,*76
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,,1.9,1.2,1.1*34
+$GPGSV,3,1,12,01,24,248,43,03,04,251,39,05,11,099,41,09,36,055,50*74
+$GPGSV,3,2,12,11,07,322,39,14,62,260,00,15,43,179,37,18,46,101,48*7F
+$GPGSV,3,3,12,19,15,277,42,21,09,160,00,22,80,056,47,35,25,131,00*75
+$GPGLL,4513.1353,N,09308.6963,W,175332,A,D*5E
+$GPBOD,,T,,M,,*47
+$PGRME,3.0,M,3.3,M,4.9,M*20
+$PGRMZ,1243,f,3*2F
+$GPRTE,1,1,c,*37
+$GPRMC,175334,A,4513.1157,N,09308.6952,W,37.6,174.0,010705,1.3,E,D*31
+$GPRMB,A,,,,,,,,,,,,A,D*0E
+$GPGGA,175334,4513.1157,N,09308.6952,W,2,11,1.3,378.6,M,-31.2,M,,*7A
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,,1.9,1.3,1.2*36
+$GPGSV,3,1,12,01,24,248,42,03,04,251,39,05,12,099,44,09,36,055,49*7B
+$GPGSV,3,2,12,11,07,322,40,14,62,260,00,15,43,179,42,18,46,101,46*7D
+$GPGSV,3,3,12,19,15,277,40,21,09,160,00,22,80,056,47,35,25,131,00*77
+$GPGLL,4513.1157,N,09308.6952,W,175334,A,D*5C
+$GPBOD,,T,,M,,*47
+$PGRME,3.2,M,3.6,M,5.1,M*2E
+$PGRMZ,1242,f,3*2E
+$GPRTE,1,1,c,*37
+$GPRMC,175336,A,4513.0938,N,09308.6840,W,51.1,129.3,010705,1.3,E,D*3D
+$GPRMB,A,,,,,,,,,,,,A,D*0E
+$GPGGA,175336,4513.0938,N,09308.6840,W,2,11,1.3,377.8,M,-31.2,M,,*7B
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,,1.9,1.3,1.0*34
+$GPGSV,3,1,12,01,24,248,40,03,04,251,40,05,12,099,00,09,36,055,47*79
+$GPGSV,3,2,12,11,07,322,00,14,62,260,42,15,43,179,42,18,46,101,44*7D
+$GPGSV,3,3,12,19,15,277,41,21,09,160,40,22,80,056,46,35,25,131,00*73
+$GPGLL,4513.0938,N,09308.6840,W,175336,A,D*5C
+$GPBOD,,T,,M,,*47
+$PGRME,3.4,M,3.7,M,5.2,M*2A
+$PGRMZ,1240,f,3*2C
+$GPRTE,1,1,c,*37
+$GPRMC,175338,A,4513.0915,N,09308.6477,W,53.9,67.1,010705,1.3,E,D*07
+$GPRMB,A,,,,,,,,,,,,A,D*0E
+$GPGGA,175338,4513.0915,N,09308.6477,W,2,11,1.1,373.0,M,-31.2,M,,*7C
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,,1.7,1.1,1.3*3B
+$GPGSV,3,1,12,01,24,248,41,03,04,251,41,05,12,099,00,09,36,055,46*78
+$GPGSV,3,2,12,11,07,322,46,14,62,260,43,15,43,179,43,18,46,101,43*78
+$GPGSV,3,3,12,19,15,277,40,21,09,160,41,22,80,056,46,35,25,131,00*73
+$GPGLL,4513.0915,N,09308.6477,W,175338,A,D*55
+$GPBOD,,T,,M,,*47
+$PGRME,3.0,M,3.7,M,4.8,M*25
+$PGRMZ,1224,f,3*2E
+$GPRTE,1,1,c,*37
+$GPRMC,175340,A,4513.1366,N,09308.6240,W,57.7,355.1,010705,1.3,E,A*38
+$GPRMB,A,,,,,,,,,,,,A,A*0B
+$GPGGA,175340,4513.1366,N,09308.6240,W,1,11,1.3,368.2,M,-31.2,M,,*77
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,,1.9,1.3,1.3*37
+$GPGSV,3,1,12,01,24,248,45,03,04,251,48,05,12,099,38,09,36,055,45*7D
+$GPGSV,3,2,12,11,07,322,00,14,62,260,43,15,43,179,41,18,46,101,41*7A
+$GPGSV,3,3,12,19,15,277,39,21,09,160,40,22,80,056,46,35,25,131,00*7C
+$GPGLL,4513.1366,N,09308.6240,W,175340,A,A*52
+$GPBOD,,T,,M,,*47
+$PGRME,3.5,M,3.8,M,5.3,M*25
+$PGRMZ,1208,f,3*20
+$GPRTE,1,1,c,*37
+$GPRMC,175342,A,4513.1648,N,09308.6319,W,61.8,343.5,010705,1.3,E,A*37
+$GPRMB,A,,,,,,,,,,,,A,A*0B
+$GPGGA,175342,4513.1648,N,09308.6319,W,1,11,1.5,355.8,M,-31.2,M,,*73
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,,2.2,1.5,1.6*3C
+$GPGSV,3,1,12,01,24,248,47,03,04,251,46,05,12,099,40,09,36,055,45*7E
+$GPGSV,3,2,12,11,07,322,00,14,62,260,45,15,43,179,43,18,46,101,43*7C
+$GPGSV,3,3,12,19,15,277,40,21,09,160,39,22,80,056,46,35,25,131,38*77
+$GPGLL,4513.1648,N,09308.6319,W,175342,A,A*54
+$GPBOD,,T,,M,,*47
+$PGRME,3.2,M,3.4,M,5.0,M*2D
+$PGRMZ,1167,f,3*2A
+$GPRTE,1,1,c,*37
+$GPRMC,175344,A,4513.1991,N,09308.6491,W,65.9,339.8,010705,1.3,E,A*38
+$GPRMB,A,,,,,,,,,,,,A,A*0B
+$GPGGA,175344,4513.1991,N,09308.6491,W,1,11,1.3,341.4,M,-31.2,M,,*76
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,,1.8,1.3,1.2*37
+$GPGSV,3,1,12,01,24,248,48,03,04,251,45,05,12,099,41,09,36,055,45*73
+$GPGSV,3,2,12,11,07,322,00,14,62,260,47,15,43,179,46,18,46,101,43*7B
+$GPGSV,3,3,12,19,15,277,00,21,09,160,39,22,80,056,46,35,25,131,37*7C
+$GPGLL,4513.1991,N,09308.6491,W,175344,A,A*5E
+$GPBOD,,T,,M,,*47
+$PGRME,3.2,M,3.4,M,5.0,M*2D
+$PGRMZ,1120,f,3*29
+$GPRTE,1,1,c,*37
+$GPRMC,175346,A,4513.2333,N,09308.6697,W,65.8,336.0,010705,1.3,E,A*39
+$GPRMB,A,,,,,,,,,,,,A,A*0B
+$GPGGA,175346,4513.2333,N,09308.6697,W,1,11,1.3,334.6,M,-31.2,M,,*71
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,,1.8,1.3,1.2*37
+$GPGSV,3,1,12,01,24,248,48,03,04,251,44,05,12,099,42,09,36,055,44*70
+$GPGSV,3,2,12,11,07,322,00,14,62,260,46,15,43,179,49,18,46,101,43*75
+$GPGSV,3,3,12,19,15,277,00,21,09,160,37,22,80,056,46,35,25,131,37*72
+$GPGLL,4513.2333,N,09308.6697,W,175346,A,A*59
+$GPBOD,,T,,M,,*47
+$PGRME,3.3,M,3.4,M,5.0,M*2C
+$PGRMZ,1098,f,3*2B
+$GPRTE,1,1,c,*37
+$GPRMC,175348,A,4513.2651,N,09308.6938,W,63.4,330.5,010705,1.3,E,A*35
+$GPRMB,A,,,,,,,,,,,,A,A*0B
+$GPGGA,175348,4513.2651,N,09308.6938,W,1,11,1.1,335.5,M,-31.2,M,,*74
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,,1.8,1.1,1.3*34
+$GPGSV,3,1,12,01,24,248,47,03,04,251,42,05,12,099,42,09,35,054,44*7B
+$GPGSV,3,2,12,11,07,322,37,14,62,260,44,15,43,179,50,18,46,101,43*7B
+$GPGSV,3,3,12,19,15,277,00,21,09,160,39,22,80,056,47,35,25,131,36*7C
+$GPGLL,4513.2651,N,09308.6938,W,175348,A,A*5C
+$GPBOD,,T,,M,,*47
+$PGRME,2.9,M,3.4,M,4.5,M*23
+$PGRMZ,1101,f,3*2A
+$GPRTE,1,1,c,*37
+$GPRMC,175350,A,4513.2930,N,09308.7176,W,55.9,329.0,010705,1.3,E,A*32
+$GPRMB,A,,,,,,,,,,,,A,A*0B
+$GPGGA,175350,4513.2930,N,09308.7176,W,1,11,1.2,351.7,M,-31.2,M,,*75
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,,1.9,1.2,1.3*36
+$GPGSV,3,1,12,01,24,248,46,03,04,251,41,05,12,099,42,09,35,054,44*79
+$GPGSV,3,2,12,11,07,322,36,14,62,260,43,15,43,179,50,18,46,101,43*7D
+$GPGSV,3,3,12,19,15,277,00,21,09,160,39,22,80,056,46,35,25,131,35*7E
+$GPGLL,4513.2930,N,09308.7176,W,175350,A,A*5E
+$GPBOD,,T,,M,,*47
+$PGRME,3.0,M,3.5,M,4.6,M*29
+$PGRMZ,1154,f,3*2A
+$GPRTE,1,1,c,*37
+$GPRMC,175352,A,4513.3073,N,09308.7398,W,36.3,303.2,010705,1.3,E,A*38
+$GPRMB,A,,,,,,,,,,,,A,A*0B
+$GPGGA,175352,4513.3073,N,09308.7398,W,1,11,1.2,372.6,M,-31.2,M,,*7A
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,,2.0,1.2,1.4*3B
+$GPGSV,3,1,12,01,24,248,44,03,04,251,40,05,12,099,41,09,35,054,42*7F
+$GPGSV,3,2,12,11,07,322,00,14,62,260,42,15,43,179,48,18,46,101,44*77
+$GPGSV,3,3,12,19,15,277,00,21,09,160,42,22,80,056,43,35,25,131,00*71
+$GPGLL,4513.3073,N,09308.7398,W,175352,A,A*51
+$GPBOD,,T,,M,,*47
+$PGRME,3.0,M,3.6,M,4.7,M*2B
+$PGRMZ,1222,f,3*28
+$GPRTE,1,1,c,*37
+$GPRMC,175354,A,4513.3060,N,09308.7622,W,25.8,257.1,010705,1.3,E,A*32
+$GPRMB,A,,,,,,,,,,,,A,A*0B
+$GPGGA,175354,4513.3060,N,09308.7622,W,1,11,1.5,387.5,M,-31.2,M,,*74
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,,2.3,1.5,1.7*3C
+$GPGSV,3,1,12,01,24,248,42,03,04,251,40,05,12,099,44,09,35,054,43*7D
+$GPGSV,3,2,12,11,07,322,37,14,62,260,40,15,43,179,45,18,46,101,46*7E
+$GPGSV,3,3,12,19,15,277,00,21,09,160,43,22,80,056,42,35,25,131,42*77
+$GPGLL,4513.3060,N,09308.7622,W,175354,A,A*51
+$GPBOD,,T,,M,,*47
+$PGRME,3.1,M,3.7,M,4.8,M*24
+$PGRMZ,1271,f,3*2E
+$GPRTE,1,1,c,*37
+$GPRMC,175356,A,4513.3077,N,09308.7750,W,15.6,299.7,010705,1.3,E,A*3B
+$GPRMB,A,,,,,,,,,,,,A,A*0B
+$GPGGA,175356,4513.3077,N,09308.7750,W,1,12,1.6,390.5,M,-31.2,M,,*72
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,35,2.4,1.6,1.6*3F
+$GPGSV,3,1,12,01,24,248,00,03,04,251,41,05,12,099,44,09,35,054,45*7C
+$GPGSV,3,2,12,11,07,322,00,14,62,260,00,15,43,179,44,18,46,101,49*70
+$GPGSV,3,3,12,19,15,277,41,21,09,160,41,22,80,056,46,35,25,131,42*74
+$GPGLL,4513.3077,N,09308.7750,W,175356,A,A*51
+$GPBOD,,T,,M,,*47
+$PGRME,3.3,M,3.7,M,5.0,M*2F
+$PGRMZ,1281,f,3*21
+$GPRTE,1,1,c,*37
+$GPRMC,175358,A,4513.3141,N,09308.7743,W,21.3,44.5,010705,1.3,E,A*01
+$GPRMB,A,,,,,,,,,,,,A,A*0B
+$GPGGA,175358,4513.3141,N,09308.7743,W,1,12,1.3,387.9,M,-31.2,M,,*75
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,35,1.7,1.3,1.0*3C
+$GPGSV,3,1,12,01,24,248,42,03,04,251,42,05,12,099,43,09,35,054,44*7F
+$GPGSV,3,2,12,11,07,322,00,14,62,260,42,15,43,179,44,18,46,101,48*77
+$GPGSV,3,3,12,19,15,277,39,21,09,160,41,22,80,056,49,35,25,131,42*74
+$GPGLL,4513.3141,N,09308.7743,W,175358,A,A*59
+$GPBOD,,T,,M,,*47
+$PGRME,3.2,M,3.7,M,4.9,M*26
+$PGRMZ,1273,f,3*2C
+$GPRTE,1,1,c,*37
+$GPRMC,175400,A,4513.3187,N,09308.7450,W,42.1,87.5,010705,1.3,E,D*0D
+$GPRMB,A,,,,,,,,,,,,A,D*0E
+$GPGGA,175400,4513.3187,N,09308.7450,W,2,12,1.5,385.0,M,-31.2,M,,*7A
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,35,1.9,1.5,1.0*34
+$GPGSV,3,1,12,01,24,248,43,03,04,251,42,05,12,099,41,09,35,054,41*79
+$GPGSV,3,2,12,11,07,322,00,14,62,260,45,15,43,179,44,18,46,101,45*7D
+$GPGSV,3,3,12,19,15,277,39,21,09,160,42,22,80,056,49,35,25,131,41*74
+$GPGLL,4513.3187,N,09308.7450,W,175400,A,D*5D
+$GPBOD,,T,,M,,*47
+$PGRME,2.6,M,3.4,M,4.3,M*2A
+$PGRMZ,1263,f,3*2D
+$GPRTE,1,1,c,*37
+$GPRMC,175402,A,4513.3093,N,09308.7098,W,60.0,127.4,010705,1.3,E,D*30
+$GPRMB,A,,,,,,,,,,,,A,D*0E
+$GPGGA,175402,4513.3093,N,09308.7098,W,2,12,1.5,383.6,M,-31.2,M,,*7C
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,35,2.0,1.5,1.2*3C
+$GPGSV,3,1,12,01,24,248,45,03,04,251,43,05,12,099,35,09,35,054,00*78
+$GPGSV,3,2,12,11,07,322,42,14,62,260,47,15,43,179,44,18,46,101,44*78
+$GPGSV,3,3,12,19,15,277,43,21,09,160,42,22,80,056,48,35,25,131,00*7D
+$GPGLL,4513.3093,N,09308.7098,W,175402,A,D*5B
+$GPBOD,,T,,M,,*47
+$PGRME,2.7,M,3.0,M,4.2,M*2E
+$PGRMZ,1258,f,3*25
+$GPRTE,1,1,c,*37
+$GPRMC,175404,A,4513.2715,N,09308.6844,W,81.9,161.5,010705,1.3,E,D*33
+$GPRMB,A,,,,,,,,,,,,A,D*0E
+$GPGGA,175404,4513.2715,N,09308.6844,W,2,12,1.6,382.8,M,-31.2,M,,*76
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,35,2.1,1.6,1.0*3C
+$GPGSV,3,1,12,01,24,248,45,03,04,251,43,05,12,099,36,09,35,054,00*7B
+$GPGSV,3,2,12,11,07,322,40,14,62,260,47,15,43,179,43,18,46,101,42*7B
+$GPGSV,3,3,12,19,15,277,45,21,09,160,41,22,80,056,47,35,25,131,00*77
+$GPGLL,4513.2715,N,09308.6844,W,175404,A,D*5D
+$GPBOD,,T,,M,,*47
+$PGRME,2.9,M,3.1,M,4.5,M*26
+$PGRMZ,1256,f,3*2B
+$GPRTE,1,1,c,*37
+$GPRMC,175406,A,4513.2281,N,09308.6792,W,79.5,173.8,010705,1.3,E,D*38
+$GPRMB,A,,,,,,,,,,,,A,D*0E
+$GPGGA,175406,4513.2281,N,09308.6792,W,2,12,2.0,377.4,M,-31.2,M,,*7B
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,35,2.6,2.0,1.2*3C
+$GPGSV,3,1,12,01,24,248,45,03,04,251,42,05,12,099,00,09,35,054,44*7F
+$GPGSV,3,2,12,11,07,322,40,14,62,260,46,15,43,179,41,18,46,101,43*79
+$GPGSV,3,3,12,19,15,277,44,21,09,160,40,22,80,056,49,35,25,131,00*79
+$GPGLL,4513.2281,N,09308.6792,W,175406,A,D*53
+$GPBOD,,T,,M,,*47
+$PGRME,2.6,M,3.2,M,4.2,M*2D
+$PGRMZ,1238,f,3*23
+$GPRTE,1,1,c,*37
+$GPRMC,175408,A,4513.1834,N,09308.6782,W,81.9,181.0,010705,1.3,E,D*3E
+$GPRMB,A,,,,,,,,,,,,A,D*0E
+$GPGGA,175408,4513.1834,N,09308.6782,W,2,12,1.8,332.3,M,-31.2,M,,*7E
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,35,2.1,1.8,1.0*32
+$GPGSV,3,1,12,01,24,248,44,03,04,251,41,05,12,099,38,09,35,054,45*77
+$GPGSV,3,2,12,11,07,322,38,14,62,261,47,15,43,179,41,18,46,101,44*71
+$GPGSV,3,3,12,19,15,277,43,21,09,160,39,22,80,056,50,35,25,131,00*78
+$GPGLL,4513.1834,N,09308.6782,W,175408,A,D*5B
+$GPBOD,,T,,M,,*47
+$PGRME,2.4,M,2.9,M,3.8,M*28
+$PGRMZ,1090,f,3*23
+$GPRTE,1,1,c,*37
+$GPRMC,175410,A,4513.1402,N,09308.6855,W,77.7,189.0,010705,1.3,E,D*34
+$GPRMB,A,,,,,,,,,,,,A,D*0E
+$GPGGA,175410,4513.1402,N,09308.6855,W,2,11,1.9,339.7,M,-31.2,M,,*76
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,,2.5,1.9,1.5*34
+$GPGSV,3,1,12,01,24,248,43,03,04,251,42,05,12,099,00,09,35,054,47*7A
+$GPGSV,3,2,12,11,07,322,39,14,62,261,47,15,42,179,40,18,46,101,45*71
+$GPGSV,3,3,12,19,15,277,42,21,09,160,38,22,80,056,50,35,25,131,00*78
+$GPGLL,4513.1402,N,09308.6855,W,175410,A,D*5E
+$GPBOD,,T,,M,,*47
+$PGRME,2.5,M,3.0,M,3.9,M*20
+$PGRMZ,1115,f,3*2F
+$GPRTE,1,1,c,*37
+$GPRMC,175412,A,4513.1066,N,09308.6877,W,53.8,177.1,010705,1.3,E,D*39
+$GPRMB,A,,,,,,,,,,,,A,D*0E
+$GPGGA,175412,4513.1066,N,09308.6877,W,2,11,2.3,368.0,M,-31.2,M,,*78
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,,3.1,2.3,1.9*34
+$GPGSV,3,1,12,01,24,248,41,03,04,251,41,05,12,099,41,09,35,054,48*71
+$GPGSV,3,2,12,11,07,322,40,14,62,261,44,15,42,179,41,18,46,101,44*7C
+$GPGSV,3,3,12,19,15,277,42,21,09,160,37,22,80,056,49,35,25,131,00*7F
+$GPGLL,4513.1066,N,09308.6877,W,175412,A,D*5A
+$GPBOD,,T,,M,,*47
+$PGRME,2.6,M,2.9,M,3.9,M*2B
+$PGRMZ,1207,f,3*2F
+$GPRTE,1,1,c,*37
+$GPRMC,175414,A,4513.0898,N,09308.6688,W,33.6,94.6,010705,1.3,E,D*0A
+$GPRMB,A,,,,,,,,,,,,A,D*0E
+$GPGGA,175414,4513.0898,N,09308.6688,W,2,11,1.7,396.1,M,-31.2,M,,*7F
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,,2.2,1.7,1.1*39
+$GPGSV,3,1,12,01,24,248,42,03,04,251,41,05,12,099,39,09,35,054,47*72
+$GPGSV,3,2,12,11,07,322,41,14,62,261,44,15,42,179,39,18,46,101,42*74
+$GPGSV,3,3,12,19,15,277,43,21,09,160,00,22,80,056,46,35,25,131,00*75
+$GPGLL,4513.0898,N,09308.6688,W,175414,A,D*5A
+$GPBOD,,T,,M,,*47
+$PGRME,3.4,M,3.3,M,4.8,M*25
+$PGRMZ,1299,f,3*28
+$GPRTE,1,1,c,*37
+$GPRMC,175416,A,4513.1063,N,09308.6546,W,39.8,31.6,010705,1.3,E,D*0F
+$GPRMB,A,,,,,,,,,,,,A,D*0E
+$GPGGA,175416,4513.1063,N,09308.6546,W,2,11,2.1,404.4,M,-31.2,M,,*7D
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,,2.6,2.1,1.2*3B
+$GPGSV,3,1,12,01,24,248,46,03,04,251,44,05,12,099,00,09,35,054,00*7A
+$GPGSV,3,2,12,11,07,322,43,14,62,261,43,15,42,179,41,18,46,101,44*78
+$GPGSV,3,3,12,19,15,277,43,21,09,160,45,22,80,056,45,35,25,131,38*7C
+$GPGLL,4513.1063,N,09308.6546,W,175416,A,D*54
+$GPBOD,,T,,M,,*47
+$PGRME,5.1,M,3.3,M,6.3,M*2F
+$PGRMZ,1327,f,3*2C
+$GPRTE,1,1,c,*37
+$GPRMC,175418,A,4513.1345,N,09308.6675,W,58.1,334.7,010705,1.3,E,D*3C
+$GPRMB,A,,,,,,,,,,,,A,D*0E
+$GPGGA,175418,4513.1345,N,09308.6675,W,2,11,1.7,381.8,M,-31.2,M,,*74
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,,2.8,1.7,1.5*37
+$GPGSV,3,1,12,01,24,248,45,03,04,251,43,05,12,099,41,09,35,054,44*7B
+$GPGSV,3,2,12,11,07,322,42,14,62,261,46,15,42,179,43,18,46,101,45*7F
+$GPGSV,3,3,12,19,15,277,42,21,09,160,43,22,80,056,46,35,25,131,40*77
+$GPGLL,4513.1345,N,09308.6675,W,175418,A,D*5E
+$GPBOD,,T,,M,,*47
+$PGRME,2.8,M,3.2,M,4.2,M*23
+$PGRMZ,1253,f,3*2E
+$GPRTE,1,1,c,*37
+$GPRMC,175420,A,4513.1787,N,09308.6619,W,62.9,342.4,010705,1.3,E,D*34
+$GPRMB,A,,,,,,,,,,,,A,D*0E
+$GPGGA,175420,4513.1787,N,09308.6619,W,2,11,1.0,365.7,M,-31.2,M,,*7D
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,,1.5,1.0,1.1*3A
+$GPGSV,3,1,12,01,24,248,45,03,04,251,42,05,12,099,41,09,35,054,43*7D
+$GPGSV,3,2,12,11,07,322,40,14,62,261,49,15,42,179,45,18,46,101,45*74
+$GPGSV,3,3,12,19,15,277,00,21,09,160,41,22,80,056,45,35,25,131,39*7E
+$GPGLL,4513.1787,N,09308.6619,W,175420,A,D*55
+$GPBOD,,T,,M,,*47
+$PGRME,2.9,M,3.3,M,4.4,M*25
+$PGRMZ,1200,f,3*28
+$GPRTE,1,1,c,*37
+$GPRMC,175422,A,4513.2143,N,09308.6744,W,65.4,345.6,010705,1.3,E,D*3D
+$GPRMB,A,,,,,,,,,,,,A,D*0E
+$GPGGA,175422,4513.2143,N,09308.6744,W,2,11,1.1,354.8,M,-31.2,M,,*77
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,,1.6,1.1,1.2*3B
+$GPGSV,3,1,12,01,24,248,46,03,04,251,40,05,12,099,41,09,35,054,41*7E
+$GPGSV,3,2,12,11,07,322,39,14,62,261,49,15,42,179,47,18,46,102,45*7B
+$GPGSV,3,3,12,19,15,277,00,21,09,160,40,22,80,056,45,35,25,131,00*75
+$GPGLL,4513.2143,N,09308.6744,W,175422,A,D*53
+$GPBOD,,T,,M,,*47
+$PGRME,2.9,M,3.4,M,4.4,M*22
+$PGRMZ,1164,f,3*29
+$GPRTE,1,1,c,*37
+$GPRMC,175424,A,4513.2491,N,09308.6842,W,63.1,351.3,010705,1.3,E,A*3E
+$GPRMB,A,,,,,,,,,,,,A,A*0B
+$GPGGA,175424,4513.2491,N,09308.6842,W,1,11,1.2,353.7,M,-31.2,M,,*7A
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,,1.7,1.2,1.2*39
+$GPGSV,3,1,12,01,24,248,46,03,04,251,39,05,12,099,42,09,35,054,40*72
+$GPGSV,3,2,12,11,07,322,37,14,62,261,50,15,42,179,48,18,46,102,44*73
+$GPGSV,3,3,12,19,15,277,39,21,09,160,00,22,80,056,45,35,25,131,00*7B
+$GPGLL,4513.2491,N,09308.6842,W,175424,A,A*53
+$GPBOD,,T,,M,,*47
+$PGRME,2.9,M,3.3,M,4.4,M*25
+$PGRMZ,1160,f,3*2D
+$GPRTE,1,1,c,*37
+$GPRMC,175426,A,4513.2826,N,09308.6870,W,60.4,356.5,010705,1.3,E,A*3A
+$GPRMB,A,,,,,,,,,,,,A,A*0B
+$GPGGA,175426,4513.2826,N,09308.6870,W,1,12,1.4,356.0,M,-31.2,M,,*7E
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,35,2.1,1.4,1.5*3B
+$GPGSV,3,1,12,01,24,248,45,03,04,251,39,05,12,099,41,09,35,054,00*76
+$GPGSV,3,2,12,11,07,322,00,14,62,261,49,15,42,179,48,18,46,102,43*78
+$GPGSV,3,3,12,19,14,277,39,21,09,160,00,22,80,056,47,35,25,131,38*73
+$GPGLL,4513.2826,N,09308.6870,W,175426,A,A*50
+$GPBOD,,T,,M,,*47
+$PGRME,3.1,M,3.5,M,4.6,M*28
+$PGRMZ,1168,f,3*25
+$GPRTE,1,1,c,*37
+$GPRMC,175428,A,4513.3156,N,09308.6914,W,58.7,353.6,010705,1.3,E,A*36
+$GPRMB,A,,,,,,,,,,,,A,A*0B
+$GPGGA,175428,4513.3156,N,09308.6914,W,1,12,1.6,355.4,M,-31.2,M,,*79
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,35,2.1,1.6,1.3*3F
+$GPGSV,3,1,12,01,24,248,47,03,04,251,40,05,12,099,40,09,35,054,35*7D
+$GPGSV,3,2,12,11,07,322,00,14,62,261,48,15,42,179,47,18,46,102,45*70
+$GPGSV,3,3,12,19,14,277,38,21,09,160,00,22,80,056,47,35,25,131,39*73
+$GPGLL,4513.3156,N,09308.6914,W,175428,A,A*52
+$GPBOD,,T,,M,,*47
+$PGRME,3.2,M,3.4,M,4.7,M*2B
+$PGRMZ,1166,f,3*2B
+$GPRTE,1,1,c,*37
+$GPRMC,175430,A,4513.3428,N,09308.6991,W,44.7,343.9,010705,1.3,E,A*3D
+$GPRMB,A,,,,,,,,,,,,A,A*0B
+$GPGGA,175430,4513.3428,N,09308.6991,W,1,12,2.1,372.1,M,-31.2,M,,*75
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,35,2.6,2.1,1.5*3A
+$GPGSV,3,1,12,01,24,248,46,03,04,251,43,05,12,099,40,09,35,054,39*73
+$GPGSV,3,2,12,11,07,322,37,14,62,261,45,15,42,179,46,18,46,102,44*79
+$GPGSV,3,3,12,19,14,277,38,21,09,160,42,22,80,056,46,35,25,131,38*75
+$GPGLL,4513.3428,N,09308.6991,W,175430,A,A*5A
+$GPBOD,,T,,M,,*47
+$PGRME,2.8,M,3.2,M,4.3,M*22
+$PGRMZ,1221,f,3*2B
+$GPRTE,1,1,c,*37
+$GPRMC,175432,A,4513.3384,N,09308.7019,W,32.6,161.9,010705,1.3,E,A*34
+$GPRMB,A,,,,,,,,,,,,A,A*0B
+$GPGGA,175432,4513.3384,N,09308.7019,W,1,12,2.6,408.7,M,-31.2,M,,*75
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,35,3.1,2.6,1.0*3E
+$GPGSV,3,1,12,01,24,248,44,03,04,251,42,05,12,099,41,09,35,054,39*71
+$GPGSV,3,2,12,11,07,322,00,14,62,261,00,15,42,179,45,18,46,102,43*78
+$GPGSV,3,3,12,19,14,277,00,21,09,160,42,22,80,056,44,35,25,131,37*73
+$GPGLL,4513.3384,N,09308.7019,W,175432,A,A*51
+$GPBOD,,T,,M,,*47
+$PGRME,4.0,M,3.3,M,5.4,M*2B
+$PGRMZ,1341,f,3*2C
+$GPRTE,1,1,c,*37
+$GPRMC,175434,A,4513.3286,N,09308.7127,W,27.0,235.0,010705,1.3,E,A*34
+$GPRMB,A,,,,,,,,,,,,A,A*0B
+$GPGGA,175434,4513.3286,N,09308.7127,W,1,12,1.7,413.3,M,-31.2,M,,*70
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,35,2.7,1.7,1.4*3F
+$GPGSV,3,1,12,01,24,248,41,03,04,251,00,05,12,099,42,09,35,054,41*7E
+$GPGSV,3,2,12,11,07,322,45,14,62,261,34,15,42,179,43,18,46,102,44*7F
+$GPGSV,3,3,12,19,14,277,00,21,08,160,43,22,80,056,44,35,25,131,38*7C
+$GPGLL,4513.3286,N,09308.7127,W,175434,A,A*58
+$GPBOD,,T,,M,,*47
+$PGRME,4.1,M,3.5,M,5.6,M*2E
+$PGRMZ,1356,f,3*2A
+$GPRTE,1,1,c,*37
+$GPRMC,175436,A,4513.3189,N,09308.7331,W,44.8,174.8,010705,1.3,E,A*3C
+$GPRMB,A,,,,,,,,,,,,A,A*0B
+$GPGGA,175436,4513.3189,N,09308.7331,W,1,12,1.2,374.2,M,-31.2,M,,*79
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,35,1.8,1.2,1.3*31
+$GPGSV,3,1,12,01,24,248,41,03,04,251,37,05,12,099,45,09,35,054,44*78
+$GPGSV,3,2,12,11,07,322,44,14,62,261,38,15,42,179,44,18,46,102,47*76
+$GPGSV,3,3,12,19,14,277,38,21,08,160,42,22,80,056,45,35,25,131,37*78
+$GPGLL,4513.3189,N,09308.7331,W,175436,A,A*53
+$GPBOD,,T,,M,,*47
+$PGRME,2.7,M,3.1,M,4.1,M*2C
+$PGRMZ,1228,f,3*22
+$GPRTE,1,1,c,*37
+$GPRMC,175438,A,4513.2871,N,09308.7229,W,61.9,166.6,010705,1.3,E,A*3E
+$GPRMB,A,,,,,,,,,,,,A,A*0B
+$GPGGA,175438,4513.2871,N,09308.7229,W,1,12,1.2,341.9,M,-31.2,M,,*7D
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,35,1.9,1.2,1.4*37
+$GPGSV,3,1,12,01,24,248,42,03,04,251,39,05,12,099,43,09,35,054,45*72
+$GPGSV,3,2,12,11,07,322,00,14,62,261,39,15,42,179,43,18,46,102,49*7E
+$GPGSV,3,3,12,19,14,277,38,21,08,160,00,22,79,060,48,35,25,131,00*74
+$GPGLL,4513.2871,N,09308.7229,W,175438,A,A*5A
+$GPBOD,,T,,M,,*47
+$PGRME,2.8,M,3.2,M,4.2,M*23
+$PGRMZ,1122,f,3*2B
+$GPRTE,1,1,c,*37
+$GPRMC,175440,A,4513.2532,N,09308.7162,W,61.3,173.1,010705,1.3,E,A*3E
+$GPRMB,A,,,,,,,,,,,,A,A*0B
+$GPGGA,175440,4513.2532,N,09308.7162,W,1,12,1.4,324.6,M,-31.2,M,,*7E
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,35,2.0,1.4,1.4*3B
+$GPGSV,3,1,12,01,24,248,43,03,04,251,39,05,12,099,00,09,35,054,46*77
+$GPGSV,3,2,12,11,07,322,00,14,62,261,39,15,42,179,41,18,46,102,50*74
+$GPGSV,3,3,12,19,14,277,38,21,08,160,00,22,79,060,49,35,25,131,00*75
+$GPGLL,4513.2532,N,09308.7162,W,175440,A,A*53
+$GPBOD,,T,,M,,*47
+$PGRME,2.8,M,3.2,M,4.2,M*23
+$PGRMZ,1065,f,3*29
+$GPRTE,1,1,c,*37
+$GPRMC,175442,A,4513.2220,N,09308.7121,W,57.4,175.1,010705,1.3,E,A*3B
+$GPRMB,A,,,,,,,,,,,,A,A*0B
+$GPGGA,175442,4513.2220,N,09308.7121,W,1,12,1.5,316.8,M,-31.2,M,,*71
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,35,2.2,1.5,1.6*3A
+$GPGSV,3,1,12,01,24,248,42,03,04,251,00,05,12,099,31,09,35,054,46*7E
+$GPGSV,3,2,12,11,07,322,00,14,62,261,40,15,42,179,40,18,46,102,49*73
+$GPGSV,3,3,12,19,14,277,40,21,08,160,00,22,79,060,49,35,25,131,00*7A
+$GPGLL,4513.2220,N,09308.7121,W,175442,A,A*52
+$GPBOD,,T,,M,,*47
+$PGRME,3.0,M,3.3,M,4.5,M*2C
+$PGRMZ,1039,f,3*20
+$GPRTE,1,1,c,*37
+$GPRMC,175444,A,4513.1912,N,09308.7157,W,56.5,186.4,010705,1.3,E,A*3C
+$GPRMB,A,,,,,,,,,,,,A,A*0B
+$GPGGA,175444,4513.1912,N,09308.7157,W,1,11,2.2,320.7,M,-31.2,M,,*72
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,,2.7,2.2,1.0*3B
+$GPGSV,3,1,12,01,24,248,40,03,04,251,43,05,12,099,33,09,35,054,47*78
+$GPGSV,3,2,12,11,07,322,00,14,62,261,42,15,42,179,38,18,46,102,48*7F
+$GPGSV,3,3,12,19,14,277,42,21,08,160,33,22,79,060,49,35,25,131,00*78
+$GPGLL,4513.1912,N,09308.7157,W,175444,A,A*5C
+$GPBOD,,T,,M,,*47
+$PGRME,3.1,M,3.3,M,4.5,M*2D
+$PGRMZ,1052,f,3*2D
+$GPRTE,1,1,c,*37
+$GPRMC,175446,A,4513.1569,N,09308.7240,W,64.2,190.4,010705,1.3,E,A*3A
+$GPRMB,A,,,,,,,,,,,,A,A*0B
+$GPGGA,175446,4513.1569,N,09308.7240,W,1,11,2.0,329.4,M,-31.2,M,,*7D
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,,2.8,2.0,1.4*32
+$GPGSV,3,1,12,01,24,248,39,03,04,251,42,05,12,099,39,09,35,054,48*72
+$GPGSV,3,2,12,11,07,322,42,14,62,261,42,15,42,179,37,18,46,102,48*76
+$GPGSV,3,3,12,19,14,277,42,21,08,160,34,22,79,060,47,35,25,131,00*71
+$GPGLL,4513.1569,N,09308.7240,W,175446,A,A*5B
+$GPBOD,,T,,M,,*47
+$PGRME,3.3,M,3.2,M,4.7,M*2C
+$PGRMZ,1081,f,3*23
+$GPRTE,1,1,c,*37
+$GPRMC,175448,A,4513.1314,N,09308.7235,W,39.1,170.8,010705,1.3,E,A*33
+$GPRMB,A,,,,,,,,,,,,A,A*0B
+$GPGGA,175448,4513.1314,N,09308.7235,W,1,11,1.8,360.5,M,-31.2,M,,*7A
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,,2.1,1.8,1.0*34
+$GPGSV,3,1,12,01,24,248,38,03,04,251,41,05,12,099,00,09,35,054,47*75
+$GPGSV,3,2,12,11,07,322,43,14,62,261,43,15,42,179,36,18,46,102,45*7A
+$GPGSV,3,3,12,19,14,277,41,21,08,160,37,22,79,060,45,35,25,131,00*73
+$GPGLL,4513.1314,N,09308.7235,W,175448,A,A*5B
+$GPBOD,,T,,M,,*47
+$PGRME,3.5,M,3.3,M,4.9,M*25
+$PGRMZ,1183,f,3*20
+$GPRTE,1,1,c,*37
+$GPRMC,175450,A,4513.1194,N,09308.7059,W,39.3,105.1,010705,1.3,E,A*31
+$GPRMB,A,,,,,,,,,,,,A,A*0B
+$GPGGA,175450,4513.1194,N,09308.7059,W,1,11,1.4,382.7,M,-31.2,M,,*73
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,,2.1,1.4,1.0*38
+$GPGSV,3,1,12,01,24,248,39,03,04,251,41,05,12,099,35,09,35,054,46*73
+$GPGSV,3,2,12,11,07,322,44,14,62,261,43,15,42,179,41,18,46,102,44*7C
+$GPGSV,3,3,12,19,14,277,41,21,08,160,39,22,79,060,44,35,25,131,00*7C
+$GPGLL,4513.1194,N,09308.7059,W,175450,A,A*50
+$GPBOD,,T,,M,,*47
+$PGRME,3.1,M,3.4,M,4.8,M*27
+$PGRMZ,1256,f,3*2B
+$GPRTE,1,1,c,*37
+$GPRMC,175452,A,4513.1302,N,09308.6919,W,28.5,27.1,010705,1.3,E,A*05
+$GPRMB,A,,,,,,,,,,,,A,A*0B
+$GPGGA,175452,4513.1302,N,09308.6919,W,1,11,1.0,359.3,M,-31.2,M,,*76
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,,1.5,1.0,1.1*3A
+$GPGSV,3,1,12,01,24,248,41,03,04,251,42,05,12,099,39,09,35,054,45*70
+$GPGSV,3,2,12,11,07,322,43,14,62,261,46,15,42,179,42,18,46,102,44*7D
+$GPGSV,3,3,12,19,14,277,44,21,08,160,40,22,79,060,46,35,25,131,42*73
+$GPGLL,4513.1302,N,09308.6919,W,175452,A,A*53
+$GPBOD,,T,,M,,*47
+$PGRME,2.8,M,3.1,M,4.2,M*20
+$PGRMZ,1179,f,3*25
+$GPRTE,1,1,c,*37
+$GPRMC,175454,A,4513.1579,N,09308.6871,W,53.5,4.1,010705,1.3,E,A*3B
+$GPRMB,A,,,,,,,,,,,,A,A*0B
+$GPGGA,175454,4513.1579,N,09308.6871,W,1,11,1.1,347.6,M,-31.2,M,,*7E
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,,1.7,1.1,1.2*3A
+$GPGSV,3,1,12,01,24,248,44,03,04,251,43,05,12,099,40,09,35,054,42*7D
+$GPGSV,3,2,12,11,07,322,41,14,62,261,46,15,42,179,46,18,46,102,45*7A
+$GPGSV,3,3,12,19,14,277,44,21,08,160,40,22,79,060,47,35,25,131,42*72
+$GPGLL,4513.1579,N,09308.6871,W,175454,A,A*50
+$GPBOD,,T,,M,,*47
+$PGRME,2.7,M,3.1,M,4.1,M*2C
+$PGRMZ,1140,f,3*2F
+$GPRTE,1,1,c,*37
+$GPRMC,175456,A,4513.1905,N,09308.6860,W,58.6,1.4,010705,1.3,E,A*36
+$GPRMB,A,,,,,,,,,,,,A,A*0B
+$GPGGA,175456,4513.1905,N,09308.6860,W,1,11,1.1,343.6,M,-31.2,M,,*7F
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,,1.7,1.1,1.2*3A
+$GPGSV,3,1,12,01,24,248,44,03,04,251,41,05,12,099,40,09,35,054,00*79
+$GPGSV,3,2,12,11,07,322,40,14,62,261,47,15,42,179,47,18,46,102,45*7B
+$GPGSV,3,3,12,19,14,277,45,21,08,160,38,22,79,060,48,35,25,131,41*70
+$GPGLL,4513.1905,N,09308.6860,W,175456,A,A*55
+$GPBOD,,T,,M,,*47
+$PGRME,2.8,M,3.1,M,4.2,M*20
+$PGRMZ,1127,f,3*2E
+$GPRTE,1,1,c,*37
+$GPRMC,175458,A,4513.2232,N,09308.6867,W,58.1,357.9,010705,1.3,E,A*39
+$GPRMB,A,,,,,,,,,,,,A,A*0B
+$GPGGA,175458,4513.2232,N,09308.6867,W,1,11,1.2,344.1,M,-31.2,M,,*79
+$GPGSA,A,3,01,03,05,09,11,14,15,18,19,21,22,,1.8,1.2,1.3*37
+$GPGSV,3,1,12,01,24,248,46,03,04,251,41,05,12,099,39,09,35,054,00*75
+$GPGSV,3,2,12,11,07,322,00,14,62,261,47,15,42,179,48,18,46,102,45*70
+$GPGSV,3,3,12,19,14,277,44,21,08,160,36,22,79,060,48,35,25,131,40*7E
+$GPGLL,4513.2232,N,09308.6867,W,175458,A,A*50
+$GPBOD,,T,,M,,*47
+$PGRME,2.8,M,3.1,M,4.2,M*20
+$PGRMZ,1129,f,3*20
+$GPRTE,1,1,c,*37
diff --git a/utils/GPSsmooth/gps.cxx b/utils/GPSsmooth/gps.cxx
new file mode 100644 (file)
index 0000000..54bdeb4
--- /dev/null
@@ -0,0 +1,159 @@
+#include <iostream>
+
+#include <simgear/constants.h>
+#include <simgear/misc/sgstream.hxx>
+#include <simgear/misc/strutils.hxx>
+
+#include "gps.hxx"
+
+SG_USING_STD(cout);
+SG_USING_STD(endl);
+
+
+GPSTrack::GPSTrack() {};
+GPSTrack::~GPSTrack() {};
+
+
+// load the specified file, return the number of records loaded
+int GPSTrack::load( const string &file ) {
+    int count = 0;
+
+    data.clear();
+
+    // openg the file
+    sg_gzifstream in( file );
+    if ( !in.is_open() ) {
+        cout << "Cannot open file: " << file << endl;
+        return 0;
+    }
+
+    vector <string> tokens;
+    GPSPoint p;
+
+    while ( ! in.eof() ) {
+        char tmp[2049];
+
+       in.getline(tmp, 2048);
+
+        tokens.clear();
+        tokens = simgear::strutils::split(tmp, ",");
+
+        int dd;
+        double raw, min;
+
+        if ( tokens[0] == "$GPRMC" && tokens.size() == 13 ) {
+            int raw_time = atoi(tokens[1].c_str());
+            GPSTime gps_time = GPSTime( raw_time );
+            if ( (gps_time.get_time() > p.gps_time.get_time()) &&
+                 (p.gps_time.get_time() > 1.0) )
+            {
+                // new data cycle store last data before continuing
+                data.push_back( p );
+                count++;
+            }
+
+            p.gps_time = gps_time;
+
+            raw = atof( tokens[3].c_str() );
+            dd = (int)(raw / 100.00);
+            min = raw - dd * 100.0;
+            p.lat_deg = dd + min / 60.0;
+            if ( tokens[4] == "S" ) {
+                p.lat_deg = -p.lat_deg;
+            }
+            raw = atof( tokens[5].c_str() );
+            dd = (int)(raw / 100.00);
+            min = raw - dd * 100.0;
+            p.lon_deg = dd + min / 60.0;
+            if ( tokens[6] == "W" ) {
+                p.lon_deg = -p.lon_deg;
+            }
+
+            static double max_speed = 0.0;
+            p.speed_kts = atof( tokens[7].c_str() );
+            if ( p.speed_kts > max_speed ) {
+                max_speed = p.speed_kts;
+                cout << "max speed = " << max_speed << endl;
+            }
+            p.course_true = atof( tokens[8].c_str() ) * SGD_DEGREES_TO_RADIANS;
+
+        } else if ( tokens[0] == "$GPGGA" && tokens.size() == 15 ) {
+            int raw_time = atoi(tokens[1].c_str());
+            GPSTime gps_time = GPSTime( raw_time );
+            if ( (gps_time.get_time() != p.gps_time.get_time()) &&
+                 (p.gps_time.get_time() > 1.0) ) {
+                // new data cycle store last data before continuing
+                data.push_back( p );
+                count++;
+            }
+
+            p.gps_time = gps_time;
+
+            raw = atof( tokens[2].c_str() );
+            dd = (int)(raw / 100.00);
+            min = raw - dd * 100.0;
+            p.lat_deg = dd + min / 60.0;
+            if ( tokens[3] == "S" ) {
+                p.lat_deg = -p.lat_deg;
+            }
+            raw = atof( tokens[4].c_str() );
+            dd = (int)(raw / 100.00);
+            min = raw - dd * 100.0;
+            p.lon_deg = dd + min / 60.0;
+            if ( tokens[5] == "W" ) {
+                p.lon_deg = -p.lon_deg;
+            }
+
+            p.fix_quality = atoi( tokens[6].c_str() );
+            p.num_satellites = atoi( tokens[7].c_str() );
+            p.hdop = atof( tokens[8].c_str() );
+
+            static double max_alt = 0.0;
+            double alt = atof( tokens[9].c_str() );
+            if ( alt > max_alt ) {
+                max_alt = alt;
+                cout << "max alt = " << max_alt << endl;
+            }
+
+            if ( tokens[10] == "F" || tokens[10] == "f" ) {
+                alt *= SG_FEET_TO_METER;
+            }
+            p.altitude_msl = alt;
+        }
+    }
+
+    return count;
+}
+
+
+static double interp( double a, double b, double p, bool rotational = false ) {
+    double diff = b - a;
+    if ( rotational ) {
+        // special handling of rotational data
+        if ( diff > SGD_PI ) {
+            diff -= SGD_2PI;
+        } else if ( diff < -SGD_PI ) {
+            diff += SGD_2PI;
+        }
+    }
+    return a + diff * p;
+}
+
+
+GPSPoint GPSInterpolate( const GPSPoint A, const GPSPoint B,
+                         const double percent ) {
+    GPSPoint p;
+    p.gps_time = GPSTime((int)interp(A.gps_time.get_time(),
+                                     B.gps_time.get_time(),
+                                     percent));
+    p.lat_deg = interp(A.lat_deg, B.lat_deg, percent);
+    p.lon_deg = interp(A.lon_deg, B.lon_deg, percent);
+    p.fix_quality = (int)interp(A.fix_quality, B.fix_quality, percent);
+    p.num_satellites = (int)interp(A.num_satellites, B.num_satellites, percent);
+    p.hdop = interp(A.hdop, B.hdop, percent);
+    p.altitude_msl = interp(A.altitude_msl, B.altitude_msl, percent);
+    p.speed_kts = interp(A.speed_kts, B.speed_kts, percent);
+    p.course_true = interp(A.course_true, B.course_true, percent, true);
+
+    return p;
+}
diff --git a/utils/GPSsmooth/gps.hxx b/utils/GPSsmooth/gps.hxx
new file mode 100644 (file)
index 0000000..6a6137a
--- /dev/null
@@ -0,0 +1,109 @@
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
+#include <simgear/compiler.h>
+
+#include <iostream>
+#include <string>
+#include <vector>
+
+SG_USING_STD(cout);
+SG_USING_STD(endl);
+SG_USING_STD(string);
+SG_USING_STD(vector);
+
+
+// encapsulate a gps integer time (fixme, assumes all times in a track
+// are from the same day, so we don't handle midnight roll over)
+class GPSTime {
+
+public:
+
+    int seconds;
+
+    inline GPSTime( const int hh, const int mm, const int ss ) {
+        seconds = hh*3600 + mm*60 + ss;
+    }
+    inline GPSTime( const int gpstime ) {
+        int tmp = gpstime;
+        int hh = tmp / 10000;
+        tmp -= hh * 10000;
+        int mm = tmp / 100;
+        tmp -= mm * 100;
+        int ss = tmp;
+        seconds = hh*3600 + mm*60 + ss;
+        // cout << gpstime << " = " << seconds << endl;
+    }
+    inline ~GPSTime() {}
+
+    inline int get_time() const { return seconds; }
+    inline int diff_sec( const GPSTime t ) const {
+        return seconds - t.seconds;        
+    }
+};
+
+
+
+// encapsulate the interesting gps data for a moment in time
+class GPSPoint {
+
+public:
+
+    GPSTime gps_time;
+    double lat_deg;
+    double lon_deg;
+    int fix_quality;
+    int num_satellites;
+    double hdop;
+    double altitude_msl;
+    double speed_kts;
+    double course_true;
+
+    GPSPoint() :
+        gps_time(GPSTime(0,0,0)),
+        lat_deg(0.0),
+        lon_deg(0.0),
+        fix_quality(0),
+        num_satellites(0),
+        hdop(0.0),
+        altitude_msl(0.0),
+        speed_kts(0.0),
+        course_true(0.0)
+    { }
+
+    inline int get_time() const { return gps_time.get_time(); }
+};
+
+
+// Manage a saved gps log (track file)
+class GPSTrack {
+
+private:
+
+    vector <GPSPoint> data;
+
+public:
+
+    GPSTrack();
+    ~GPSTrack();
+
+    int load( const string &file );
+
+    inline int size() const { return data.size(); }
+
+    inline GPSPoint get_point( const unsigned int i )
+    {
+        if ( i < data.size() ) {
+            return data[i];
+        } else {
+            return GPSPoint();
+        }
+    }
+        
+
+};
+
+
+GPSPoint GPSInterpolate( const GPSPoint A, const GPSPoint B,
+                         const double percent );
diff --git a/utils/GPSsmooth/main.cxx b/utils/GPSsmooth/main.cxx
new file mode 100644 (file)
index 0000000..df6474b
--- /dev/null
@@ -0,0 +1,468 @@
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
+#include <iostream>
+#include <string>
+
+#include <plib/net.h>
+#include <plib/sg.h>
+
+#include <simgear/io/lowlevel.hxx> // endian tests
+#include <simgear/timing/timestamp.hxx>
+
+#include <Network/net_ctrls.hxx>
+#include <Network/net_fdm.hxx>
+
+#include "gps.hxx"
+
+
+SG_USING_STD(cout);
+SG_USING_STD(endl);
+SG_USING_STD(string);
+
+
+// Network channels
+static netSocket fdm_sock, ctrls_sock;
+
+// gps data
+GPSTrack track;
+
+// Default ports
+static int fdm_port = 5505;
+static int ctrls_port = 5506;
+
+// Default path
+static string file = "";
+
+// Master time counter
+float sim_time = 0.0f;
+
+// sim control
+SGTimeStamp last_time_stamp;
+SGTimeStamp current_time_stamp;
+
+bool inited = false;
+
+
+// The function htond is defined this way due to the way some
+// processors and OSes treat floating point values.  Some will raise
+// an exception whenever a "bad" floating point value is loaded into a
+// floating point register.  Solaris is notorious for this, but then
+// so is LynxOS on the PowerPC.  By translating the data in place,
+// there is no need to load a FP register with the "corruped" floating
+// point value.  By doing the BIG_ENDIAN test, I can optimize the
+// routine for big-endian processors so it can be as efficient as
+// possible
+static void htond (double &x)  
+{
+    if ( sgIsLittleEndian() ) {
+        int    *Double_Overlay;
+        int     Holding_Buffer;
+    
+        Double_Overlay = (int *) &x;
+        Holding_Buffer = Double_Overlay [0];
+    
+        Double_Overlay [0] = htonl (Double_Overlay [1]);
+        Double_Overlay [1] = htonl (Holding_Buffer);
+    } else {
+        return;
+    }
+}
+
+// Float version
+static void htonf (float &x)   
+{
+    if ( sgIsLittleEndian() ) {
+        int    *Float_Overlay;
+        int     Holding_Buffer;
+    
+        Float_Overlay = (int *) &x;
+        Holding_Buffer = Float_Overlay [0];
+    
+        Float_Overlay [0] = htonl (Holding_Buffer);
+    } else {
+        return;
+    }
+}
+
+
+static void gps2fg( const GPSPoint p, FGNetFDM *fdm, FGNetCtrls *ctrls )
+{
+    unsigned int i;
+
+    static double last_psi;
+    static double last_alt;
+    static double phi_filter = 0.0;
+    static double theta_filter = 0.0;
+
+    // Nan-be-gone
+    if ( phi_filter != phi_filter ) {
+        phi_filter = 0.0;
+    }
+    if ( theta_filter != theta_filter ) {
+        theta_filter = 0.0;
+    }
+
+    // Version sanity checking
+    fdm->version = FG_NET_FDM_VERSION;
+
+    // Aero parameters
+    fdm->longitude = p.lon_deg * SGD_DEGREES_TO_RADIANS;
+    fdm->latitude = p.lat_deg * SGD_DEGREES_TO_RADIANS;
+    fdm->altitude = p.altitude_msl;
+    fdm->agl = -9999.0;
+    fdm->psi = p.course_true; // heading
+
+    double diff = p.course_true - last_psi;
+    if ( diff < -SGD_PI ) { diff += 2.0*SGD_PI; }
+    if ( diff > SGD_PI ) { diff -= 2.0*SGD_PI; }
+    double phi = diff * 100.0;
+    if ( phi > 0.5*SGD_PI ) { phi = 0.5*SGD_PI; }
+    if ( phi < -0.5*SGD_PI ) { phi = -0.5*SGD_PI; }
+    phi_filter = 0.99*phi_filter + 0.01*phi;
+    fdm->phi = phi_filter;
+    last_psi = p.course_true;
+    // cout << p.course_true << endl;
+
+    diff = p.altitude_msl - last_alt;
+    if ( diff < -SGD_PI ) { diff += 2.0*SGD_PI; }
+    if ( diff > SGD_PI ) { diff -= 2.0*SGD_PI; }
+    double theta = diff;
+    if ( theta > 0.5*SGD_PI ) { theta = 0.5*SGD_PI; }
+    if ( theta < -0.5*SGD_PI ) { theta = -0.5*SGD_PI; }
+    theta_filter = 0.99*theta_filter + 0.01*theta;
+    fdm->theta = theta_filter;
+    last_alt = p.altitude_msl;
+
+    fdm->phidot = 0.0;
+    fdm->thetadot = 0.0;
+    fdm->psidot = 0.0;
+    fdm->vcas = p.speed_kts;
+    fdm->climb_rate = 0; // fps
+    // cout << "climb rate = " << aero->hdota << endl;
+    fdm->v_north = 0.0;
+    fdm->v_east = 0.0;
+    fdm->v_down = 0.0;
+    fdm->v_wind_body_north = 0.0;
+    fdm->v_wind_body_east = 0.0;
+    fdm->v_wind_body_down = 0.0;
+    fdm->stall_warning = 0.0;
+
+    fdm->A_X_pilot = 0.0;
+    fdm->A_Y_pilot = 0.0;
+    fdm->A_Z_pilot = 0.0 /* (should be -G) */;
+
+    // Engine parameters
+    fdm->num_engines = 1;
+    fdm->eng_state[0] = 2;
+    // cout << "state = " << fdm->eng_state[0] << endl;
+    double rpm = ((p.speed_kts - 15.0) / 65.0) * 2000.0 + 500.0;
+    if ( rpm < 0.0 ) { rpm = 0.0; }
+    if ( rpm > 3000.0 ) { rpm = 3000.0; }
+    fdm->rpm[0] = rpm;
+
+    fdm->fuel_flow[0] = 0.0;
+    fdm->egt[0] = 0.0;
+    // cout << "egt = " << aero->EGT << endl;
+    fdm->oil_temp[0] = 0.0;
+    fdm->oil_px[0] = 0.0;
+
+    // Consumables
+    fdm->num_tanks = 2;
+    fdm->fuel_quantity[0] = 0.0;
+    fdm->fuel_quantity[1] = 0.0;
+
+    // Gear and flaps
+    fdm->num_wheels = 3;
+    fdm->wow[0] = 0;
+    fdm->wow[1] = 0;
+    fdm->wow[2] = 0;
+
+    // the following really aren't used in this context
+    fdm->cur_time = 0;
+    fdm->warp = 0;
+    fdm->visibility = 0;
+
+    // cout << "Flap deflection = " << aero->dflap << endl;
+    fdm->left_flap = 0.0;
+    fdm->right_flap = 0.0;
+
+    // Convert the net buffer to network format
+    fdm->version = htonl(fdm->version);
+
+    htond(fdm->longitude);
+    htond(fdm->latitude);
+    htond(fdm->altitude);
+    htonf(fdm->agl);
+    htonf(fdm->phi);
+    htonf(fdm->theta);
+    htonf(fdm->psi);
+    htonf(fdm->alpha);
+    htonf(fdm->beta);
+
+    htonf(fdm->phidot);
+    htonf(fdm->thetadot);
+    htonf(fdm->psidot);
+    htonf(fdm->vcas);
+    htonf(fdm->climb_rate);
+    htonf(fdm->v_north);
+    htonf(fdm->v_east);
+    htonf(fdm->v_down);
+    htonf(fdm->v_wind_body_north);
+    htonf(fdm->v_wind_body_east);
+    htonf(fdm->v_wind_body_down);
+
+    htonf(fdm->A_X_pilot);
+    htonf(fdm->A_Y_pilot);
+    htonf(fdm->A_Z_pilot);
+
+    htonf(fdm->stall_warning);
+    htonf(fdm->slip_deg);
+
+    for ( i = 0; i < fdm->num_engines; ++i ) {
+        fdm->eng_state[i] = htonl(fdm->eng_state[i]);
+        htonf(fdm->rpm[i]);
+        htonf(fdm->fuel_flow[i]);
+        htonf(fdm->egt[i]);
+        htonf(fdm->cht[i]);
+        htonf(fdm->mp_osi[i]);
+        htonf(fdm->tit[i]);
+        htonf(fdm->oil_temp[i]);
+        htonf(fdm->oil_px[i]);
+    }
+    fdm->num_engines = htonl(fdm->num_engines);
+
+    for ( i = 0; i < fdm->num_tanks; ++i ) {
+        htonf(fdm->fuel_quantity[i]);
+    }
+    fdm->num_tanks = htonl(fdm->num_tanks);
+
+    for ( i = 0; i < fdm->num_wheels; ++i ) {
+        fdm->wow[i] = htonl(fdm->wow[i]);
+        htonf(fdm->gear_pos[i]);
+        htonf(fdm->gear_steer[i]);
+        htonf(fdm->gear_compression[i]);
+    }
+    fdm->num_wheels = htonl(fdm->num_wheels);
+
+    fdm->cur_time = htonl( fdm->cur_time );
+    fdm->warp = htonl( fdm->warp );
+    htonf(fdm->visibility);
+
+    htonf(fdm->elevator);
+    htonf(fdm->elevator_trim_tab);
+    htonf(fdm->left_flap);
+    htonf(fdm->right_flap);
+    htonf(fdm->left_aileron);
+    htonf(fdm->right_aileron);
+    htonf(fdm->rudder);
+    htonf(fdm->nose_wheel);
+    htonf(fdm->speedbrake);
+    htonf(fdm->spoilers);
+}
+
+
+static void send_data( const GPSPoint p ) {
+    int len;
+    int ctrlsize = sizeof( FGNetCtrls );
+    int fdmsize = sizeof( FGNetFDM );
+
+    // cout << "Running main loop" << endl;
+
+    FGNetFDM fgfdm;
+    FGNetCtrls fgctrls;
+
+    gps2fg( p, &fgfdm, &fgctrls );
+    len = fdm_sock.send(&fgfdm, fdmsize, 0);
+}
+
+
+void usage( const string &argv0 ) {
+    cout << "Usage: " << argv0 << endl;
+    cout << "\t[ --help ]" << endl;
+    cout << "\t[ --file <file_name>" << endl;
+    cout << "\t[ --hertz <hertz> ]" << endl;
+    cout << "\t[ --host <hostname> ]" << endl;
+    cout << "\t[ --broadcast ]" << endl;
+    cout << "\t[ --fdm-port <fdm output port #> ]" << endl;
+    cout << "\t[ --ctrls-port <ctrls output port #> ]" << endl;
+}
+
+
+int main( int argc, char **argv ) {
+    double hertz = 60.0;
+    string out_host = "localhost";
+    bool do_broadcast = false;
+
+    // process command line arguments
+    for ( int i = 1; i < argc; ++i ) {
+        if ( strcmp( argv[i], "--help" ) == 0 ) {
+            usage( argv[0] );
+            exit( 0 );
+        } else if ( strcmp( argv[i], "--hertz" ) == 0 ) {
+            ++i;
+            if ( i < argc ) {
+                hertz = atof( argv[i] );
+            } else {
+                usage( argv[0] );
+                exit( -1 );
+            }
+        } else if ( strcmp( argv[i], "--file" ) == 0 ) {
+            ++i;
+            if ( i < argc ) {
+                file = argv[i];
+            } else {
+                usage( argv[0] );
+                exit( -1 );
+            }
+        } else if ( strcmp( argv[i], "--host" ) == 0 ) {
+            ++i;
+            if ( i < argc ) {
+                out_host = argv[i];
+            } else {
+                usage( argv[0] );
+                exit( -1 );
+            }
+        } else if ( strcmp( argv[i], "--broadcast" ) == 0 ) {
+         do_broadcast = true;
+        } else if ( strcmp( argv[i], "--fdm-port" ) == 0 ) {
+            ++i;
+            if ( i < argc ) {
+                fdm_port = atoi( argv[i] );
+            } else {
+                usage( argv[0] );
+                exit( -1 );
+            }
+        } else if ( strcmp( argv[i], "--ctrls-port" ) == 0 ) {
+            ++i;
+            if ( i < argc ) {
+                ctrls_port = atoi( argv[i] );
+            } else {
+                usage( argv[0] );
+                exit( -1 );
+            }
+        } else {
+            usage( argv[0] );
+            exit( -1 );
+        }
+    }
+
+    // Load the track data
+    if ( file == "" ) {
+        cout << "No track file specified" << endl;
+        exit(-1);
+    }
+    track.load( file );
+    cout << "Loaded " << track.size() << " records." << endl;
+
+    // Setup up outgoing network connections
+
+    netInit( &argc,argv ); // We must call this before any other net stuff
+
+    if ( ! fdm_sock.open( false ) ) {  // open a UDP socket
+        cout << "error opening fdm output socket" << endl;
+        return -1;
+    }
+    if ( ! ctrls_sock.open( false ) ) {  // open a UDP socket
+        cout << "error opening ctrls output socket" << endl;
+        return -1;
+    }
+    cout << "open net channels" << endl;
+
+    fdm_sock.setBlocking( false );
+    ctrls_sock.setBlocking( false );
+    cout << "blocking false" << endl;
+
+    if ( do_broadcast ) {
+        fdm_sock.setBroadcast( true );
+        ctrls_sock.setBroadcast( true );
+    }
+
+    if ( fdm_sock.connect( out_host.c_str(), fdm_port ) == -1 ) {
+        perror("connect");
+        cout << "error connecting to outgoing fdm port: " << out_host
+            << ":" << fdm_port << endl;
+        return -1;
+    }
+    cout << "connected outgoing fdm socket" << endl;
+
+    if ( ctrls_sock.connect( out_host.c_str(), ctrls_port ) == -1 ) {
+        perror("connect");
+        cout << "error connecting to outgoing ctrls port: " << out_host
+            << ":" << ctrls_port << endl;
+        return -1;
+    }
+    cout << "connected outgoing ctrls socket" << endl;
+
+    int size = track.size();
+
+    double current_time = track.get_point(0).get_time();
+    cout << "Track begin time is " << current_time << endl;
+    double end_time = track.get_point(size-1).get_time();
+    cout << "Track end time is " << end_time << endl;
+    cout << "Duration = " << end_time - current_time << endl;
+
+    double frame_us = 1000000.0 / hertz;
+    if ( frame_us < 0.0 ) {
+        frame_us = 0.0;
+    }
+
+    SGTimeStamp start_time;
+    start_time.stamp();
+    int count = 0;
+
+    GPSPoint p, p0, p1;
+    p0 = p1 = track.get_point( 0 );
+    
+    while ( current_time < end_time ) {
+        // cout << "current_time = " << current_time << " end_time = "
+        //      << end_time << endl;
+
+        if ( current_time > p1.get_time() ) {
+            p0 = p1;
+            ++count;
+            // cout << "count = " << count << endl;
+            p1 = track.get_point( count );
+        }
+        // cout << "p0 = " << p0.get_time() << " p1 = " << p1.get_time()
+        //      << endl;
+
+        double percent =
+            (current_time - p0.get_time()) /
+            (p1.get_time() - p0.get_time());
+        // cout << "Percent = " << percent << endl;
+
+        GPSPoint p = GPSInterpolate( p0, p1, percent );
+        cout << current_time << " " << p.lat_deg << ", " << p.lon_deg << endl;
+
+        send_data( p );
+
+        // Update the elapsed time.
+        static bool first_time = true;
+        if ( first_time ) {
+            last_time_stamp.stamp();
+            first_time = false;
+        }
+
+        current_time_stamp.stamp();
+        /* Convert to ms */
+        double elapsed_us = current_time_stamp - last_time_stamp;
+        if ( elapsed_us < (frame_us - 2000) ) {
+            double requested_us = (frame_us - elapsed_us) - 2000 ;
+            ulMilliSecondSleep ( (int)(requested_us / 1000.0) ) ;
+        }
+        current_time_stamp.stamp();
+        while ( current_time_stamp - last_time_stamp < frame_us ) {
+            current_time_stamp.stamp();
+        }
+
+        current_time += (frame_us / 1000000.0);
+        last_time_stamp = current_time_stamp;
+    }
+
+    cout << "Processed " << count << " entries in "
+         << current_time_stamp - start_time << " seconds." << endl;
+
+    return 0;
+}
index bb771a59dee192365ec3fe5e9e0835088e754bb9..4393a1a97bd75cc9c29c6396a555e3b56a54aafa 100644 (file)
@@ -1,4 +1,4 @@
 DIST_SUBDIRS = TerraSync Modeller js_server fgadmin
 
-SUBDIRS = TerraSync Modeller js_server
+SUBDIRS = GPSsmooth TerraSync Modeller js_server
 
index b17acf235de8698229e77a04b1d6a2b61a2ee329..d4ca0a49e1eafcb3b4c28a9d1406b5ad28269736 100644 (file)
@@ -1,4 +1,4 @@
-sbin_PROGRAMS = js_server
+noinst_PROGRAMS = js_server
 
 js_server_SOURCES = js_server.cxx
 js_server_LDADD = -lplibjs -lplibnet -lplibul $(base_LIBS) $(joystick_LIBS) $(network_LIBS)