forked from adrianmo/go-nmea
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathgga.go
76 lines (72 loc) · 2.01 KB
/
gga.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
package nmea
const (
// TypeGGA type for GGA sentences
TypeGGA = "GGA"
// Invalid fix quality.
Invalid = "0"
// GPS fix quality
GPS = "1"
// DGPS fix quality
DGPS = "2"
// PPS fix
PPS = "3"
// RTK real time kinematic fix
RTK = "4"
// FRTK float RTK fix
FRTK = "5"
)
// GGA is the Time, position, and fix related data of the receiver.
type GGA struct {
BaseSentence
Time Time // Time of fix.
Latitude float64 // Latitude.
Longitude float64 // Longitude.
FixQuality string // Quality of fix.
NumSatellites int64 // Number of satellites in use.
HDOP float64 // Horizontal dilution of precision.
Altitude float64 // Altitude.
Separation float64 // Geoidal separation
DGPSAge string // Age of differential GPD data.
DGPSId string // DGPS reference station ID.
}
func (s GGA) ToMap() (map[string]interface{}, error) {
m := map[string]interface{}{
"time": s.Time.String(),
"time_valid": s.Time.Valid,
"latitude": s.Latitude,
"longitude": s.Longitude,
"fix_quality": s.FixQuality,
"num_satellites": s.NumSatellites,
"hdop": s.HDOP,
"altitude": s.Altitude,
"separation": s.Separation,
"dgps_age": s.DGPSAge,
"dgps_id": s.DGPSAge,
}
bm, err := s.BaseSentence.toMap()
if err != nil {
return m, err
}
for k, v := range bm {
m[k] = v
}
return m, nil
}
// newGGA constructor
func newGGA(s BaseSentence) (GGA, error) {
p := NewParser(s)
p.AssertType(TypeGGA)
return GGA{
BaseSentence: s,
Time: p.Time(0, "time"),
Latitude: p.LatLong(1, 2, "latitude"),
Longitude: p.LatLong(3, 4, "longitude"),
FixQuality: p.EnumString(5, "fix quality", Invalid, GPS, DGPS, PPS, RTK, FRTK),
NumSatellites: p.Int64(6, "number of satellites"),
HDOP: p.Float64(7, "hdop"),
Altitude: p.Float64(8, "altitude"),
Separation: p.Float64(10, "separation"),
DGPSAge: p.String(12, "dgps age"),
DGPSId: p.String(13, "dgps id"),
}, p.Err()
}