开发者

{Android App} How can I display distance from my current location and specified point?

i have researched this for hours and the only answers i see point me to http://developer.android.com/reference/android/location/Location.html

and to use the Method

public static void distanceBetween (double startLatitude, double startLongitude, double endLatitude, double endLongitude, float[] results)

i need help understanding how this works in relation to my app. this is how i am retrieving my location.

    LocationManager locationManager;
    String context = Context.LOCATION_SERVICE;
    locationManager = (LocationManager)getSystemService(context);

    String provider = LocationManager.GPS_PROVIDER;
    Location location = locationManager.getLastKnownLocation(provider);

    updateWithNewLocation(location);
  }

  private void updateWithNewLocation(Location location) {
    String latLongString;
    TextView myLocationText; 
    myLocationText = (TextView)findViewById(R.id.myLocationText);
    if (location != null) {
      double lat = location.getLatitude(开发者_如何学Go);
      double lng = location.getLongitude();
      latLongString = "Lat:" + lat + "\nLong:" + lng;
    } else {
      latLongString = "No location found"; 
    }
    myLocationText.setText("Your Current Position is:\n" + 
                           latLongString);
  }

Can someone please help me out a little in understanding how to import my current location into this equation and then having the distance shown in my app? thank you


public double calcdist()
            {
                int MILLION = 1000000;
                int EARTH_RADIUS_KM = 6371;

                double lat1 = la1 / MILLION;// latitude of location 1
            double lon1 = lo1 / MILLION; //longitude of location 1
            double lat2 = la2 / MILLION; //latitude of location 2
            double lon2 = lo2 / MILLION;//longitude of location 2

            double lat1Rad = Math.toRadians(lat1);
            double lat2Rad = Math.toRadians(lat2);
            double deltaLonRad = Math.toRadians(lon2 - lon1);

            double dist = Math.acos(Math.sin(lat1Rad) * Math.sin(lat2Rad) + Math.cos(lat1Rad) * Math.cos(lat2Rad)
                    * Math.cos(deltaLonRad))
                    * EARTH_RADIUS_KM;
            return dist;

 }

You can use this code if you already got latitude and longitude of both the locations.


Create a location listener

Method isAccurateForUse is a custom method that simply checks accuracy of a location.

This should work:

public boolean locChanged = false;
public LocationManager locMgr = null;
public Location referenceL = null; // Your reference location
public Location currentKL = null; // Current known location
public Location currentLKL = null; // Current last known location

//Initialise the GPS listener
locMgr = (LocationManager) appCtx.getSystemService(Context.LOCATION_SERVICE);
locMgr.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, fixGpsListener);
currentLKL = locMgr.getLastKnownLocation(LocationManager.GPS_PROVIDER);

//Define the GPS listener
LocationListener fixGpsListener = new LocationListener()
{
    public void onLocationChanged(Location location)
    {
        locChanged = true;
        if (currentKL == null)
            currentKL = location;
        else if (isAccurateForUse())
        {
            currentLKL = currentKL;
            currentKL = location;
            updateDistance(meterToKilometer(currentKL.distanceTo(referenceL)));
        }
    }

    public void onProviderDisabled(String provider)
    {}

    public void onProviderEnabled(String provider)
    {}

    public void onStatusChanged(String provider, int status, Bundle extras)
    {}
};

currentKL.distanceTo(referenceL) >> gives the distance in meters

meterToKilometer >> converts meters to kilo-meters

updateDistance >> this method takes a string and updates a text-view that shows distance.

Cheers

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜