Hacer un objeto Location en Android con valores de latitud y longitud

138

Tengo un programa en el que los valores de latitud y longitud de una ubicación se almacenan en una base de datos, que descargo.

Quiero obtener la distancia entre estas coordenadas y mi ubicación actual.

La clase Location tiene un método simple para encontrar la distancia entre dos objetos Location, así que pensé que haría un objeto Location con las coordenadas, y luego llamaría al método.

¿Hay una forma fácil de hacer esto? Además, si hay otra ecuación confiable y bastante simple que no desordenará demasiado las cosas, también funcionaría. Gracias.

(android.location.Location)

fonduman
fuente
Mire stackoverflow.com/questions/8049612/… para más información
Paul Thompson

Respuestas:

309

Suponiendo que ya tiene un objeto de ubicación con su ubicación actual.

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
fuente
1
+1 como los comentarios en esta respuesta, aunque resumidos y simples, en realidad fueron extremadamente útiles. Gracias @Exception Al
Subby
2
Muy mal ejemplo de documentación para Android, perdí bastante tiempo en esto. Mi otra pregunta es, supongo que proporciono un proveedor válido como GPS, ¿me dará la ubicación actual? En otras palabras, cuál es la importancia del proveedor
Utsav Gupta
Si necesita un valor predeterminado para un objeto Location y no puede inicializarlo con un lat / lon, le sugiero que lo configure en un inicializador estático, por ejemplostatic { location.setLatitude(0.0d); location.setLongitude(0.0d); }
Jason Hartley el
Ya me había perdido escribir 'd' y no pude crear el objeto de ubicación. Pequeño error tonto
zulkarnain shah
1
por qué en las pruebas unitarias no tiene ningún efecto cuando configuro Lat y Lon en el objeto Location. ¡El objeto de ubicación es de alguna manera nulo!?!?
Ewoks
30

Puede crear ubicaciones utilizando su constructor , luego establecer los valores de latutude y longitud.

final Location location = new Location("yourprovidername");
location.setLatitude(1.2345d);
location.setLongitude(1.2345d);
dst
fuente
1
@dst ¿Qué es "yourprovidername"?
prohibición de geoingeniería
@ prohibir geoingeniería dejar vacío "" no es necesario.
Alp Altunel
13

Estoy respondiendo esto nuevamente, porque mucha gente como yo no sabe qué "providername"es realmente. El siguiente código responde la pregunta:

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

Aquí estoy usando LocationManager.GPS_PROVIDERcomo nombre del proveedor.

Vijay E
fuente
¿Por qué LocationManager.GPS_PROVIDERy hay alguna alternativa que podamos considerar?
prohibición de geoingeniería el
1
Hay 2 más, que es PASSIVE y NETWORK_PROVIDER. Aquí hay una buena explicación de por qué y qué usar. stackoverflow.com/questions/6775257/…
Vijay E
1
Sin embargo, si el locationobjeto se crea manualmente, ¿no sería más apropiado usar una cadena vacía en lugar de LocationManager.GPS_PROVIDER, LocationManager.PASSIVEo LocationManager.NETWORK_PROVIDER?
prohibición de geoingeniería el