2015-07-23 7 views
-1

Я разрабатываю приложение Meter (в android). Я вычисление расстояния между двумя точками по формуле (в заднем месте)Gps расстояние между двумя точками

double calculateDistancs(double lat1, double long1, double lat2, 
     double long2) { 
    double earthRadius = 6371000; // meters 

    double dLat = Math.toRadians(lat2 - lat1); 
    double dLng = Math.toRadians(long2 - long1); 
    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)); 
    float dist = (float) (earthRadius * c); 
    return dist; 

} 

Я не получаю такое же и точное расстояние между моим домом до станции метро. Предоставьте другой подход, если он доступен в Android.

Итак, второй вариант - использовать google api для получения маршрута расстояния bn два latlong, но в этом случае он будет атаковать api много раз. Я хочу знать, какой подход лучше всего.

Я получаю различные latlong в одном и том же месте, может кто-то, пожалуйста, заставьте меня понять для этого.

ответ

1

Проблема, скорее всего, не вызвана функцией, которую вы опубликовали. Возможно, вы подытоживаете прыгающие GPS-адреса. Недостаточно суммировать расстояние от одного места до другого, особенно на низких скоростях, таких как скорость ходьбы.

Однако есть слабые места в формуле:

float dist = (float) (earthRadius * c); 

Вы всегда используете двойные, а затем понизить до нижней точности поплавка, но вернуть в два раз. Это не имеет смысла.

Fix, что с:

double dist = earthRadius * c; 
+0

Спасибо за помощь. Можете ли вы предоставить некоторый подход к выполнению этой задачи. Есть ли другой способ сделать это. –

+0

Это помогает при визуализации местоположений, например. в файле kml, а затем посмотрите, какие местоположения вы выберете из расчета расстояния, и разработайте свою собственную технологию фильтрации. – AlexWien

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