package com.bbn.openmap.util.coordFormatter; /** * Copyright NAVICON A/S * com@navicon.dk * * Formats a string to represent DMS for lat/lon information. */ import java.awt.geom.Point2D; import java.text.NumberFormat; public class DMSCoordInfoFormatter extends BasicCoordInfoFormatter { public DMSCoordInfoFormatter() {} public String createCoordinateInformationLine(int x, int y, Point2D llp, Object source) { if (llp != null) { return "Cursor Position (" + formatLatitude(llp.getY()) + ", " + formatLongitude(llp.getX()) + ")"; } else { return "Lat, Lon (" + "?" + ", " + "?" + ")"; } } public static String formatLatitude(double latitude) { return formatDegreesMinutes(latitude, 2, latitude < 0 ? "S" : "N"); } public static String formatLongitude(double longitude) { return formatDegreesMinutes(longitude, 3, longitude < 0 ? "W" : "E"); } public static String formatDegreesMinutes(double value, int integerDigits, String semisphere) { double valueAbs = Math.abs(value); int degrees = (int) valueAbs; double minutes = (valueAbs - degrees) * 60.0; NumberFormat nf = NumberFormat.getInstance(); nf.setGroupingUsed(false); nf.setMinimumIntegerDigits(integerDigits); nf.setMaximumIntegerDigits(integerDigits); String strDegrees = nf.format(degrees); nf.setMinimumIntegerDigits(2); nf.setMaximumIntegerDigits(2); nf.setMinimumFractionDigits(3); nf.setMaximumFractionDigits(3); String strMinutes = nf.format(minutes); return strDegrees + DEGREE_SIGN + strMinutes + "'" + semisphere; } }