aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Tananaev <anton.tananaev@gmail.com>2016-11-12 09:47:43 +1300
committerAnton Tananaev <anton.tananaev@gmail.com>2016-11-12 09:47:57 +1300
commitbafda68f2b84c77553e663f116305ab6ed807254 (patch)
tree8e9e5888e8aac561cf8ff059480ac6ac6cb5b215
parent1d5da9a3686a8bad2f7c661864917e7403ad4b73 (diff)
downloadtrackermap-server-bafda68f2b84c77553e663f116305ab6ed807254.tar.gz
trackermap-server-bafda68f2b84c77553e663f116305ab6ed807254.tar.bz2
trackermap-server-bafda68f2b84c77553e663f116305ab6ed807254.zip
New format for V680 protocol
-rw-r--r--src/org/traccar/protocol/V680ProtocolDecoder.java28
-rw-r--r--test/org/traccar/protocol/V680ProtocolDecoderTest.java7
2 files changed, 27 insertions, 8 deletions
diff --git a/src/org/traccar/protocol/V680ProtocolDecoder.java b/src/org/traccar/protocol/V680ProtocolDecoder.java
index 181983f04..ca9c451c2 100644
--- a/src/org/traccar/protocol/V680ProtocolDecoder.java
+++ b/src/org/traccar/protocol/V680ProtocolDecoder.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2012 - 2013 Anton Tananaev (anton@traccar.org)
+ * Copyright 2012 - 2016 Anton Tananaev (anton@traccar.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -43,10 +43,8 @@ public class V680ProtocolDecoder extends BaseProtocolDecoder {
.number("(d+)#") // packet number
.expression("([^#]+)?#?") // gsm base station
.expression("(?:[^#]+#)?")
- .number("(d+)?(dd.d+),") // longitude
- .expression("([EW]),")
- .number("(d+)?(dd.d+),") // latitude
- .expression("([NS]),")
+ .number("(d+.d+),([EW]),") // longitude
+ .number("(d+.d+),([NS]),") // latitude
.number("(d+.d+),") // speed
.number("(d+.?d*)?#") // course
.number("(dd)(dd)(dd)#") // date
@@ -93,8 +91,24 @@ public class V680ProtocolDecoder extends BaseProtocolDecoder {
position.set("packet", parser.next());
position.set(Position.KEY_GSM, parser.next());
- position.setLongitude(parser.nextCoordinate());
- position.setLatitude(parser.nextCoordinate());
+ double lon = parser.nextDouble();
+ boolean west = parser.next().equals("W");
+ double lat = parser.nextDouble();
+ boolean south = parser.next().equals("S");
+
+ if (lat > 90 || lon > 180) {
+ int lonDegrees = (int) (lon * 0.01);
+ lon = (lon - lonDegrees * 100) / 60.0;
+ lon += lonDegrees;
+
+ int latDegrees = (int) (lat * 0.01);
+ lat = (lat - latDegrees * 100) / 60.0;
+ lat += latDegrees;
+ }
+
+ position.setLongitude(west ? -lon : lon);
+ position.setLatitude(south ? -lat : lat);
+
position.setSpeed(parser.nextDouble());
position.setCourse(parser.nextDouble());
diff --git a/test/org/traccar/protocol/V680ProtocolDecoderTest.java b/test/org/traccar/protocol/V680ProtocolDecoderTest.java
index 2e36010c7..f68497304 100644
--- a/test/org/traccar/protocol/V680ProtocolDecoderTest.java
+++ b/test/org/traccar/protocol/V680ProtocolDecoderTest.java
@@ -11,6 +11,10 @@ public class V680ProtocolDecoderTest extends ProtocolTest {
V680ProtocolDecoder decoder = new V680ProtocolDecoder(new V680Protocol());
verifyPosition(decoder, text(
+ "#867967020910610#01234567890#1#0000#AUT#1#0500000000120000#114.036291,E,22.665795,N,111.00,000.00#111116#193333##"),
+ position("2016-11-11 19:33:33.000", true, 22.66579, 114.03629));
+
+ verifyPosition(decoder, text(
"#355488020168617##1#0000#AUT#01#260001a412966f#1834.790700,E,5302.748800,N,0.00,0.00#310316#174538.000##"));
verifyPosition(decoder, text(
@@ -23,7 +27,8 @@ public class V680ProtocolDecoderTest extends ProtocolTest {
"#135790246811222#13486119277#1#0000#SOS#1#27bc10af#11407.4182,E,2232.7632,N,0.00,79.50#070709#134147.000##"));
verifyPosition(decoder, text(
- "#356823031193431##0#0000#SF#1#72403#V#04702.3025,W,2252.18380,S,008.18,0#090413#134938"));
+ "#356823031193431##0#0000#SF#1#72403#V#04702.3025,W,2252.18380,S,008.18,0#090413#134938"),
+ position("2013-04-09 13:49:38.000", false, -22.86973, -47.038375));
verifyPosition(decoder, text(
"#356823033219838#1000#0#1478#AUT#1#66830FFB#03855.6628,E,4716.6821,N,001.41,259#130812#143905"));