Erstellen eines Standortobjekts in Android mit Breiten- und Längenwerten


138

Ich habe ein Programm, in dem Breiten- und Längengrade eines Standorts in einer Datenbank gespeichert sind, die ich herunterlade.

Ich möchte den Abstand zwischen diesen Koordinaten und meinem aktuellen Standort ermitteln.

Die Location-Klasse verfügt über eine einfache Methode zum Ermitteln des Abstands zwischen zwei Location-Objekten. Daher dachte ich, ich würde ein Location-Objekt mit den Koordinaten erstellen und dann die Methode aufrufen.

Gibt es eine einfache Möglichkeit, dies zu tun? Auch wenn es eine andere zuverlässige, ziemlich einfache Gleichung gibt, die die Dinge nicht zu sehr durcheinander bringt, würde das auch funktionieren. Vielen Dank.

(android.location.Location)


Antworten:


309

Angenommen, Sie haben bereits ein Standortobjekt mit Ihrem aktuellen Standort.

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, da die Kommentare in dieser Antwort, obwohl gekürzt und einfach, in der Tat äußerst hilfreich waren. Vielen Dank, dass Sie @Exception Al
Subby

2
Wirklich schlechtes Beispiel für eine Dokumentation für Android, die einige Zeit damit verschwendet hat. Meine andere Frage ist, ob ich einen gültigen Anbieter wie GPS anbiete. Gibt er mir den aktuellen Standort? Mit anderen Worten, was ist die Bedeutung des Anbieters
Utsav Gupta

Wenn Sie einen Standardwert für ein Standortobjekt benötigen und diesen nicht mit einem lat / lon initialisieren können, empfehle ich, ihn in einem statischen Initialisierer festzulegen, z. B.static { location.setLatitude(0.0d); location.setLongitude(0.0d); }
Jason Hartley,

Ja, ich hatte das Schreiben von 'd' verpasst und konnte das Standortobjekt nicht erstellen.
Dummer

1
Warum hat es in Unit-Tests keine Auswirkung, wenn ich Lat und Lon auf Location-Objekt setze? Standortobjekt ist irgendwie null!?!?
Ewoks

30

Sie können Standorte mit ihrem Konstruktor erstellen und dann die Längen- und Breitengrade festlegen.

final Location location = new Location("yourprovidername");
location.setLatitude(1.2345d);
location.setLongitude(1.2345d);

1
@dst Was ist "yourprovidername"?
Ban-Geoengineering

@ ban-geoengineering leer lassen "" nicht notwendig.
Alp Altunel

13

Ich beantworte dies erneut, weil viele Leute wie ich nicht wissen, was "providername"eigentlich ist. Der folgende Code beantwortet die Frage:

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

Hier verwende ich LocationManager.GPS_PROVIDERals Anbieternamen.


Warum LocationManager.GPS_PROVIDERund gibt es Alternativen, die wir in Betracht ziehen könnten?
Ban-Geoengineering

1
Es gibt zwei weitere, PASSIVE und NETWORK_PROVIDER. Hier ist eine schöne Erklärung, warum und was zu verwenden ist. stackoverflow.com/questions/6775257/…
Vijay E

1
Wenn das locationObjekt manuell erstellt wird, aber wäre es nicht sinnvoller sein , eher eine leere Zeichenfolge zu verwenden , als LocationManager.GPS_PROVIDER, LocationManager.PASSIVEoder LocationManager.NETWORK_PROVIDER?
Ban-Geoengineering
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.