I did some preparatory work to find the exact latitude / longitude coordinates (in decimal notation) for all locations in 6 Hooters restaurants in Wisconsin. I intend to store these coordinate values ββin an array of a separate class. I also have a location receiver in my code to get the current GPS location. See my code below:
package sam.finalmap.hooters; // Camera is the view of the map. import com.google.android.gms.maps.CameraUpdateFactory; // the google map import com.google.android.gms.maps.GoogleMap; import android.app.Activity; import android.content.Context; import android.graphics.Color; // for drawing a line. import android.location.Location; // for detecting location changes with the GPS. import android.location.LocationListener; // to listen for location changes import android.location.LocationManager; import android.os.Bundle; import android.util.Log; import android.widget.TextView; import android.widget.Toast; import com.google.android.gms.maps.MapFragment; // the Map class. import com.google.android.gms.maps.model.LatLng; // for creating lattitudes and longitutes in memory. import com.google.android.gms.maps.model.Polyline; // used to draw from one location to the other import com.google.android.gms.maps.model.PolylineOptions; /** * Draws a map, uses GPS to get the current location, the draws a line from Eau CLaire (see constants) * to the new position, which will be the closest Hooters restaurant to the user current location. * This is the AdapterView. * * @author daviddalsveen * */ public class GMapsLocationPath extends Activity implements LocationListener { /** Called when the activity is first created. */ private GoogleMap mMap; // constants to hard code all 6 of Wisconsin Hooters restaurant points on the map: private static final float Appleton_LAT = 44.2655012f; private static final float Appleton_LNG = -88.4768057f; private static final float Brookfield_LAT = 43.03645f; private static final float Brookfield_LNG = -88.124937f; private static final float EastMadison_LAT = 43.132432f; private static final float EastMadison_LNG = -89.3016256f; private static final float GreenBay_LAT = 44.477903f; private static final float GreenBay_LNG = -88.067014f; private static final float Janesville_LAT = 42.7215666f; private static final float Janesville_LNG = -88.9889661f; private static final float LaCrosse_LAT = 43.8109318f; private static final float LaCrosse_LNG = -91.2536215f; private LocationManager locationManager; private TextView tv; // a Textview for displaying lattitude and longitude. private float curLat = 44.88f; // current position -- assigned constants for // testing... private float curLng = -91.47f; @Override public void onCreate(Bundle savedInstanceState) { // called when the activity is first started. super.onCreate(savedInstanceState); setContentView(R.layout.main); // recommended method by google to make the map object. setUpMapIfNeeded(); // Sets the map type to be "normal" mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL); tv = (TextView) findViewById(R.id.label1); locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 500, 1, this); Location location = locationManager .getLastKnownLocation(LocationManager.GPS_PROVIDER); // 500 is the minimum time interval to update, in milliseconds // 1 is the distance in meters in which to sense an update. // 'this' is the pending intent. // center latitude and longitude for EC float lat = Appleton_LAT; float lng = Appleton_LNG; // debug example... Toast.makeText(this, "" + (int) (lat * 1E6), Toast.LENGTH_LONG).show(); if (location == null) { // no last known location locationManager.requestSingleUpdate(LocationManager.GPS_PROVIDER, this, null); // Create a new Lattitude Longitude Object, passing it the // coordinates. LatLng latLng = new LatLng(lat, lng); mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, 10.0f)); // re-draw } else { // explicitly call and update view with last known location or the // one set above. onLocationChanged(location); } } /** * Checks to see that the map exists, if not, creates one. */ private void setUpMapIfNeeded() { // Do a null check to confirm that we have not already instantiated the // map. if (mMap == null) { mMap = ((MapFragment) getFragmentManager().findFragmentById( R.id.map)).getMap(); // Check if we were successful in obtaining the map. if (mMap != null) { // The Map is verified. It is now safe to manipulate the map. }// else? } } // Java Interface RULE NOTE: that we must implement every method of // interface LocationListener, // whether we use the method or not. /** * Use the GPS to get the current location of the user * */ public void onLocationChanged(final Location loc) { String lat = String.valueOf(loc.getLatitude()); String lon = String.valueOf(loc.getLongitude()); Log.e("GPS", "location changed: lat=" + lat + ", lon=" + lon); tv.setText("lat=" + lat + ", lon=" + lon); curLat = Float.parseFloat(lat); // update the current lattitude and longitude. curLng = Float.parseFloat(lon); // Create a new Lattitude Longitude Object, passing it the coordinates. LatLng latLng = new LatLng(curLat, curLng); mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, 10.0f)); // re-draw draw(); } public void onProviderDisabled(String loc) { Log.e("GPS", "provider disabled " + loc); } public void onProviderEnabled(String loc) { Log.e("GPS", "provider enabled " + loc); } /** * loc: name of location provider status: status of location provider * (temporarily unavailable, etc) extras: optional bundle with additional * status information */ public void onStatusChanged(String loc, int status, Bundle extras) { Log.e("GPS", "status changed to " + loc + " [" + status + "]"); } /** * Draw a line from */ public void draw() { float lat = 44.88f; float lng = -91.48f; // Instantiates a new Polyline object and adds points to define a // endpoints of a line PolylineOptions rectOptions = new PolylineOptions().add( new LatLng(curLat, curLng)) .add(new LatLng(lat, lng)); // Closes the polyline. // Set the rectangle color to red rectOptions.color(Color.RED); // Get back the mutable Polyline Polyline polyline = mMap.addPolyline(rectOptions); } }
What I want to get here is to find a way to sort out the array and compare the difference in the user's location with each of the 6 places in the restaurants and depending on what the smallest difference is (depending on which restaurant location is closest to the user) this restaurant which will be selected and what information will be displayed.
However, how can I say that it uses the smallest difference after it finishes parsing the array and gets all 6 latitude / longitude differences?