Creazione di un oggetto Location in Android con valori di latitudine e longitudine


138

Ho un programma in cui i valori di latitudine e longitudine di una posizione sono memorizzati in un database, che scarico.

Voglio ottenere la distanza tra queste coordinate e la mia posizione attuale.

La classe Location ha un metodo semplice per trovare la distanza tra due oggetti Location, quindi ho pensato di creare un oggetto Location con le coordinate, quindi chiamare il metodo.

C'è un modo semplice per farlo? Inoltre, se esiste un'altra equazione affidabile e abbastanza semplice che non ingombra troppo le cose, funzionerebbe anche. Grazie.

(Android.location.Location)


Cerca stackoverflow.com/questions/8049612/… per ulteriori informazioni
Paul Thompson,

Risposte:


309

Supponendo che tu abbia già un oggetto location con la tua posizione corrente.

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 dato che i commenti in questa risposta, sebbene abbreviati e semplici, erano in realtà estremamente utili. Grazie @Exception Al
Subby,

2
Esempio davvero brutto di documentazione per Android, sprecato un bel po 'di tempo su questo. L'altra mia domanda è se suppongo di fornire un provider valido come gps, mi darà la posizione corrente? In altre parole, qual è il significato del fornitore
Utsav Gupta,

Se hai bisogno di un valore predefinito per un oggetto Location e poiché non puoi inizializzarlo con un lat / lon, ti suggerisco di impostarlo in un inizializzatore statico, ad es.static { location.setLatitude(0.0d); location.setLongitude(0.0d); }
Jason Hartley,

Ya mi ero perso a scrivere 'd' e non ero in grado di creare l'oggetto location. Piccolo errore sciocco
zulkarnain shah,

1
perché nei test unitari non ha alcun effetto quando imposto Lat e Lon sull'oggetto Location. L'oggetto posizione è in qualche modo nullo!?!?
Ewoks,

30

Puoi creare posizioni usando il loro costruttore , quindi impostare i valori di latutude e longitudine.

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

1
@dst Che cos'è "yourprovidername"?
divieto di geoingegneria il

@ ban-geoengineering lascia vuoto "" non necessario.
Alp Altunel

13

Sto rispondendo di nuovo a questo, perché molte persone come me non sanno cosa sia "providername"realmente. Di seguito il codice risponde alla domanda:

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

Qui sto usando LocationManager.GPS_PROVIDERcome nome del provider.


Perché LocationManager.GPS_PROVIDERe ci sono alternative che potremmo considerare?
divieto di geoingegneria il

1
Ce ne sono altri 2, ovvero PASSIVE e NETWORK_PROVIDER. Ecco una bella spiegazione del perché e del cosa usare. stackoverflow.com/questions/6775257/...
Vijay E

1
Se l' locationoggetto viene creato manualmente, tuttavia, non sarebbe più appropriato utilizzare una stringa vuota anziché LocationManager.GPS_PROVIDER, LocationManager.PASSIVEo LocationManager.NETWORK_PROVIDER?
divieto di geoingegneria
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.