Как рассчитать разницу между широтой и долготой? - PullRequest
3 голосов
/ 06 марта 2012

Мне нужно рассчитать разницу между долготой и широтой текущей позиции
и предыдущей позиции.но он отображает результат в экспоненциальном формате, и мне нужно в
метров.Я не понимаю, как конвертировать его в формате метра.Какая формула для этого нужна?

double distance2 = distanceCalculate(lat,lng,locationB.getLatitude(),locationB.getLongitude());
Toast.makeText(this, "distance2=="+Double.valueOf(distance2).longValue() + "meter" , Toast.LENGTH_SHORT).show(); 

double ActualDistance=(Double.valueOf(distance2).longValue())/1E6;
if(ActualDistance<400)
{
    System.out.println("identical");
    Toast.makeText(this,"identical", Toast.LENGTH_LONG).show();
}
else
{
    // send sms
    SmsManager sms = SmsManager.getDefault();
}

public static float distanceCalculate (double lat1, double lng1, double lat2, double lng2 ) 
{
      double earthRadius = 3958.75;
      double dLat = Math.toRadians(lat2-lat1);
      double dLng = Math.toRadians(lng2-lng1);
      double a = Math.sin(dLat/2) * Math.sin(dLat/2) +
      Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) *
      Math.sin(dLng/2) * Math.sin(dLng/2);
      double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
      double dist = earthRadius * c;

      int meterConversion = 1609;

      return new Float(dist * meterConversion).floatValue();
}

Ответы [ 3 ]

2 голосов
/ 06 марта 2012

я нахожу это в JavaScript, я думаю, что это может помочь вам понять, как вы можете это сделать

1 голос
/ 06 марта 2012

В этом вопросе я нашел этот код:

public static double distFrom(double lat1, double lng1, double lat2, double lng2) { 
  double earthRadius = 3958.75; 
  double dLat = Math.toRadians(lat2-lat1); 
  double dLng = Math.toRadians(lng2-lng1); 
  double a = Math.sin(dLat/2) * Math.sin(dLat/2) + 
           Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) * 
           Math.sin(dLng/2) * Math.sin(dLng/2); 
  double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
  double dist = earthRadius * c; 

  return dist; 
} 

Это Java-реализация формулы Haversine .

Она вернетсярасстояние в милях.Для других единиц измените earthRadius с http://en.wikipedia.org/wiki/Earth_radius

1 голос
/ 06 марта 2012

Это просто - в настоящее время вы используете радиус Земли в милях;просто измените его для радиуса в метрах ( на Википедию : 6 371 000) и удалите конверсию

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...