Créer un objet Location dans Android avec des valeurs de latitude et de longitude


138

J'ai un programme dans lequel les valeurs de latitude et de longitude d'un emplacement sont stockées dans une base de données que je télécharge.

Je veux obtenir la distance entre ces coordonnées et ma position actuelle.

La classe Location a une méthode simple pour trouver la distance entre deux objets Location, j'ai donc pensé que je créerais un objet Location avec les coordonnées, puis appellerais la méthode.

Y a-t-il un moyen facile de faire ceci? De plus, s'il existe une autre équation fiable et assez simple qui n'encombrera pas trop les choses, cela fonctionnerait aussi. Merci.

(android.location.Location)


Réponses:


309

En supposant que vous disposez déjà d'un objet de localisation avec votre position actuelle.

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 car les commentaires dans cette réponse, bien qu'abrégés et simples, étaient en fait extrêmement utiles. Merci @Exception Al
Sub par

2
Vraiment mauvais exemple de documentation pour Android, gaspillé pas mal de temps là-dessus. Mon autre question est de supposer que je fournisse un fournisseur valide comme le GPS, me donnera-t-il l'emplacement actuel? En d'autres termes, quelle est la signification du fournisseur
Utsav Gupta

Si vous avez besoin d'une valeur par défaut pour un objet Location et que vous ne pouvez pas l'initialiser avec un lat / lon, je suggère de les définir dans un initialiseur statique, par exemplestatic { location.setLatitude(0.0d); location.setLongitude(0.0d); }
Jason Hartley

Ya j'avais manqué d'écrire «d» et je n'ai pas pu créer l'objet de localisation. Petite erreur
stupide

1
pourquoi dans les tests unitaires, cela n'a aucun effet lorsque je règle Lat et Lon sur l'objet Location. L'objet de localisation est en quelque sorte nul!?!?
Ewoks

30

Vous pouvez créer des emplacements à l'aide de leur constructeur , puis définir les valeurs de latutude et de longitude.

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

1
@dst Quoi "yourprovidername"?
ban-geoengineering

@ ban-geoengineering laisser vide "" pas nécessaire.
Alp Altunel

13

Je réponds encore une fois, car beaucoup de gens comme moi ne savent pas ce que "providername"c'est. Le code ci-dessous répond à la question:

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

Ici, j'utilise LocationManager.GPS_PROVIDERcomme nom de fournisseur.


Pourquoi LocationManager.GPS_PROVIDERet y a-t-il des alternatives pourrions-nous envisager?
ban-geoengineering

1
Il y en a 2 autres, PASSIVE et NETWORK_PROVIDER. Voici une belle explication pour pourquoi et quoi utiliser. stackoverflow.com/questions/6775257/…
Vijay E

1
Si l' locationobjet est créé manuellement, cependant, ne serait-il pas plus approprié d'utiliser une chaîne vide plutôt que LocationManager.GPS_PROVIDER, LocationManager.PASSIVEou LocationManager.NETWORK_PROVIDER?
ban-geoengineering
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.