aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAbyss777 <abyss@fox5.ru>2016-08-24 09:54:21 +0500
committerAbyss777 <abyss@fox5.ru>2016-08-24 09:54:21 +0500
commit5e8dbc78110ab5e28d1d57277a38dd1991dba0e6 (patch)
tree0491a9542e632741ce070aae1aa87a4decfeda88 /src
parentea0bdea88003f46fd6f6164d5c45e33d53f47c81 (diff)
downloadtraccar-server-5e8dbc78110ab5e28d1d57277a38dd1991dba0e6.tar.gz
traccar-server-5e8dbc78110ab5e28d1d57277a38dd1991dba0e6.tar.bz2
traccar-server-5e8dbc78110ab5e28d1d57277a38dd1991dba0e6.zip
- Fixed optional odometer for wondex protocol
- Do not use zero odometer values to calculateDistance
Diffstat (limited to 'src')
-rw-r--r--src/org/traccar/protocol/WondexProtocolDecoder.java4
-rw-r--r--src/org/traccar/reports/ReportUtils.java14
2 files changed, 13 insertions, 5 deletions
diff --git a/src/org/traccar/protocol/WondexProtocolDecoder.java b/src/org/traccar/protocol/WondexProtocolDecoder.java
index 97426d78c..0fcb99578 100644
--- a/src/org/traccar/protocol/WondexProtocolDecoder.java
+++ b/src/org/traccar/protocol/WondexProtocolDecoder.java
@@ -115,7 +115,9 @@ public class WondexProtocolDecoder extends BaseProtocolDecoder {
position.set(Position.KEY_EVENT, parser.next());
position.set(Position.KEY_BATTERY, parser.next());
- position.set(Position.KEY_ODOMETER, parser.nextDouble() * 1000);
+ if (parser.hasNext()) {
+ position.set(Position.KEY_ODOMETER, parser.nextDouble() * 1000);
+ }
position.set(Position.KEY_INPUT, parser.next());
position.set(Position.PREFIX_ADC + 1, parser.next());
position.set(Position.PREFIX_ADC + 2, parser.next());
diff --git a/src/org/traccar/reports/ReportUtils.java b/src/org/traccar/reports/ReportUtils.java
index 67d577904..924dff4c1 100644
--- a/src/org/traccar/reports/ReportUtils.java
+++ b/src/org/traccar/reports/ReportUtils.java
@@ -45,10 +45,16 @@ public final class ReportUtils {
public static double calculateDistance(Position firstPosition, Position lastPosition, boolean useOdometer) {
double distance = 0.0;
- if (useOdometer && firstPosition.getAttributes().containsKey(Position.KEY_ODOMETER)
- && lastPosition.getAttributes().containsKey(Position.KEY_ODOMETER)) {
- distance = (((Number) lastPosition.getAttributes().get(Position.KEY_ODOMETER)).doubleValue()
- - ((Number) firstPosition.getAttributes().get(Position.KEY_ODOMETER)).doubleValue());
+ double firstOdometer = 0.0;
+ double lastOdometer = 0.0;
+ if (firstPosition.getAttributes().containsKey(Position.KEY_ODOMETER)) {
+ firstOdometer = ((Number) firstPosition.getAttributes().get(Position.KEY_ODOMETER)).doubleValue();
+ }
+ if (lastPosition.getAttributes().containsKey(Position.KEY_ODOMETER)) {
+ lastOdometer = ((Number) lastPosition.getAttributes().get(Position.KEY_ODOMETER)).doubleValue();
+ }
+ if (useOdometer && (firstOdometer != 0.0 || lastOdometer != 0.0)) {
+ distance = lastOdometer - firstOdometer;
} else if (firstPosition.getAttributes().containsKey(Position.KEY_TOTAL_DISTANCE)
&& lastPosition.getAttributes().containsKey(Position.KEY_TOTAL_DISTANCE)) {
distance = ((Number) lastPosition.getAttributes().get(Position.KEY_TOTAL_DISTANCE)).doubleValue()