Сравнение двух местоположений с использованием их долготы и широты

Привет, мне нужно качать событие в onchangelocation(), сравнивая текущую широту и долготу с некоторой сохраненной широтой и долготой, но я получаю ошибку. eclipse не распознает расстояние между ключевыми словами, а для ошибки коррекции он дает подсказку, чтобы набрать метод "расстояние" с 4 параметрами... как его исправить??? или какой-либо другой способ выполнить ту же работу?

спасибо и приветствую. код прилагается ниже

@Override
public void onLocationChanged(Location location) {
 double currentLat=location.getLatitude();
 double currentLon=location.getLongitude();

    if (distance(lat,lon,currentLat,currentLon)<2.0){
 //do what you want to do...
  }
}

Ответ 1

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

Пример их сравнения:

@Override
public void onLocationChanged(Location location) {

 double lat2 = location.getLatitude();
 double lng2 = location.getLongitude();

    // lat1 and lng1 are the values of a previously stored location
    if (distance(lat1, lng1, lat2, lng2) < 0.1) { // if distance < 0.1 miles we take locations as equal
       //do what you want to do...
    }
}

/** calculates the distance between two locations in MILES */
private double distance(double lat1, double lng1, double lat2, double lng2) {

    double earthRadius = 3958.75; // in miles, change to 6371 for kilometer output

    double dLat = Math.toRadians(lat2-lat1);
    double dLng = Math.toRadians(lng2-lng1);

    double sindLat = Math.sin(dLat / 2);
    double sindLng = Math.sin(dLng / 2);

    double a = Math.pow(sindLat, 2) + Math.pow(sindLng, 2)
        * Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2));

    double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));

    double dist = earthRadius * c;

    return dist; // output distance, in MILES
}

Ответ 2

Вы можете использовать статический метод distanceBetween() Location class:

    float[] distance = new float[1];
    Location.distanceBetween(lat, lon, currentLat, currentLon, distance);
    // distance[0] is now the distance between these lat/lons in meters
    if (distance[0] < 2.0) {
        // your code...
    }

Если у вас есть два объекта Location, другой параметр distanceTo()

Ответ 3

Все 4 входных параметра находятся в поплавке. Расстояние - относительное, а не реальное расстояние. Вам нужно преобразовать это расстояние в реальное расстояние, выполнив поиск по некоторой формуле онлайн:( Я использовал это в своем приложении, чтобы добраться до ближайшей станции метро из моего текущего местоположения. Надеюсь, этот фрагмент поможет кому-то:)

float distance(float lat,float lon,float clat,float clon)
{
    float distance;
    float temp1;
    float temp2;
    temp1=(float)((lat-clat)*(lat-clat));
    temp2=(float)((lon-clon)*(lon-clon));
    distance=temp1+temp2;
    return distance;
}