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.java51
1 files changed, 51 insertions, 0 deletions
diff --git a/src/org/traccar/ODOMeterHandler.java b/src/org/traccar/ODOMeterHandler.java
new file mode 100644
index 000000000..1dc3aed44
--- /dev/null
+++ b/src/org/traccar/ODOMeterHandler.java
@@ -0,0 +1,51 @@
+/**
+ *
+ */
+package org.traccar;
+
+import org.traccar.helper.DistanceCalculator;
+import org.traccar.helper.Log;
+import org.traccar.model.Position;
+
+/**
+ * <p>
+ * ODO Meter handler
+ * </p>
+ *
+ * @author Amila Silva
+ *
+ */
+public class ODOMeterHandler extends BaseDataHandler {
+
+ public ODOMeterHandler() {
+ Log.debug("System based ODO meter 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.info("::: Device Course : " + position.getDeviceId()
+ + ", Distance :" + distance + "m, ODO Meter :" + odoMeter + " m");
+ position.setOdoMeter(odoMeter);
+ }
+ return position;
+ }
+
+ @Override
+ protected Position handlePosition(Position position) {
+ return calculateDistance(position);
+ }
+
+}