X-Git-Url: http://www.average.org/gitweb/?p=WhereAmI.git;a=blobdiff_plain;f=src%2Forg%2Faverage%2Fwhereami%2FLastLocation.java;h=b710e169f59bff77562076496d5dcdea5d0a3d20;hp=bd25283111bb1c2e48bfd70401229045d45b0f25;hb=b6c7f6d70cd87f9d3b8b7f6eaff05ea2d9efe816;hpb=837341943b2fbab457ed01de1ed59620a3ea84c1 diff --git a/src/org/average/whereami/LastLocation.java b/src/org/average/whereami/LastLocation.java index bd25283..b710e16 100644 --- a/src/org/average/whereami/LastLocation.java +++ b/src/org/average/whereami/LastLocation.java @@ -1,14 +1,13 @@ package org.average.whereami; import org.average.whereami.CredentialStore; -//import org.average.whereami.WhereAmIAccessResource; -import java.text.DateFormat; -import java.text.SimpleDateFormat; -import java.util.Date; +import java.lang.Math; +import com.google.api.client.extensions.android2.AndroidHttp; import com.google.api.client.auth.oauth2.draft10.AccessTokenResponse; import com.google.api.client.googleapis.auth.oauth2.draft10.GoogleAccessProtectedResource; +import com.google.api.client.http.HttpResponseException; import com.google.api.client.http.HttpTransport; import com.google.api.client.http.javanet.NetHttpTransport; import com.google.api.client.json.JsonFactory; @@ -19,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 { @@ -27,8 +27,18 @@ public final class LastLocation extends Oracle { private Latitude latitude; - public LastLocation(final CredentialStore store) { - HttpTransport transport = new NetHttpTransport(); + 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_dists = res.getStringArray(R.array.loc_dists); + + HttpTransport transport = AndroidHttp.newCompatibleTransport(); JsonFactory jsonFactory = new JacksonFactory(); AccessTokenResponse token = store.read(); Log.v(TAG, "tokens - access: \"" + token.accessToken + @@ -68,8 +78,14 @@ public final class LastLocation extends Oracle { Latitude.CurrentLocation.Get request = latitude.currentLocation().get(); request.setGranularity("best"); - Location currentLocation = request.execute(); - return locationMessage(currentLocation); + Location cloc = request.execute(); + Double lat = Double.parseDouble( + cloc.getLatitude().toString()); + Double lon = Double.parseDouble( + cloc.getLongitude().toString()); + Long tsm = Long.parseLong( + cloc.getTimestampMs().toString()); + return locationMessage(lat, lon, tsm); } catch (Exception ex) { Log.v(TAG, "exception in getResult: " + ex); ex.printStackTrace(); @@ -77,12 +93,37 @@ public final class LastLocation extends Oracle { } } - private String locationMessage(Location currentLocation) { - Log.v(TAG, "entering locationMessage: " + - currentLocation); - // lat = currentLocation.getLatitude(); - // lon = currentLocation.getLongitude(); - // tsm = currentLocation.getTimestampMs(); - return "Current location: " + currentLocation; + private String locationMessage(Double lat, Double lon, Long tsm) { + Log.v(TAG, "entering locationMessage(" + lat + + "," + lon + "," + tsm + ")"); + 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; } }