0

I want to use this to calculate the distance between my current location and a marker

private double distance(double lat1, double lon1, double lat2, double lon2) {
  double theta = lon1 - lon2;
  double dist = Math.sin(deg2rad(lat1)) * Math.sin(deg2rad(lat2)) +   Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) * Math.cos(deg2rad(theta));
  dist = Math.acos(dist);
  dist = rad2deg(dist);
  dist = dist * 60 * 1.1515;
   return (dist);
}

  private double deg2rad(double deg) {
  return (deg * Math.PI / 180.0);
}
private double rad2deg(double rad) {
  return (rad * 180.0 / Math.PI);
}

Would I be able to update this regularly by putting it in the onLocationChanged method? I'm aware that proximity would be a more elegant solution, but I'm having problems with it, and I'm running on a tight schedule.

Jordan Moffat
  • 337
  • 6
  • 17

2 Answers2

0

Take a look at Calculate distance, bearing and more between Latitude/Longitude points.

private double distance(double lat1, double lon1, double lat2, double lon2) {
    int R = 6371; //km
    double dLat = deg2rad(lat1 - lat2);
    double dLon = deg2rad(lon1 - lon2);
    double a = Math.sin(dLat/2) * Math.sin(dLat/2) +
        Math.sin(dLon/2) * Math.sin(dLon/2) * Math.cos(lat1) * Math.cos(lat2); 
    double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
    return c * R;
}
StarPinkER
  • 14,081
  • 7
  • 55
  • 81
0

try this code for distance calculation.

    public double CalculationByDistance(GeoPoint StartP, GeoPoint EndP) {  
  double lat1 = StartP.getLatitudeE6()/1E6;  
  double lat2 = EndP.getLatitudeE6()/1E6;  
  double lon1 = StartP.getLongitudeE6()/1E6;  
  double lon2 = EndP.getLongitudeE6()/1E6;  
  double dLat = Math.toRadians(lat2-lat1);  
  double dLon = Math.toRadians(lon2-lon1);  
  double a = Math.sin(dLat/2) * Math.sin(dLat/2) +  
     Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) *  
     Math.sin(dLon/2) * Math.sin(dLon/2);  
  double c = 2 * Math.asin(Math.sqrt(a));  
  return Radius * c;  
 }
jithu
  • 706
  • 1
  • 9
  • 13