add location formatting method.
This commit is contained in:
parent
35c4853957
commit
48a409da21
3 changed files with 62 additions and 53 deletions
|
@ -186,17 +186,9 @@ public class PointDescription {
|
|||
String latLonDeg;
|
||||
String latLonMin;
|
||||
String latLonSec;
|
||||
String utm;
|
||||
String olc;
|
||||
|
||||
UTMPoint pnt = new UTMPoint(new LatLonPoint(lat, lon));
|
||||
utm = pnt.zone_number + "" + pnt.zone_letter + " " + ((long) pnt.easting) + " " + ((long) pnt.northing);
|
||||
|
||||
try {
|
||||
olc = getLocationOlcName(lat, lon);
|
||||
} catch (RuntimeException e) {
|
||||
olc = "0, 0";
|
||||
}
|
||||
String utm = OsmAndFormatter.formatLocationCoordinates(lat, lon, OsmAndFormatter.FORMAT_UTM);
|
||||
String olc = OsmAndFormatter.formatLocationCoordinates(lat, lon, OsmAndFormatter.FORMAT_OLC);
|
||||
|
||||
try {
|
||||
latLonString = OsmAndFormatter.formatLocationCoordinates(lat, lon, OsmAndFormatter.FORMAT_DEGREES_SHORT);
|
||||
|
@ -237,7 +229,6 @@ public class PointDescription {
|
|||
} else if (f == PointDescription.FORMAT_SECONDS) {
|
||||
results.put(LOCATION_LIST_HEADER, latLonSec);
|
||||
}
|
||||
|
||||
return results;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,8 +1,12 @@
|
|||
package net.osmand.plus;
|
||||
|
||||
import static net.osmand.data.PointDescription.getLocationOlcName;
|
||||
|
||||
import android.content.Context;
|
||||
import android.text.format.DateUtils;
|
||||
|
||||
import com.jwetherell.openmap.common.LatLonPoint;
|
||||
import com.jwetherell.openmap.common.UTMPoint;
|
||||
import java.text.DecimalFormatSymbols;
|
||||
import net.osmand.data.Amenity;
|
||||
import net.osmand.data.City.CityType;
|
||||
|
@ -13,6 +17,7 @@ import net.osmand.osm.PoiType;
|
|||
import net.osmand.plus.OsmandSettings.AngularConstants;
|
||||
import net.osmand.plus.OsmandSettings.MetricsConstants;
|
||||
import net.osmand.plus.OsmandSettings.SpeedConstants;
|
||||
import net.osmand.plus.mapmarkers.CoordinateInputFormats.Format;
|
||||
import net.osmand.util.Algorithms;
|
||||
|
||||
import java.text.DateFormatSymbols;
|
||||
|
@ -35,6 +40,21 @@ public class OsmAndFormatter {
|
|||
private static final SimpleDateFormat SIMPLE_TIME_OF_DAY_FORMAT = new SimpleDateFormat("HH:mm", Locale.getDefault());
|
||||
private static final String[] localDaysStr = getLettersStringArray(DateFormatSymbols.getInstance().getShortWeekdays(), 3);
|
||||
|
||||
public static final int FORMAT_DEGREES_SHORT = 100;
|
||||
public static final int FORMAT_DEGREES = 101;
|
||||
public static final int FORMAT_MINUTES = 102;
|
||||
public static final int FORMAT_SECONDS = 103;
|
||||
public static final int FORMAT_UTM = 104;
|
||||
public static final int FORMAT_OLC = 105;
|
||||
private static final char DELIMITER_DEGREES = '°';
|
||||
private static final char DELIMITER_MINUTES = '′';
|
||||
private static final char DELIMITER_SECONDS = '″';
|
||||
|
||||
private static final char NORTH = 'N';
|
||||
private static final char SOUTH = 'S';
|
||||
private static final char WEST = 'W';
|
||||
private static final char EAST = 'E';
|
||||
|
||||
{
|
||||
fixed2.setMinimumFractionDigits(2);
|
||||
fixed1.setMinimumFractionDigits(1);
|
||||
|
@ -408,61 +428,52 @@ public class OsmAndFormatter {
|
|||
cal1.get(Calendar.YEAR) == cal2.get(Calendar.YEAR) &&
|
||||
cal1.get(Calendar.DAY_OF_YEAR) == cal2.get(Calendar.DAY_OF_YEAR));
|
||||
}
|
||||
|
||||
public static final int FORMAT_DEGREES_SHORT = 100;
|
||||
public static final int FORMAT_DEGREES = 101;
|
||||
public static final int FORMAT_MINUTES = 102;
|
||||
public static final int FORMAT_SECONDS = 103;
|
||||
public static final int FORMAT_UTM = 104;
|
||||
public static final int FORMAT_OLC = 105;
|
||||
private static final char DELIMITER_DEGREES = '°';
|
||||
private static final char DELIMITER_MINUTES = '′';
|
||||
private static final char DELIMITER_SECONDS = '″';
|
||||
|
||||
private static final char NORTH = 'N';
|
||||
private static final char SOUTH = 'S';
|
||||
private static final char WEST = 'W';
|
||||
private static final char EAST = 'E';
|
||||
|
||||
public static void main(String[] args) {
|
||||
System.out.println(formatLocationCoordinates(30.122345, -42.101245, FORMAT_DEGREES_SHORT));
|
||||
System.out.println(formatLocationCoordinates(30.122345, -42.101245, FORMAT_DEGREES));
|
||||
System.out.println(formatLocationCoordinates(-30.122345, 42.101245, FORMAT_MINUTES));
|
||||
System.out.println(formatLocationCoordinates(30.122345, -42.101245, FORMAT_SECONDS));
|
||||
}
|
||||
|
||||
public static String formatLocationCoordinates(double lat, double lon, int outputFormat) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
StringBuilder result = new StringBuilder();
|
||||
if (outputFormat == FORMAT_DEGREES_SHORT) {
|
||||
sb.append(formatCoordinate(lat, outputFormat)).append(" ").append(formatCoordinate(lon, outputFormat));
|
||||
result.append(formatCoordinate(lat, outputFormat)).append(" ").append(formatCoordinate(lon, outputFormat));
|
||||
} else if (outputFormat == FORMAT_DEGREES || outputFormat == FORMAT_MINUTES || outputFormat == FORMAT_SECONDS) {
|
||||
sb
|
||||
.append(formatCoordinate(lat, outputFormat))
|
||||
.append(" ")
|
||||
.append(lat > 0 ? NORTH : SOUTH)
|
||||
.append(", ").append(formatCoordinate(lon, outputFormat))
|
||||
.append(" ")
|
||||
result
|
||||
.append(formatCoordinate(lat, outputFormat)).append(" ")
|
||||
.append(lat > 0 ? NORTH : SOUTH).append(", ")
|
||||
.append(formatCoordinate(lon, outputFormat)).append(" ")
|
||||
.append(lon > 0 ? EAST : WEST);
|
||||
} else if (outputFormat == FORMAT_UTM) {
|
||||
UTMPoint pnt = new UTMPoint(new LatLonPoint(lat, lon));
|
||||
result
|
||||
.append(pnt.zone_number)
|
||||
.append(pnt.zone_letter).append(" ")
|
||||
.append((long) pnt.easting).append(" ")
|
||||
.append((long) pnt.northing);
|
||||
} else if (outputFormat == FORMAT_OLC) {
|
||||
|
||||
} else if (outputFormat == FORMAT_UTM) {
|
||||
|
||||
String r;
|
||||
try {
|
||||
r = getLocationOlcName(lat, lon);
|
||||
} catch (RuntimeException e) {
|
||||
r = "0, 0";
|
||||
}
|
||||
result.append(r);
|
||||
}
|
||||
return sb.toString();
|
||||
return result.toString();
|
||||
}
|
||||
|
||||
private static String formatCoordinate(double coordinate, int outputType) {
|
||||
|
||||
if (coordinate < -180.0 || coordinate > 180.0 || Double.isNaN(coordinate)) {
|
||||
throw new IllegalArgumentException("coordinate=" + coordinate); //$NON-NLS-1$
|
||||
return "Error. Wrong coordinates data!";
|
||||
}
|
||||
if ((outputType != FORMAT_DEGREES) && (outputType != FORMAT_MINUTES) && (outputType
|
||||
!= FORMAT_SECONDS) && (outputType != FORMAT_DEGREES_SHORT)) {
|
||||
throw new IllegalArgumentException("outputType=" + outputType); //$NON-NLS-1$
|
||||
return "Unknown Output Format!";
|
||||
}
|
||||
|
||||
DecimalFormat degDf = new DecimalFormat("##0.00000",new DecimalFormatSymbols(Locale.US));
|
||||
DecimalFormat minDf = new DecimalFormat("00.0000",new DecimalFormatSymbols(Locale.US));
|
||||
DecimalFormat secDf = new DecimalFormat("00.000",new DecimalFormatSymbols(Locale.US));
|
||||
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
// Handle negative values
|
||||
if (coordinate < 0) {
|
||||
if (outputType == FORMAT_DEGREES_SHORT) {
|
||||
sb.append('-');
|
||||
|
@ -470,9 +481,6 @@ public class OsmAndFormatter {
|
|||
coordinate = -coordinate;
|
||||
}
|
||||
|
||||
DecimalFormat degDf = new DecimalFormat("##0.00000",new DecimalFormatSymbols(Locale.US));
|
||||
DecimalFormat minDf = new DecimalFormat("00.0000",new DecimalFormatSymbols(Locale.US));
|
||||
DecimalFormat secDf = new DecimalFormat("00.000",new DecimalFormatSymbols(Locale.US));
|
||||
if (outputType == FORMAT_DEGREES_SHORT) {
|
||||
sb.append(degDf.format(coordinate));
|
||||
} else if (outputType == FORMAT_DEGREES) {
|
||||
|
|
|
@ -17,9 +17,11 @@ import android.support.v4.content.ContextCompat;
|
|||
import android.support.v4.graphics.drawable.DrawableCompat;
|
||||
import android.support.v7.view.ContextThemeWrapper;
|
||||
import android.text.ClipboardManager;
|
||||
import android.text.SpannableStringBuilder;
|
||||
import android.text.Spanned;
|
||||
import android.text.TextUtils;
|
||||
import android.text.style.ForegroundColorSpan;
|
||||
import android.text.util.Linkify;
|
||||
import android.util.TypedValue;
|
||||
import android.view.Gravity;
|
||||
import android.view.View;
|
||||
import android.view.View.OnClickListener;
|
||||
|
@ -681,7 +683,15 @@ public class MenuBuilder {
|
|||
LinearLayout llv = buildCollapsableContentView(mapActivity, true, true);
|
||||
for (final Map.Entry<Integer, String> line : locationData.entrySet()) {
|
||||
final TextViewEx button = buildButtonInCollapsableView(mapActivity, false, false);
|
||||
button.setText(line.getValue());
|
||||
if (line.getKey() == OsmAndFormatter.FORMAT_UTM || line.getKey() == OsmAndFormatter.FORMAT_OLC) {
|
||||
SpannableStringBuilder ssb = new SpannableStringBuilder();
|
||||
ssb.append(line.getKey() == OsmAndFormatter.FORMAT_UTM ? "UTM: " : "OLC: ");
|
||||
ssb.setSpan(new ForegroundColorSpan(app.getResources().getColor(R.color.text_color_secondary_light)), 0, 4, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
|
||||
ssb.append(line.getValue());
|
||||
button.setText(ssb);
|
||||
} else {
|
||||
button.setText(line.getValue());
|
||||
}
|
||||
button.setOnClickListener(new OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
|
|
Loading…
Reference in a new issue