2011-12-18 12 views
5

Powiel możliwe:
How to calculate distance between two locations using their longitude and latitude valueAndroid odległość oblicz pomiędzy dwiema lokalizacjami

Przed wszystkim dać mi jakieś wykształcenie, w jaki sposób Ziemia nie jest idealną kulą i to wszystkie zmiany, gdy pojawi się bliżej biegunów, co wydaje się być wszystkim, co mogę znaleźć w sieci. I zanim zapytam ojca, który jest znakomitym geografem i moim wujkiem, który jest fizykiem kwantowym, który pracuje dla NASA, a ja jako niski programista komputerowy, chciałbym cię najpierw zapytać!

Potrzebuję tylko odległości kilometrowej w kształcie piłki od linii telefonicznej do listy wstępnie zaludnionych lokalizacji o powierzchni 720 kilometrów kwadratowych, więc zmiany nie są ważne.

To teraz ja, proszę, nie rzucaj nic na mnie.

mLatitude=-38.3533177 
mLongitude=144.9127674 

I to mi dziesięć minut temu około 3kms Odległość w linii prostej,

mLatitude=-38.3444385 
mLongitude=144.9374762 

W jaki sposób obliczyć, że aby uzyskać 3km?

Jestem całkiem nowy w Javie, więc nie jestem pewien, co wbudowane funkcje matematyczne są dostępne i nie mam pojęcia, co to jest obliczenie?

Pozdrowienia,

Mike.

+0

Poprosiłem smilliar pytanie, sprawdź to: http://stackoverflow.com/questions/8286771/list-events-on-defined-area-using-google-maps – PiKey

+0

zobaczyć tę odpowiedź: http://stackoverflow.com/a/8410867/265167 –

Odpowiedz

27

Można użyć metody distanceTo() klasy Location, aby uzyskać odległość między dwoma locatinami.

+0

DistanceTo() i DistanceBetween() są trochę nieuchwytne, jeśli wpiszesz je do wyszukiwania, otrzymam wyniki dla równań matematycznych, które robią to, co uważasz za wbudowane funkcje powinieneś zrobić. Oni, jak powiedział Nostras, mają nieco inny promień ziemi, ale dla mnie potrzebuję tylko parkietu. –

+0

OK, mówisz, że nie wiesz, jak korzystać z tej metody? – anujprashar

4
public class Calculator { 
    private static final int earthRadius = 6371; 
    public static float calculateDistance(float lat1, float lon1, float lat2, float lon2) 
    { 
     float dLat = (float) Math.toRadians(lat2 - lat1); 
     float dLon = (float) Math.toRadians(lon2 - lon1); 
     float a = 
       (float) (Math.sin(dLat/2) * Math.sin(dLat/2) + Math.cos(Math.toRadians(lat1)) 
         * Math.cos(Math.toRadians(lat2)) * Math.sin(dLon/2) * Math.sin(dLon/2)); 
     float c = (float) (2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a))); 
     float d = earthRadius * c; 
     return d; 
    } 
} 
+0

Czy możesz mi powiedzieć, jaka jest jednostka wyniku tej funkcji? Nie wydaje się, aby powrócić do km, prawda? –

+0

Wygląda na to, że funkcja zwróciła odległość w kilometrach. – NOSTRA

Powiązane problemy