Tworzenie obiektu lokalizacji w systemie Android z wartościami szerokości i długości geograficznej

138

Mam program, w którym wartości szerokości i długości geograficznej lokalizacji są przechowywane w bazie danych, którą pobieram.

Chcę uzyskać odległość między tymi współrzędnymi a moją aktualną lokalizacją.

Klasa Location ma prostą metodę znajdowania odległości między dwoma obiektami Location, więc pomyślałem, że utworzę obiekt Location ze współrzędnymi, a następnie wywołam tę metodę.

Czy jest na to łatwy sposób? Ponadto, jeśli istnieje inne niezawodne, dość proste równanie, które nie zaśmieca zbytnio rzeczy, to też by działało. Dzięki.

(android.location.Location)

fonduman
źródło
Zobacz stackoverflow.com/questions/8049612/ ... po więcej
Paul Thompson

Odpowiedzi:

309

Zakładając, że masz już obiekt lokalizacji z bieżącą lokalizacją.

Location targetLocation = new Location("");//provider name is unnecessary
targetLocation.setLatitude(0.0d);//your coords of course
targetLocation.setLongitude(0.0d);

float distanceInMeters =  targetLocation.distanceTo(myLocation);
Androiderson
źródło
1
+1, ponieważ komentarze w tej odpowiedzi, choć skrócone i proste, były w rzeczywistości niezwykle pomocne. Dziękuję @Exception Al
Subby
2
Naprawdę zły przykład dokumentacji dla Androida, zmarnował na to trochę czasu. Moje inne pytanie brzmi: przypuśćmy, że podam prawidłowego dostawcę, takiego jak GPS, czy poda mi aktualną lokalizację? Innymi słowy, jakie jest znaczenie dostawcy
Utsav Gupta
Jeśli potrzebujesz domyślnej wartości dla obiektu Location, a ponieważ nie możesz go zainicjować za pomocą lat / lon, sugeruję ustawienie ich w inicjalizatorze statycznym, np.static { location.setLatitude(0.0d); location.setLongitude(0.0d); }
Jason Hartley
Tak, przegapiłem napisanie „d” i nie mogłem utworzyć obiektu lokalizacji. Głupi mały błąd
zulkarnain shah
1
dlaczego w testach jednostkowych nie ma to żadnego wpływu, gdy ustawię Lat i Lon na obiekcie Location. Lokalizacja obiektu jest w jakiś sposób zerowa!?!?
Ewoks
30

Możesz tworzyć lokalizacje używając ich konstruktora , a następnie ustawiać wartości szerokości geograficznej i szerokości geograficznej.

final Location location = new Location("yourprovidername");
location.setLatitude(1.2345d);
location.setLongitude(1.2345d);
dst
źródło
1
@dst Co "yourprovidername"?
zakaz geoinżynierii
@ ban-geoengineering pozostaw puste "" nie jest konieczne.
Alp Altunel
13

Odpowiadam ponownie, ponieważ wielu ludzi takich jak ja nie wie, co to "providername"właściwie jest. Poniższy kod odpowiada na pytanie:

Location location = new Location(LocationManager.GPS_PROVIDER);
location.setLatitude(23.5678);
location.setLongitude(34.456);

Tutaj używam LocationManager.GPS_PROVIDERjako nazwy dostawcy.

Vijay E.
źródło
Dlaczego LocationManager.GPS_PROVIDERi czy są jakieś alternatywy, które moglibyśmy rozważyć?
zakaz geoinżynierii
1
Są jeszcze 2, czyli PASSIVE i NETWORK_PROVIDER. Oto ładne wyjaśnienie, dlaczego i czego używać. stackoverflow.com/questions/6775257/…
Vijay E
1
Jeśli jednak locationobiekt jest tworzony ręcznie, czy nie byłoby bardziej właściwe użycie pustego ciągu zamiast LocationManager.GPS_PROVIDER, LocationManager.PASSIVElub LocationManager.NETWORK_PROVIDER?
zakaz geoinżynierii