aboutsummaryrefslogtreecommitdiff
path: root/src/org/traccar/OdometerHandler.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/org/traccar/OdometerHandler.java')
-rw-r--r--src/org/traccar/OdometerHandler.java52
1 files changed, 52 insertions, 0 deletions
diff --git a/src/org/traccar/OdometerHandler.java b/src/org/traccar/OdometerHandler.java
new file mode 100644
index 000000000..781dd274d
--- /dev/null
+++ b/src/org/traccar/OdometerHandler.java
@@ -0,0 +1,52 @@
+/**
+ *
+ */
+package org.traccar;
+
+import org.traccar.helper.DistanceCalculator;
+import org.traccar.helper.Log;
+import org.traccar.model.Position;
+
+/**
+ * <p>
+ * Odometer 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) {
+ double distance = DistanceCalculator.distance(
+ position.getLatitude(), position.getLongitude(),
+ last.getLatitude(), last.getLongitude());
+ distance = Math.round((distance) * 100.0) / 100.0;
+ double odoMeter = distance + last.getOdoMeter();
+// Log.debug("::: Device Course : " + position.getDeviceId()
+// + ", Distance :" + distance + "m, Odometer :" + odoMeter
+// + " m");
+ position.setOdoMeter(odoMeter);
+ }
+ return position;
+ }
+
+ @Override
+ protected Position handlePosition(Position position) {
+ return calculateDistance(position);
+ }
+
+}