2012-03-06 6 views
3

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

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(); 
} 

ответ

2

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

+0

Спасибо! можно ли использовать java-скрипт в java? –

+1

Я не знаю, извините, но я думаю, что вы не можете – Pben

+0

есть ли какой-либо метод java? Спасибо –

1

Это простой вариант - в настоящее время вы используете радиус Земли в милях; просто изменить, что для радиуса в метрах (per Wikipedia: 6371000), и удалить ваше преобразование

+0

Спасибо! я пройду через это! –

+0

Есть ли какой-либо java-метод для этого? –

+0

@sandiparmal Метод Java для чего? –

1

На этой question, я нашел этот код:

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

+0

Большое спасибо! –

+1

@sandiparmal Странно, кажется, что ваша 'distanceCalculate()' формула и одна, размещенная здесь 'distFrom()' by Julien, фактически используют ту же формулу 'Haversine'; кроме того, что в вашем 'distanceCalculate()', он преобразуется из миль в метры. Из описания проблемы, похоже, у вас есть проблема в * форматировании * на вашем ** экспоненциальном ** выходе, который уже находится в метрах. Если вы хотите отобразить вывод без экспоненциального термина, проверьте это http://stackoverflow.com/questions/1826065/conversion-from-exponential-form-to-decimal-in-java – ecle

+0

Земля не идеальная сфера, в то время как ваш ответ предполагает, что это так. –

Смежные вопросы