Подтвердить что ты не робот

Вычисление расстояния между двумя точками широты и долготы в android

Как найти расстояние между two latitude и longitude точками


Для одной из точек широты и долготы я имею ее в базе данных, а другой - я хочу использовать текущую позицию мобильного телефона

Какой из них мне нужно использовать ниже::

  • провайдер местоположения Android
  • API Google
  • Математический расчет

note:: Любой образец демонстрационного кода будет полезен

4b9b3361

Ответ 1

Вы можете использовать встроенный алгоритм:

Location locationA = new Location("point A");     
locationA.setLatitude(latA); 
locationA.setLongitude(lngA);
Location locationB = new Location("point B");
locationB.setLatitude(latB); 
LocationB.setLongitude(lngB);
distance = locationA.distanceTo(locationB) ;

update: (У меня нет никаких ошибок)

LatLng latLngA = new LatLng(12.3456789,98.7654321);
LatLng latLngB = new LatLng(98.7654321,12.3456789);

Location locationA = new Location("point A");
locationA.setLatitude(latLngA.latitude);
locationA.setLongitude(latLngA.longitude);
Location locationB = new Location("point B");
locationB.setLatitude(latLngB.latitude);
locationB.setLongitude(latLngB.longitude);

double distance = locationA.distanceTo(locationB);

Ответ 2

Вы можете использовать алгоритм Хаверсина. Другой пользователь уже закодировал решение для этого:

public double CalculationByDistance(double initialLat, double initialLong,
                            double finalLat, double finalLong){
int R = 6371; // km
double dLat = toRadians(finalLat-initialLat);
double dLon = toRadians(finalLong-initialLong);
lat1 = toRadians(lat1);
lat2 = toRadians(lat2);

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 R * c;
}

public double toRadians(deg) {
  return deg * (Math.PI/180)
}

Источник: fooobar.com/info/310710/...