aboutsummaryrefslogtreecommitdiff
path: root/src/org
diff options
context:
space:
mode:
Diffstat (limited to 'src/org')
-rw-r--r--src/org/traccar/BasePipelineFactory.java10
-rw-r--r--src/org/traccar/DistanceHandler.java59
-rw-r--r--src/org/traccar/OdometerHandler.java55
-rw-r--r--src/org/traccar/model/Event.java1
-rw-r--r--src/org/traccar/model/Position.java4
5 files changed, 67 insertions, 62 deletions
diff --git a/src/org/traccar/BasePipelineFactory.java b/src/org/traccar/BasePipelineFactory.java
index 6c4a6b5bd..216e48709 100644
--- a/src/org/traccar/BasePipelineFactory.java
+++ b/src/org/traccar/BasePipelineFactory.java
@@ -37,7 +37,7 @@ public abstract class BasePipelineFactory implements ChannelPipelineFactory {
private int resetDelay;
private FilterHandler filterHandler;
- private OdometerHandler odometerHandler;
+ private DistanceHandler distanceHandler;
private ReverseGeocoderHandler reverseGeocoderHandler;
protected class OpenChannelHandler extends SimpleChannelHandler {
@@ -96,6 +96,10 @@ public abstract class BasePipelineFactory implements ChannelPipelineFactory {
reverseGeocoderHandler = new ReverseGeocoderHandler(
Context.getReverseGeocoder(), Context.getConfig().getBoolean("geocode.processInvalidPositions"));
}
+
+ if (Context.getConfig().getBoolean("distance.enable")) {
+ distanceHandler = new DistanceHandler();
+ }
}
protected abstract void addSpecificHandlers(ChannelPipeline pipeline);
@@ -114,8 +118,8 @@ public abstract class BasePipelineFactory implements ChannelPipelineFactory {
if (filterHandler != null) {
pipeline.addLast("filter", filterHandler);
}
- if (odometerHandler != null) {
- pipeline.addLast("odometer", odometerHandler);
+ if (distanceHandler != null) {
+ pipeline.addLast("distance", distanceHandler);
}
if (reverseGeocoderHandler != null) {
pipeline.addLast("geocoder", reverseGeocoderHandler);
diff --git a/src/org/traccar/DistanceHandler.java b/src/org/traccar/DistanceHandler.java
new file mode 100644
index 000000000..57dddfe87
--- /dev/null
+++ b/src/org/traccar/DistanceHandler.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright 2015 Amila Silva
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.traccar;
+
+import org.traccar.helper.DistanceCalculator;
+import org.traccar.model.Event;
+import org.traccar.model.Position;
+
+import java.math.BigDecimal;
+
+public class DistanceHandler extends BaseDataHandler {
+
+ private Position getLastPosition(long deviceId) {
+ if (Context.getConnectionManager() != null) {
+ return Context.getConnectionManager().getLastPosition(deviceId);
+ }
+ return null;
+ }
+
+ public Position calculateDistance(Position position) {
+
+ double distance = 0.0;
+
+ Position last = getLastPosition(position.getDeviceId());
+ if (last != null) {
+ if (last.getOther().containsKey(Event.KEY_DISTANCE)) {
+ distance = ((Number) last.getOther().get(Event.KEY_DISTANCE)).doubleValue();
+ }
+
+ distance += DistanceCalculator.distance(
+ position.getLatitude(), position.getLongitude(),
+ last.getLatitude(), last.getLongitude());
+
+ distance = BigDecimal.valueOf(distance).setScale(2).doubleValue();
+ }
+
+ position.set(Event.KEY_DISTANCE, distance);
+ return position;
+ }
+
+ @Override
+ protected Position handlePosition(Position position) {
+ return calculateDistance(position);
+ }
+
+}
diff --git a/src/org/traccar/OdometerHandler.java b/src/org/traccar/OdometerHandler.java
deleted file mode 100644
index d5860c02e..000000000
--- a/src/org/traccar/OdometerHandler.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/**
- *
- */
-package org.traccar;
-
-import org.traccar.helper.DistanceCalculator;
-import org.traccar.helper.Log;
-import org.traccar.model.Position;
-
-/**
- * <p>
- * Odometer - total mileage calculation handler
- * </p>
- *
- * @author Amila Silva
- *
- */
-public class OdometerHandler extends BaseDataHandler {
-
- public OdometerHandler() {
- Log.debug("System based odometer calculation enabled for all devices");
- }
-
- private Position getLastPosition(long deviceId) {
- if (Context.getConnectionManager() != null) {
- return Context.getConnectionManager().getLastPosition(deviceId);
- }
- return null;
- }
-
- private Position calculateDistance(Position position) {
- Position last = getLastPosition(position.getDeviceId());
- if (last != null) {
- // set odometer only on movement
- double odometer = 0.0;
- if (last.getSpeed() == 0 && position.getSpeed() == 0) {
- odometer = last.getOdometer();
- } else {
- double distance = DistanceCalculator.distance(
- position.getLatitude(), position.getLongitude(),
- last.getLatitude(), last.getLongitude());
- distance = Math.round((distance) * 100.0) / 100.0;
- odometer = distance + last.getOdometer();
- }
- position.setOdometer(odometer);
- }
- return position;
- }
-
- @Override
- protected Position handlePosition(Position position) {
- return calculateDistance(position);
- }
-
-}
diff --git a/src/org/traccar/model/Event.java b/src/org/traccar/model/Event.java
index df9a9a8e5..831ae31b3 100644
--- a/src/org/traccar/model/Event.java
+++ b/src/org/traccar/model/Event.java
@@ -78,6 +78,7 @@ public abstract class Event {
public static final String KEY_CHARGE = "charge";
public static final String KEY_IP = "ip";
public static final String KEY_ARCHIVE = "archive";
+ public static final String KEY_DISTANCE = "distance";
// Starts with 1 not 0
public static final String PREFIX_TEMP = "temp";
diff --git a/src/org/traccar/model/Position.java b/src/org/traccar/model/Position.java
index 0c928439c..62c999d94 100644
--- a/src/org/traccar/model/Position.java
+++ b/src/org/traccar/model/Position.java
@@ -56,10 +56,6 @@ public class Position extends Event implements Factory {
private double course;
public double getCourse() { return course; }
public void setCourse(double course) { this.course = course; }
-
- private double odometer; // value in meters
- public double getOdometer() { return odometer; }
- public void setOdometer(double odometer) { this.odometer = odometer; }
private String address;
public String getAddress() { return address; }