hacer - obtener ubicacion android studio 2017
¿Cómo formatear latitud y longitud del GPS? (5)
En Android (java) cuando obtienes la latitud y longitud actual usando la función getlatitude (), etc. obtienes las coordenadas en formato decimal:
latitud: 24.3454523 longitud: 10.123450
Quiero poner esto en grados y minutos decimales para que luzca algo como esto:
Latitud: 40 ° 42''51 "N Longitud: 74 ° 00''21" W
Utilizar esta
public static String getFormattedLocationInDegree(double latitude, double longitude) {
try {
int latSeconds = (int) Math.round(latitude * 3600);
int latDegrees = latSeconds / 3600;
latSeconds = Math.abs(latSeconds % 3600);
int latMinutes = latSeconds / 60;
latSeconds %= 60;
int longSeconds = (int) Math.round(longitude * 3600);
int longDegrees = longSeconds / 3600;
longSeconds = Math.abs(longSeconds % 3600);
int longMinutes = longSeconds / 60;
longSeconds %= 60;
String latDegree = latDegrees >= 0 ? "N" : "S";
String lonDegrees = longDegrees >= 0 ? "E" : "W";
return Math.abs(latDegrees) + "°" + latMinutes + "''" + latSeconds
+ "/"" + latDegree +" "+ Math.abs(longDegrees) + "°" + longMinutes
+ "''" + longSeconds + "/"" + lonDegrees;
} catch (Exception e) {
return ""+ String.format("%8.5f", latitude) + " "
+ String.format("%8.5f", longitude) ;
}
}
para convertir de decimales a grados, puede hacer lo siguiente
String strLongitude = location.convert(location.getLongitude(), location.FORMAT_DEGREES);
String strLatitude = location.convert(location.getLatitude(), location.FORMAT_DEGREES);
referencia es el sitio del desarrollador de Android .
Editar
He intentado seguir lo siguiente y obtener el resultado:
strLongitude = Location.convert(location.getLongitude(), Location.FORMAT_DEGREES);
strLatitude = Location.convert(location.getLatitude(), Location.FORMAT_DEGREES);
OUTPUT : Long: 73.16584: Lat: 22.29924
strLongitude = Location.convert(location.getLongitude(), Location.FORMAT_SECONDS);
strLatitude = Location.convert(location.getLatitude(), Location.FORMAT_SECONDS);
OUTPUT : Long: 73:9:57.03876: Lat: 22:17:57.26472
strLongitude = Location.convert(location.getLongitude(), Location.FORMAT_MINUTES);
strLatitude = Location.convert(location.getLatitude(), Location.FORMAT_MINUTES);
OUTPUT : Long: 73:9.95065: Lat: 22:17.95441
Pruebe diferentes opciones según su requisito
Tiene una coordenada en grados decimales, este formato de representación se llama "DEG"
Y quiere un DEG a DMS (Grados, Minutos, Segundos) (por ejemplo, 40 ° 42''51 "N),
conversión.
Esta implementación del código de Java en http://en.wikipedia.org/wiki/Geographic_coordinate_conversion
si los valores de coordenadas de DEG son <0, es oeste para longitud o sur para latitud.
Como ya se mencionó, se requieren algunas manipulaciones de cadena. Creé la siguiente clase de ayuda, que convierte la ubicación al formato DMS y permite especificar los lugares decimales para los segundos:
import android.location.Location;
import android.support.annotation.NonNull;
public class LocationConverter {
public static String getLatitudeAsDMS(Location location, int decimalPlace){
String strLatitude = Location.convert(location.getLatitude(), Location.FORMAT_SECONDS);
strLatitude = replaceDelimiters(strLatitude, decimalPlace);
strLatitude = strLatitude + " N";
return strLatitude;
}
public static String getLongitudeAsDMS(Location location, int decimalPlace){
String strLongitude = Location.convert(location.getLongitude(), Location.FORMAT_SECONDS);
strLongitude = replaceDelimiters(strLongitude, decimalPlace);
strLongitude = strLongitude + " W";
return strLongitude;
}
@NonNull
private static String replaceDelimiters(String str, int decimalPlace) {
str = str.replaceFirst(":", "°");
str = str.replaceFirst(":", "''");
int pointIndex = str.indexOf(".");
int endIndex = pointIndex + 1 + decimalPlace;
if(endIndex < str.length()) {
str = str.substring(0, endIndex);
}
str = str + "/"";
return str;
}
}
Debería haber algunas matemáticas:
(int)37.33168 => 37
37.33168 % 1 = 0.33168
0.33168 * 60 = 19.905 => 19
19.905 % 1 = 0.905
0.905 * 60 => 54
Lo mismo con -122 (agregue 360 si el valor es negativo)
EDITAR: Puede haber alguna API, que no sé.
Consulte de: ¿Cómo encontrar el grado del valor de latitud en Android?
Convierta los valores de latitud y longitud (grados) a doble. Java