diff options
Diffstat (limited to 'src/org/traccar/WebDataHandler.java')
-rw-r--r-- | src/org/traccar/WebDataHandler.java | 57 |
1 files changed, 52 insertions, 5 deletions
diff --git a/src/org/traccar/WebDataHandler.java b/src/org/traccar/WebDataHandler.java index c64ca8334..332fc5222 100644 --- a/src/org/traccar/WebDataHandler.java +++ b/src/org/traccar/WebDataHandler.java @@ -15,14 +15,18 @@ */ package org.traccar; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; import java.util.Calendar; import java.util.Formatter; import java.util.Locale; import java.util.TimeZone; import org.traccar.helper.Checksum; +import org.traccar.helper.Log; import org.traccar.model.Device; import org.traccar.model.Event; +import org.traccar.model.MiscFormatter; import org.traccar.model.Position; public class WebDataHandler extends BaseDataHandler { @@ -46,8 +50,24 @@ public class WebDataHandler extends BaseDataHandler { double lat = position.getLatitude(); double lon = position.getLongitude(); - f.format("%02d%07.4f,%c,", (int) Math.abs(lat), Math.abs(lat) % 1 * 60, lat < 0 ? 'S' : 'N'); - f.format("%03d%07.4f,%c,", (int) Math.abs(lon), Math.abs(lon) % 1 * 60, lon < 0 ? 'W' : 'E'); + + char hemisphere; + + if (lat < 0) { + hemisphere = 'S'; + } else { + hemisphere = 'N'; + } + + f.format("%02d%07.4f,%c,", (int) Math.abs(lat), Math.abs(lat) % 1 * 60, hemisphere); + + if (lon < 0) { + hemisphere = 'W'; + } else { + hemisphere = 'E'; + } + + f.format("%03d%07.4f,%c,", (int) Math.abs(lon), Math.abs(lon) % 1 * 60, hemisphere); f.format("%.2f,%.2f,", position.getSpeed(), position.getCourse()); f.format("%1$td%1$tm%1$ty,,", calendar); @@ -73,15 +93,42 @@ public class WebDataHandler extends BaseDataHandler { Device device = Context.getIdentityManager().getDeviceById(position.getDeviceId()); + String attributes = MiscFormatter.toJsonString(position.getAttributes()); + String request = url .replace("{uniqueId}", device.getUniqueId()) - .replace("{deviceId}", String.valueOf(device.getId())) + .replace("{deviceId}", String.valueOf(position.getDeviceId())) + .replace("{protocol}", String.valueOf(position.getProtocol())) + .replace("{deviceTime}", String.valueOf(position.getDeviceTime().getTime())) .replace("{fixTime}", String.valueOf(position.getFixTime().getTime())) - .replace("{latitude}", String.valueOf(position.getLatitude())) + .replace("{valid}", String.valueOf(position.getLatitude())) + .replace("{latitude}", String.valueOf(position.getValid())) .replace("{longitude}", String.valueOf(position.getLongitude())) - .replace("{gprmc}", formatSentence(position)) + .replace("{altitude}", String.valueOf(position.getAltitude())) + .replace("{speed}", String.valueOf(position.getSpeed())) + .replace("{course}", String.valueOf(position.getCourse())) .replace("{statusCode}", calculateStatus(position)); + if (position.getAddress() != null) { + try { + request = request.replace("{address}", URLEncoder.encode(position.getAddress(), "UTF-8")); + } catch (UnsupportedEncodingException error) { + Log.warning(error); + } + } + + if (request.contains("{attributes}")) { + try { + request = request.replace("{attributes}", URLEncoder.encode(attributes, "UTF-8")); + } catch (UnsupportedEncodingException error) { + Log.warning(error); + } + } + + if (request.contains("{gprmc}")) { + request = request.replace("{gprmc}", formatSentence(position)); + } + Context.getAsyncHttpClient().prepareGet(request).execute(); return position; |