Skip to content

Commit 48aea87

Browse files
committed
Fix parse whit gps status void. Add gps to parse data. Fix #6
1 parent c55dd4c commit 48aea87

File tree

3 files changed

+54
-52
lines changed

3 files changed

+54
-52
lines changed

README.md

Lines changed: 28 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,10 @@ import nmea from "node-nmea"
4242

4343
const raw = "$GPRMC,161006.425,A,7855.6020,S,13843.8900,E,154.89,84.62,110715,173.1,W,A*30"
4444
const data = nmea.parse(raw)
45-
data.isValid() // true
45+
data.valid // true
4646
data.raw // '$GPRMC,161006.425,A,7855.6020,S,13843.8900,E,154.89,84.62,110715,173.1,W,A*30'
4747
data.type // RMC
48+
data.gps // true
4849
data.datetime // Sat Jul 11 2015 13:10:06 GMT-0300 (CLT)
4950
data.loc // { type: 'Point', coordinates: [ 138.73149999999998, -78.9267 ] }
5051
data.speed // 286.85627999999997
@@ -59,19 +60,19 @@ data.mode // 'Autonomous'
5960
import nmea from "node-nmea"
6061

6162
const raw = nmea.randomData()
62-
const data = nmea.parse(raw)
63-
data.isValid() // true
64-
data.raw // '$GPRMC,161006.425,A,7855.6020,S,13843.8900,E,154.89,84.62,110715,173.1,W,A*30'
65-
data.time // '161006.425'
66-
data.gpsStatus // 'A'
67-
data.latitude // '7855.6020,S'
68-
data.longitude // '13843.8900,E'
69-
data.speed // '154.89'
70-
data.track // '84.62'
71-
data.date // '110715'
72-
data.magneticVariation // '173.1,W'
73-
data.faa // 'A'
74-
data.checkSum // '30'
63+
raw.raw // '$GPRMC,161006.425,A,7855.6020,S,13843.8900,E,154.89,84.62,110715,173.1,W,A*30'
64+
raw.time // '161006.425'
65+
raw.gpsStatus // 'A'
66+
raw.latitude // '7855.6020,S'
67+
raw.longitude // '13843.8900,E'
68+
raw.speed // '154.89'
69+
raw.track // '84.62'
70+
raw.date // '110715'
71+
raw.magneticVariation // '173.1,W'
72+
raw.faa // 'A'
73+
raw.checkSum // '30'
74+
const data = nmea.parse(raw.raw)
75+
data.valid // true
7576
```
7677

7778
## Random data with options
@@ -98,17 +99,17 @@ const opts = {
9899
longitude: -70.52955843508244
99100
}
100101
const raw = nmea.randomData(opts)
101-
const data = nmea.parse(raw)
102-
data.isValid() // true
103-
data.raw // '$GPRMC,171200.000,A,3321.1740,S,7031.7735,S,120.50,38.34,150715,0.8,E,A*0C'
104-
data.time // '171200.000'
105-
data.gpsStatus // 'A'
106-
data.latitude // '3321.1740,S'
107-
data.longitude // '7031.7735,S'
108-
data.speed // '120.50'
109-
data.track // '38.34'
110-
data.date // '150715'
111-
data.magneticVariation // '0.8,E'
112-
data.faa // 'A'
113-
data.checkSum // '0C'
102+
raw.raw // '$GPRMC,171200.000,A,3321.1740,S,7031.7735,S,120.50,38.34,150715,0.8,E,A*0C'
103+
raw.time // '171200.000'
104+
raw.gpsStatus // 'A'
105+
raw.latitude // '3321.1740,S'
106+
raw.longitude // '7031.7735,S'
107+
raw.speed // '120.50'
108+
raw.track // '38.34'
109+
raw.date // '150715'
110+
raw.magneticVariation // '0.8,E'
111+
raw.faa // 'A'
112+
raw.checkSum // '0C'
113+
const data = nmea.parse(raw.raw)
114+
data.valid // true
114115
```

package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "node-nmea",
3-
"version": "0.2.4",
3+
"version": "0.3.0",
44
"description": "Parser for NMEA sentences.",
55
"main": "lib",
66
"scripts": {
@@ -27,10 +27,10 @@
2727
},
2828
"homepage": "https://github.com/lgaticaq/node-nmea#readme",
2929
"devDependencies": {
30-
"babel": "^5.8.21",
30+
"babel": "^5.8.23",
3131
"eslint": "^1.2.1",
3232
"mocha": "^2.2.5",
33-
"rimraf": "^2.4.2"
33+
"rimraf": "^2.4.3"
3434
},
3535
"dependencies": {
3636
"chance": "^0.7.6",

src/index.js

Lines changed: 23 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,8 @@ const params = {
4343
gpsStatus: /[AV]/,
4444
latitude: /\d{4}[.]\d{4}\,[NS]/,
4545
longitude: /\d{5}[.]\d{4}\,[WE]/,
46-
speed: /\d{1,3}[.]\d{1,3}/,
47-
track: /\d{1,3}[.]\d{1,3}/,
46+
speed: /(\d{1,3}[.]\d{1,3})?/,
47+
track: /(\d{1,3}[.]\d{1,3})?/,
4848
date: /\d{6}/,
4949
magneticVariation: /(\d{1,3}[.]\d{1,3})?\,([WE])?/,
5050
faa: /([ADENS])?/,
@@ -76,7 +76,7 @@ const gprmc = XRegExp.build(`(?x)^
7676
*/
7777
function isValid(data) {
7878
const r = XRegExp.exec(data, gprmc)
79-
return gprmc.test(data) && verifyChecksum(data) && r.gpsStatus === "A"
79+
return gprmc.test(data) && verifyChecksum(data)
8080
}
8181

8282
/**
@@ -140,7 +140,7 @@ function degToDec(data) {
140140
* @return {number} km/h
141141
*/
142142
function knotsToKmh(knots) {
143-
let kmh = 0.0
143+
let kmh = null
144144
if (knots) {
145145
kmh = parseFloat(knots) * 1.852
146146
}
@@ -182,29 +182,30 @@ const faaModes = {
182182
* @return {object} data parse
183183
*/
184184
function parse(raw) {
185+
let data = {raw: raw, valid: false}
186+
const r = XRegExp.exec(raw, gprmc)
185187
if (isValid(raw)) {
186-
const r = XRegExp.exec(raw, gprmc)
187188
const datetime = `${r.date} ${r.time} +00:00`
189+
const track = r.track === "" ? null : r.track
188190
const mv = r.magneticVariation === "," ? null : r.magneticVariation
189-
return {
190-
raw: raw,
191-
type: r.type,
192-
datetime: moment(datetime, "DDMMYY HHmmss.SSS ZZ").toDate(),
193-
loc: {
194-
type: "Point",
195-
coordinates: [
196-
degToDec(r.longitude),
197-
degToDec(r.latitude)
198-
]
199-
},
200-
speed: knotsToKmh(r.speed),
201-
track: r.track,
202-
magneticVariation: mv,
203-
mode: r.faa ? faaModes[r.faa] : null
191+
data.raw = raw
192+
data.type = r.type
193+
data.datetime = moment(datetime, "DDMMYY HHmmss.SSS ZZ").toDate()
194+
data.loc = {
195+
type: "Point",
196+
coordinates: [
197+
degToDec(r.longitude),
198+
degToDec(r.latitude)
199+
]
204200
}
205-
} else {
206-
return null
201+
data.gps = r.gpsStatus === "A"
202+
data.speed = knotsToKmh(r.speed)
203+
data.track = track
204+
data.magneticVariation = mv
205+
data.mode = r.faa ? faaModes[r.faa] : null,
206+
data.valid = true
207207
}
208+
return data
208209
}
209210

210211
/**

0 commit comments

Comments
 (0)