2013-05-28 3 views
0

Я получаю два местоположения GEO в своем приложении, и мне нужно рассчитать расстояние между ними, и после вычисления расстояния мне нужно сравнить этот результат с определенным порогом, который в моем случае 50 meters, как бы определить этот порог в float. Кроме того, в настоящее время я, мой андроид, находится в том же месте, но всегда получаю расчетное расстояние между двумя двумя геолокациями, определенными после интервала более 50 метров. Как это возможно? Я беру порог в 50 метров, как:Определение порога для расстояния между двумя местоположениями GEO?

private static final float DISTANCE_CHANGE_METERS = 50.0f; //50 meters 

и я вычисления расстояния по следующей формуле я нашел на StackOverflow:

public static float 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; 

    int meterConversion = 1609; 

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

Просьба помочь мне в этом отношении. Благодаря!

ответ

0

Currently my android phone is at the same location, but I always get the calculated distance between my 2 two geolocations determined after an interval to be more than 50 meters. How is that possible?

Это на самом деле зависит от того, как вы передаете широту и долготу в функции distFrom. Просто напомню, что есть более простой способ рассчитать расстояние.
Вы можете использовать только distanceTo() функцию в android API с помощью Location для вычисления расстояния между двумя местами, как это:

Location locationA = new Location("point A"); 
locationA.setLatitude(latA); // co-ordinates in double 
locationA.setLongitude(lngA); 

Location locationB = new Location("point B"); 
locationB.setLatitude(latB); 
locationB.setLongitude(lngB); 

float distance = locationA.distanceTo(locationB); 

Если после того, как с помощью этого также вы получаете расстояние больше 50 метров, то ваши координаты, которые вы не являются точными. Его прекрасно, потому что его трудно получить точность с точностью менее 50 метров. Это было бы наиболее точно, если вы используете интернет вместе с GPS. Если вы видите here, даже если вы используете ACCURACY_HIGH в качестве критерия для выбора Location Provider, он обеспечивает точность менее 100 метров. Он может быть точным до 100, 70 или даже 50 метров. Поэтому даже самый точный вариант не гарантирует экстремальной точности. Если вы используете GPS/Network provider для получения местоположения, тогда ваша ситуация очень возможна. Получение местоположения с использованием «Network Provider1» также не так точно, поскольку оно может захватывать сигналы из двух сетевых вышек в разных случаях, которые могут быть физически отделены друг от друга.

Надеюсь, что это поможет и очистит точку до некоторой степени. Его проблема с точностью вашего провайдера местоположения.

0

Не могли бы вы просто сделать:

if (distFrom(lat1,lng1,lat2,lng2) > DISTANCE_CHANGE_METERS) 
{ 
    //greater than threshhold 
} 
+0

Я делаю это ... но я в замешательстве, поэтому я всегда получаю расстояние более 50 метров, так как я никогда не двигался в дюйме от того места, где я был раньше ... ???? –

+0

Не могли бы вы предоставить набор координат, который вы используете? –

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