2016-07-24 30 views
6

Ich möchte Breite konvertieren 40,7127837, Länge -74,0059413 und dem folgenden FormatAndroid Wie Breite Länge in Grad-Format konvertieren

N 40 ° 42'46.0218" W 74 ° 0'21.3876"

Was ist der beste Weg, das zu tun?

Ich versuchte Methoden wie location.FORMAT_DEGREES, location.FORMAT_MINUTES und location.FORMAT_SECONDS, aber ich bin mir nicht sicher, wie Sie sie in das richtige Format konvertieren. Vielen Dank.

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

Antwort

9

Die Location.convert() Methode, die Sie verwenden, gibt sehr gute Ergebnisse und ist gut umgesetzt und getestet . Sie müssen nur die Ausgabe zu formatieren an Ihre Bedürfnisse anpassen:

private String convert(double latitude, double longitude) { 
    StringBuilder builder = new StringBuilder(); 

    if (latitude < 0) { 
     builder.append("S "); 
    } else { 
     builder.append("N "); 
    } 

    String latitudeDegrees = Location.convert(Math.abs(latitude), Location.FORMAT_SECONDS); 
    String[] latitudeSplit = latitudeDegrees.split(":"); 
    builder.append(latitudeSplit[0]); 
    builder.append("°"); 
    builder.append(latitudeSplit[1]); 
    builder.append("'"); 
    builder.append(latitudeSplit[2]); 
    builder.append("\""); 

    builder.append(" "); 

    if (longitude < 0) { 
     builder.append("W "); 
    } else { 
     builder.append("E "); 
    } 

    String longitudeDegrees = Location.convert(Math.abs(longitude), Location.FORMAT_SECONDS); 
    String[] longitudeSplit = longitudeDegrees.split(":"); 
    builder.append(longitudeSplit[0]); 
    builder.append("°"); 
    builder.append(longitudeSplit[1]); 
    builder.append("'"); 
    builder.append(longitudeSplit[2]); 
    builder.append("\""); 

    return builder.toString(); 
} 

Wenn Sie diese Methode mit Ihrer Eingabe rufen Koordinaten:

String locationString = convert(40.7127837, -74.0059413); 

Sie diese Ausgabe erhalten:

N 40°42'46.02132" W 74°0'21.38868" 
+0

danke, es funktioniert super. – Julia

2

Wenn Sie Probleme mit den eingebauten Methoden konfrontiert, können Sie immer Ihre eigene Methode erstellen:

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

Warum haben Sie haben die Implementierung von 'try ... catch' umgeben? Es könnte nicht zu einem Gerät durch Null oder etwas in der Art kommen, so dass ich denke, der catch-Block wird nie ausgeführt. – Cilenco