Improve coordinates formatting
This commit is contained in:
parent
3b408a1fb0
commit
698c1bb6b0
1 changed files with 38 additions and 28 deletions
|
@ -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();
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue