PageRenderTime 33ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

/src/com/androzic/util/StringFormatter.java

http://androzic.googlecode.com/
Java | 169 lines | 145 code | 22 blank | 2 comment | 22 complexity | 2ffd6bbbdfc88cc84a0e1ed312d3ed26 MD5 | raw file
  1. package com.androzic.util;
  2. import java.text.DecimalFormat;
  3. import java.text.DecimalFormatSymbols;
  4. import java.util.Locale;
  5. import com.jhlabs.map.GeodeticPosition;
  6. import com.jhlabs.map.ReferenceException;
  7. import com.jhlabs.map.UTMReference;
  8. public class StringFormatter
  9. {
  10. // http://code.google.com/p/android/issues/detail?id=2626
  11. final static DecimalFormat coordDegFormat = new DecimalFormat("#0.000000", new DecimalFormatSymbols(Locale.ENGLISH));
  12. final static DecimalFormat coordIntFormat = new DecimalFormat("00", new DecimalFormatSymbols(Locale.ENGLISH));
  13. final static DecimalFormat coordMinFormat = new DecimalFormat("00.0000", new DecimalFormatSymbols(Locale.ENGLISH));
  14. final static DecimalFormat coordSecFormat = new DecimalFormat("00.000", new DecimalFormatSymbols(Locale.ENGLISH));
  15. final static DecimalFormat timeFormat = new DecimalFormat("00");
  16. public static double distanceFactor = 1000.0;
  17. public static String distanceAbbr = "km";
  18. public static double distanceShortFactor = 1.0;
  19. public static String distanceShortAbbr = "m";
  20. public static final String distanceH(final double distance)
  21. {
  22. return distanceH(distance, 2000);
  23. }
  24. public static final String distanceH(double distance, int threshold)
  25. {
  26. String[] dist = distanceC(distance, threshold);
  27. return dist[0] + " " + dist[1];
  28. }
  29. public static final String distanceH(double distance, String format, int threshold)
  30. {
  31. String[] dist = distanceC(distance, format, threshold);
  32. return dist[0] + " " + dist[1];
  33. }
  34. public static final String[] distanceC(final double distance)
  35. {
  36. return distanceC(distance, 2000);
  37. }
  38. public static final String[] distanceC(final double distance, int threshold)
  39. {
  40. // return new String[] {String.valueOf(Math.round(dist)), distunit};
  41. return distanceC(distance, "%.0f", threshold);
  42. }
  43. public static final String[] distanceC(final double distance, final String format, int threshold)
  44. {
  45. double dist = distance * distanceShortFactor;
  46. String distunit = distanceShortAbbr;
  47. if (Math.abs(dist) > threshold)
  48. {
  49. dist = dist / distanceShortFactor / 1000 * distanceFactor;
  50. distunit = distanceAbbr;
  51. }
  52. return new String[] {String.format(format, dist), distunit};
  53. }
  54. public static final String coordinate(int format, double coordinate)
  55. {
  56. switch (format)
  57. {
  58. case 0:
  59. {
  60. return coordDegFormat.format(coordinate);
  61. }
  62. case 1:
  63. {
  64. final double sign = Math.signum(coordinate);
  65. final double coord = Math.abs(coordinate);
  66. final int degrees = (int) Math.floor(coord);
  67. final double minutes = (coord - degrees) * 60;
  68. return coordIntFormat.format(sign*degrees) + "° "
  69. + coordMinFormat.format(minutes) + "'";
  70. }
  71. case 2:
  72. {
  73. final double sign = Math.signum(coordinate);
  74. final double coord = Math.abs(coordinate);
  75. final int degrees = (int) Math.floor(coord);
  76. final double min = (coord - degrees) * 60;
  77. final int minutes = (int) Math.floor(min);
  78. final double seconds = (min - minutes) * 60;
  79. return coordIntFormat.format(sign*degrees) + "° "
  80. + coordIntFormat.format(minutes) + "' "
  81. + coordSecFormat.format(seconds) + "\"";
  82. }
  83. }
  84. return String.valueOf(coordinate);
  85. }
  86. public static final String coordinates(int format, String delimeter, double latitude, double longitude)
  87. {
  88. switch (format)
  89. {
  90. case 0:
  91. case 1:
  92. case 2:
  93. {
  94. return coordinate(format, latitude) + delimeter + coordinate(format, longitude);
  95. }
  96. case 3:
  97. {
  98. String coords;
  99. try
  100. {
  101. coords = UTMReference.toUTMRefString(new GeodeticPosition(latitude, longitude));
  102. return coords;
  103. }
  104. catch (ReferenceException ex)
  105. {
  106. }
  107. }
  108. }
  109. return String.valueOf(latitude) + delimeter + String.valueOf(longitude);
  110. }
  111. public static String bearingH(double bearing)
  112. {
  113. return String.format("%.0f", bearing)+"°";
  114. }
  115. public static final String bearingSimpleH(double bearing)
  116. {
  117. if (bearing < 22 || bearing >= 338) return "N";
  118. if (bearing < 67 && bearing >= 22) return "NE";
  119. if (bearing < 112 && bearing >= 67) return "E";
  120. if (bearing < 158 && bearing >= 112) return "SE";
  121. if (bearing < 202 && bearing >= 158) return "S";
  122. if (bearing < 248 && bearing >= 202) return "SW";
  123. if (bearing < 292 && bearing >= 248) return "W";
  124. if (bearing < 338 && bearing >= 292) return "NW";
  125. return ".";
  126. }
  127. public static final String timeH(int minutes)
  128. {
  129. String[] time = timeC(minutes);
  130. return time[0] + " " + time[1];
  131. }
  132. public static final String[] timeC(int minutes)
  133. {
  134. int hour = 0;
  135. int min = minutes;
  136. if (min <= 1)
  137. return new String[] {"< 1", "min"};
  138. if (min > 59)
  139. {
  140. hour = (int) Math.floor(min / 60);
  141. min = min - hour * 60;
  142. }
  143. if (hour > 23)
  144. return new String[] {"> 24", "h"};
  145. return new String[] {timeFormat.format(hour)+":"+timeFormat.format(min), "min"};
  146. }
  147. }