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)


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);

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);

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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.