aboutsummaryrefslogtreecommitdiff
path: root/src/org/traccar/location
diff options
context:
space:
mode:
authorAnton Tananaev <anton.tananaev@gmail.com>2015-11-18 14:01:00 +1300
committerAnton Tananaev <anton.tananaev@gmail.com>2015-11-18 14:01:00 +1300
commit6ec22b7a68b5334e215662e4cb83a20f9a1cad18 (patch)
tree7b8132f0a6d84611c1dde5c61afd16fea80f86f8 /src/org/traccar/location
parent78e325196729202e416655e87cf7d1593cda2cc7 (diff)
downloadtraccar-server-6ec22b7a68b5334e215662e4cb83a20f9a1cad18.tar.gz
traccar-server-6ec22b7a68b5334e215662e4cb83a20f9a1cad18.tar.bz2
traccar-server-6ec22b7a68b5334e215662e4cb83a20f9a1cad18.zip
Implement OpenCellID location provider
Diffstat (limited to 'src/org/traccar/location')
-rw-r--r--src/org/traccar/location/LocationProvider.java4
-rw-r--r--src/org/traccar/location/OpenCellIdLocationProvider.java44
2 files changed, 45 insertions, 3 deletions
diff --git a/src/org/traccar/location/LocationProvider.java b/src/org/traccar/location/LocationProvider.java
index cbc9663f8..2bff1a7ca 100644
--- a/src/org/traccar/location/LocationProvider.java
+++ b/src/org/traccar/location/LocationProvider.java
@@ -21,7 +21,9 @@ public interface LocationProvider {
interface LocationProviderCallback {
- void onResult(double latitude, double longitude);
+ void onSuccess(double latitude, double longitude);
+
+ void onFailure();
}
diff --git a/src/org/traccar/location/OpenCellIdLocationProvider.java b/src/org/traccar/location/OpenCellIdLocationProvider.java
index 22456c482..2339585ad 100644
--- a/src/org/traccar/location/OpenCellIdLocationProvider.java
+++ b/src/org/traccar/location/OpenCellIdLocationProvider.java
@@ -15,10 +15,50 @@
*/
package org.traccar.location;
+import com.ning.http.client.AsyncCompletionHandler;
+import com.ning.http.client.Response;
+import org.traccar.Context;
+
+import javax.json.Json;
+import javax.json.JsonObject;
+import javax.json.JsonReader;
+
public class OpenCellIdLocationProvider extends BaseLocationProvider {
- protected void getLocation(int mcc, int mnc, long lac, long cid, LocationProviderCallback callback) {
- // TODO
+ private String url;
+
+ public OpenCellIdLocationProvider(String key) {
+ this("http://opencellid.org/cell/get", key);
+ }
+
+ public OpenCellIdLocationProvider(String url, String key) {
+ this.url = url + "?format=json&mcc=%d&mnc=%d&lac=%d&cellid=%d&key=" + key;
+ }
+
+ protected void getLocation(int mcc, int mnc, long lac, long cid, final LocationProviderCallback callback) {
+ String x = String.format(url, mcc, mnc, lac, cid);
+ Context.getAsyncHttpClient().prepareGet(String.format(url, mcc, mnc, lac, cid))
+ .execute(new AsyncCompletionHandler() {
+ @Override
+ public Object onCompleted(Response response) throws Exception {
+ try (JsonReader reader = Json.createReader(response.getResponseBodyAsStream())) {
+ JsonObject json = reader.readObject();
+ if (json.containsKey("lat") && json.containsKey("lon")) {
+ callback.onSuccess(
+ json.getJsonNumber("lat").doubleValue(),
+ json.getJsonNumber("lon").doubleValue());
+ } else {
+ callback.onFailure();
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public void onThrowable(Throwable t) {
+ callback.onFailure();
+ }
+ });
}
}