web-dev-qa-db-fra.com

Comment formater la latitude et la longitude GPS?

Sous Android (Java), lorsque vous obtenez la latitude et la longitude actuelles à l'aide de la fonction getlatitude (), etc., vous obtenez les coordonnées au format décimal:

latitude: 24.3454523 longitude: 10.123450

Je veux obtenir ceci en degrés et minutes décimales pour ressembler à ceci:

Latitude: 40 ° 42′51 ″ de longitude N: 74 ° 00′21 ″ de longitude ouest

9
user3182266

pour converger de décimales à degrés vous pouvez faire comme suit

String strLongitude = location.convert(location.getLongitude(), location.FORMAT_DEGREES);
String strLatitude = location.convert(location.getLatitude(), location.FORMAT_DEGREES);

référence est site de développement Android .

Modifier

J'ai essayé de suivre quelque chose et obtenir la sortie:

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

Essayez une option différente selon vos besoins

16
dinesh sharma

Devrait être un peu de maths:

(int)37.33168                => 37

37.33168 % 1 = 0.33168
0.33168 * 60 = 19.905        => 19

19.905 % 1 = 0.905    
0.905 * 60                   => 54

idem avec -122 (ajouter 360 si valeur négative)

EDIT: Peut-être y a-t-il une API que je ne connais pas.

Référez-vous à partir de: Comment trouver un degré à partir de la valeur de la latitude dans Android?

Convertissez les valeurs de latitude et de longitude (degrés) en doubles. Java

4
mshoaiblibra

Comme déjà mentionné, certaines manipulations de chaîne sont nécessaires. J'ai créé la classe d'assistance suivante, qui convertit l'emplacement au format DMS et permet de spécifier les décimales pour les secondes:

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;
    }
}
4
Martin

Voici une version de Kotlin, adaptée de la réponse de Martin Weber. Il définit également le bon hémisphère; N, S, W ou E

object LocationConverter {

    fun latitudeAsDMS(latitude: Double, decimalPlace: Int): String {
        val direction = if (latitude > 0) "N" else "S"
        var strLatitude = Location.convert(latitude.absoluteValue, Location.FORMAT_SECONDS)
        strLatitude = replaceDelimiters(strLatitude, decimalPlace)
        strLatitude += " $direction"
        return strLatitude
    }

    fun longitudeAsDMS(longitude: Double, decimalPlace: Int): String {
        val direction = if (longitude > 0) "W" else "E"
        var strLongitude = Location.convert(longitude.absoluteValue, Location.FORMAT_SECONDS)
        strLongitude = replaceDelimiters(strLongitude, decimalPlace)
        strLongitude += " $direction"
        return strLongitude
    }

    private fun replaceDelimiters(str: String, decimalPlace: Int): String {
        var str = str
        str = str.replaceFirst(":".toRegex(), "°")
        str = str.replaceFirst(":".toRegex(), "'")
        val pointIndex = str.indexOf(".")
        val endIndex = pointIndex + 1 + decimalPlace
        if (endIndex < str.length) {
            str = str.substring(0, endIndex)
        }
        str += "\""
        return str
    }
}
1
planetmik

Vous avez une coordonnée en degrés décimaux, ce format de représentation s'appelle "DEG"

Et vous voulez un DEG en DMS (Degrés, Minutes, Secondes) (par exemple 40 ° 42′51 ″ N),
conversion. 

Cette implémentation de code Java à http://en.wikipedia.org/wiki/Geographic_coordinate_conversion

si les valeurs des coordonnées DEG sont <0, il s'agit de l'ouest pour la longitude ou du sud pour la latitude.

0
AlexWien

Utilisez ceci

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) ;
}

}

0
abi