diff --git a/OsmAnd-java/src/main/java/net/osmand/LocationConvert.java b/OsmAnd-java/src/main/java/net/osmand/LocationConvert.java index d7a4b32f22..5102498dea 100644 --- a/OsmAnd-java/src/main/java/net/osmand/LocationConvert.java +++ b/OsmAnd-java/src/main/java/net/osmand/LocationConvert.java @@ -16,6 +16,10 @@ public class LocationConvert { public static final int UTM_FORMAT = 3; public static final int OLC_FORMAT = 4; private static final char DELIM = ':'; + private static final char DELIMITER_DEGREES = '°'; + private static final char DELIMITER_MINUTES = '′'; + private static final char DELIMITER_SECONDS = '″'; + private static final char DELIMITER_SPACE = ' '; @@ -133,8 +137,12 @@ public class LocationConvert { } DecimalFormat df = new DecimalFormat("##0.00000", new DecimalFormatSymbols(Locale.US)); //$NON-NLS-1$ - coordinate = convertMinutesAndSeconds(coordinate, outputType, sb); - + if (outputType == FORMAT_MINUTES || outputType == FORMAT_SECONDS) { + coordinate = formatCoordinate(coordinate, sb, DELIM); + if (outputType == FORMAT_SECONDS) { + coordinate = formatCoordinate(coordinate, sb, DELIM); + } + } sb.append(df.format(coordinate)); return sb.toString(); } @@ -159,11 +167,7 @@ public class LocationConvert { latitude = -latitude; } - DecimalFormat df = new DecimalFormat("##0.00000", new DecimalFormatSymbols(Locale.US)); - latitude = convertMinutesAndSeconds(latitude, outputType, sb); - - sb.append(df.format(latitude)); - return sb.toString(); + return formatDegrees(latitude, outputType, sb); } public static String convertLongitude(double longitude, int outputType, boolean addCardinalDirection) { @@ -186,28 +190,34 @@ public class LocationConvert { longitude = -longitude; } - DecimalFormat df = new DecimalFormat("##0.00000", new DecimalFormatSymbols(Locale.US)); - longitude = convertMinutesAndSeconds(longitude, outputType, sb); - - sb.append(df.format(longitude)); - return sb.toString(); + return formatDegrees(longitude, outputType, sb); } - private static double convertMinutesAndSeconds(double coordinate, int outputType, StringBuilder sb) { - if (outputType == FORMAT_MINUTES || outputType == FORMAT_SECONDS) { - int degrees = (int) Math.floor(coordinate); - sb.append(degrees); - sb.append(DELIM); - coordinate -= degrees; - coordinate *= 60.0; - if (outputType == FORMAT_SECONDS) { - int minutes = (int) Math.floor(coordinate); - sb.append(minutes); - sb.append(DELIM); - coordinate -= minutes; - coordinate *= 60.0; - } - } + private static double formatCoordinate(double coordinate, StringBuilder sb, char delimiter) { + int deg = (int) Math.floor(coordinate); + sb.append(deg); + sb.append(delimiter); + coordinate -= deg; + coordinate *= 60.0; return coordinate; } -} + + private static String formatDegrees(double coordinate, int outputType, StringBuilder sb) { + if (outputType == FORMAT_DEGREES) { + sb.append(new DecimalFormat("##0.0000", new DecimalFormatSymbols(Locale.US)).format(coordinate)); + sb.append(DELIMITER_DEGREES); + } else if (outputType == FORMAT_MINUTES) { + coordinate = formatCoordinate(coordinate, sb, DELIMITER_DEGREES); + sb.append(DELIMITER_SPACE); + sb.append(new DecimalFormat("##0.00", new DecimalFormatSymbols(Locale.US)).format(coordinate)); + sb.append(DELIMITER_MINUTES); + } else if (outputType == FORMAT_SECONDS) { + coordinate = formatCoordinate(coordinate, sb, DELIMITER_DEGREES); + sb.append(DELIMITER_SPACE); + coordinate = formatCoordinate(coordinate, sb, DELIMITER_MINUTES); + sb.append(DELIMITER_SPACE); + formatCoordinate(coordinate, sb, DELIMITER_SECONDS); + } + return sb.toString(); + } +} \ No newline at end of file