Criando um objeto Location no Android com valores de latitude e longitude

138

Eu tenho um programa no qual os valores de latitude e longitude de um local são armazenados em um banco de dados, que eu baixa.

Quero obter a distância entre essas coordenadas e minha localização atual.

A classe Location possui um método simples para encontrar a distância entre dois objetos Location, então imaginei que faria um objeto Location com as coordenadas e depois chame o método.

Existe uma maneira fácil de fazer isso? Além disso, se houver outra equação confiável e bastante simples que não atrapalhe muito as coisas, isso também funcionaria. Obrigado.

(android.location.Location)

fonduman
fonte
Olhar stackoverflow.com/questions/8049612/... por mais
Paul Thompson

Respostas:

309

Supondo que você já tenha um objeto de localização com sua localização atual.

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
fonte
1
+1, pois os comentários nesta resposta, apesar de resumidos e simples, foram, de fato, extremamente úteis. Obrigado @Exception Al
Subby
2
Um péssimo exemplo de documentação para Android, perdeu muito tempo com isso. Minha outra pergunta é: suponha que forneça um provedor válido, como GPS, ele me fornecerá a localização atual? Em outras palavras, qual é o significado do provedor
Utsav Gupta 10/10
Se você precisa de um valor padrão para um objeto Local e desde que você não pode inicializar-lo com uma latitude / longitude, sugiro colocá-los em um inicializador estático, por exemplostatic { location.setLatitude(0.0d); location.setLongitude(0.0d); }
Jason Hartley
Sim, eu tinha perdido a escrita 'd' e não consegui criar o objeto de localização. Erro pequeno bobo
zulkarnain shah
1
por que, nos testes de unidade, não tem efeito quando defino Lat e Lon no objeto Location. O objeto Location é de alguma forma nulo!?!?
Ewoks
30

Você pode criar locais usando seu construtor , depois definir os valores de latutude e longitude.

final Location location = new Location("yourprovidername");
location.setLatitude(1.2345d);
location.setLongitude(1.2345d);
DST
fonte
1
@dst O que é "yourprovidername"?
ban-geoengineering
@ ban-geoengineering deixa em branco "" não necessário.
Alp Altunel 7/11
13

Estou respondendo de novo, porque muitas pessoas como eu não sabem o que "providername"realmente é. O código abaixo responde à pergunta:

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

Aqui estou usando LocationManager.GPS_PROVIDERcomo o nome do provedor.

Vijay E
fonte
Por que LocationManager.GPS_PROVIDERe existem alternativas que possamos considerar?
ban-geoengineering
1
Existem mais 2, que são PASSIVE e NETWORK_PROVIDER. Aqui está uma boa explicação para o porquê e o que usar. stackoverflow.com/questions/6775257/…
Vijay E
1
Se o locationobjeto estiver sendo criado manualmente, não seria mais apropriado usar uma string vazia em vez de LocationManager.GPS_PROVIDER, LocationManager.PASSIVEou LocationManager.NETWORK_PROVIDER?
ban-geoengineering