Расстояние между двумя геопинтами - PullRequest
2 голосов
/ 12 ноября 2011

После двух строк вычислить широту и lng

double geoLat = location.getLatitude(); //  37.422006
double geoLng = location.getLongitude(); //   -122.084095

В цикле я вычисляю массив расстояний между географическими точками.широта [i] и долгота [i] - это ответ json от google map api

distance[i]=GetLatAndLng.gps2m(geoLat, geoLng,latitude[i] ,longitude[i]);

Это метод gps2m.

public static double gps2m(double lat1, double lng1, double lat2, double lng2) {
 double l1 = Math.toRadians(lat1);
    double l2 = Math.toRadians(lat2);
    double g1 = Math.toRadians(lng1);
    double g2 = Math.toRadians(lng2);

    double dist = Math.acos(Math.sin(l1) * Math.sin(l2) + Math.cos(l1) * Math.cos(l2) * Math.cos(g1 - g2));
    if(dist < 0) {
        dist = dist + Math.PI;
    }
    return Math.round(dist * 6378100);//in meters

}
}

В массиве расстояний я получаю значение, подобное 1.1967617E7Я хочу расстояние в метрах

Что не так и как получить расстояние в метрах.

Помогите !!

Ответы [ 2 ]

5 голосов
/ 12 ноября 2011

Вы можете использовать класс Location. Вы можете рассчитать расстояние двумя способами:

location.distanceTo(anotherLocation);

или

Location.distanceBetween(double startLatitude, double startLongitude, double endLatitude, double endLongitude, float[] results);

Для получения более подробной информации см. Документация о местоположении .

4 голосов
/ 12 ноября 2011

Вот мой код:

int EARTH_RADIUS_KM = 6371;
double lat1,lon1,lat2,lon2,lat1Rad,lat2Rad,deltaLonRad,dist,nDist;
lat1 = latitude of location 1

lon1 = longitude of location 1

lat2 = latitude of location 2

lon2 = longitude of location 2

lat1Rad = Math.toRadians(lat1);

lat2Rad = Math.toRadians(lat2);

deltaLonRad = Math.toRadians(lon2 - lon1);

dist = Math.acos(Math.sin(lat1Rad) * Math.sin(lat2Rad) + Math.cos(lat1Rad) * Math.cos(lat2Rad) * Math.cos(deltaLonRad)) * EARTH_RADIUS_KM;

nDist = Math.round(dist*0.62);

String strDistance = Double.toString(nDist)+" Miles";

Дистанция, которую вы получаете, в двойном и KM, вы можете округлить значение, которое вы получаете, сделать это с помощью Math.round(dist*0.62);

* 0,62 - конвертировать КМ в мили.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...