X-Git-Url: http://www.average.org/gitweb/?p=WhereAmI.git;a=blobdiff_plain;f=src%2Forg%2Faverage%2Fwhereami%2FLastLocation.java;h=914a615217ddec08903f1f33dbc390bf5d8f8fd4;hp=230b8488fcc67b9b172384216c1aa7ec863d9d47;hb=44b9534a0dc3709450e434089b09a6039275d512;hpb=97933c816c37fb8860eb4e980cde3967ea6bb3ad diff --git a/src/org/average/whereami/LastLocation.java b/src/org/average/whereami/LastLocation.java index 230b848..914a615 100644 --- a/src/org/average/whereami/LastLocation.java +++ b/src/org/average/whereami/LastLocation.java @@ -2,7 +2,7 @@ package org.average.whereami; import org.average.whereami.CredentialStore; -//import java.lang.Long; +import java.lang.Math; import com.google.api.client.extensions.android2.AndroidHttp; import com.google.api.client.auth.oauth2.draft10.AccessTokenResponse; @@ -18,6 +18,7 @@ import com.google.api.services.latitude.model.Location; import android.content.Context; import android.content.SharedPreferences; +import android.content.res.Resources; import android.util.Log; public final class LastLocation extends Oracle { @@ -26,7 +27,17 @@ public final class LastLocation extends Oracle { private Latitude latitude; - public LastLocation(final CredentialStore store) { + private String[] loc_names; + private String[] loc_lats; + private String[] loc_lons; + private String[] loc_dists; + + public LastLocation(final Resources res, final CredentialStore store) { + loc_names = res.getStringArray(R.array.loc_names); + loc_lats = res.getStringArray(R.array.loc_lats); + loc_lons = res.getStringArray(R.array.loc_lons); + loc_lons = res.getStringArray(R.array.loc_dists); + HttpTransport transport = AndroidHttp.newCompatibleTransport(); JsonFactory jsonFactory = new JacksonFactory(); AccessTokenResponse token = store.read(); @@ -85,6 +96,34 @@ public final class LastLocation extends Oracle { private String locationMessage(Double lat, Double lon, Long tsm) { Log.v(TAG, "entering locationMessage(" + lat + "," + lon + "," + tsm + ")"); - return "Location: " + lat + "N " + lon + "E at " + tsm/1000; + String locmsg = ""; + for (int i = 0; i < loc_names.length; i++) { + Double dist = haversine(lat, lon, + Double.parseDouble(loc_lats[i]), + Double.parseDouble(loc_lons[i])); + Log.v(TAG, "Dist from " + loc_names[i] + + " is " + dist); + //if ((loc_dists[i] == "0") || + // (dist < Double.parseDouble(loc_dists[i]))) { + // locmsg = loc_names[i]; + // break; + //} + } + return locmsg; + } + + private Double toRad(Double deg) { + return deg * 3.14159265 / 180; + } + + private Double haversine(Double lat1, Double lon1, + Double lat2, Double lon2) { + Double dlat = toRad(lat2 - lat1); + Double dlon = toRad(lon2 - lon1); + Double a = Math.sin(dlat / 2) * Math.sin(dlat / 2) + + Math.sin(dlon / 2) * Math.sin(dlon / 2) * + Math.cos(toRad(lat1)) * Math.cos(toRad(lat2)); + Double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); + return 6371 * c; } }