Android Как преобразовать долготу широты в формат градуса

Я хочу преобразовать широту 40.7127837, longitude -74.0059413 и в следующий формат

N 40 ° 42'46,0218 "W 74 ° 0'21,3876"

Каков наилучший способ сделать это?

Я пробовал такие методы, как location.FORMAT_DEGREES, location.FORMAT_MINUTES и location.FORMAT_SECONDS, но я не уверен, как их преобразовать в нужный формат. Благодарю.

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

Метод Location.convert() который вы используете, дает очень хорошие результаты и хорошо реализован и протестирован. Вам просто нужно отформатировать вывод в соответствии с вашими потребностями:

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

Когда вы вызываете этот метод с вашими входными координатами:

 String locationString = convert(40.7127837, -74.0059413); 

Вы получите этот результат:

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

Если вы столкнулись с проблемами со встроенными методами, вы всегда можете создать свой собственный метод:

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