package net.osmand; import java.text.MessageFormat; import net.osmand.data.Amenity; import net.osmand.data.AmenityType; import net.osmand.plus.OsmandSettings; import net.osmand.plus.R; import net.osmand.plus.OsmandSettings.MetricsConstants; import android.content.Context; public class OsmAndFormatter { private final static float METERS_IN_KILOMETER = 1000f; private final static float METERS_IN_MILE = 1609.344f; // 1609.344 private final static float YARDS_IN_METER = 1.0936f; private final static float FOOTS_IN_METER = YARDS_IN_METER * 3f; public static String getFormattedDistance(int meters, Context ctx) { MetricsConstants mc = OsmandSettings.getDefaultMetricConstants(ctx); int mainUnitStr; float mainUnitInMeters; if (mc == MetricsConstants.KILOMETERS_AND_METERS) { mainUnitStr = R.string.km; mainUnitInMeters = METERS_IN_KILOMETER; } else { mainUnitStr = R.string.mile; mainUnitInMeters = METERS_IN_MILE; } if (meters >= 100 * mainUnitInMeters) { return meters / mainUnitInMeters + " " + ctx.getString(mainUnitStr); //$NON-NLS-1$ } else if (meters > 1.5f * mainUnitInMeters) { return MessageFormat.format("{0,number,#.#} " + ctx.getString(mainUnitStr), ((float) meters) / mainUnitInMeters); //$NON-NLS-1$ } else if (meters > 0.9f * mainUnitInMeters) { return MessageFormat.format("{0,number,#.##} " + ctx.getString(mainUnitStr), ((float) meters) / mainUnitInMeters); //$NON-NLS-1$ } else { if (mc == MetricsConstants.KILOMETERS_AND_METERS) { return meters + " " + ctx.getString(R.string.m); //$NON-NLS-1$ } else if (mc == MetricsConstants.MILES_AND_YARDS) { int yards = (int) (meters * YARDS_IN_METER); return yards + " " + ctx.getString(R.string.yard); //$NON-NLS-1$ } else if(mc == MetricsConstants.MILES_AND_FOOTS) { int foots = (int) (meters * FOOTS_IN_METER); return foots + " " + ctx.getString(R.string.foot); //$NON-NLS-1$ } return meters + " " + ctx.getString(R.string.m); //$NON-NLS-1$ } } public static String getFormattedSpeed(float metersperseconds, Context ctx) { MetricsConstants mc = OsmandSettings.getDefaultMetricConstants(ctx); float kmh = metersperseconds * 3.6f; if(mc == MetricsConstants.KILOMETERS_AND_METERS){ return ((int) kmh) + ctx.getString(R.string.km_h); } else { return ((int) (kmh * METERS_IN_KILOMETER / METERS_IN_MILE)) + ctx.getString(R.string.mile_per_hour); } } public static String toPublicString(AmenityType t, Context ctx) { switch (t) { case SUSTENANCE: return ctx.getString(R.string.amenity_type_sustenance); case EDUCATION: return ctx.getString(R.string.amenity_type_education); case TRANSPORTATION: return ctx.getString(R.string.amenity_type_transportation); case FINANCE: return ctx.getString(R.string.amenity_type_finance); case HEALTHCARE: return ctx.getString(R.string.amenity_type_healthcare); case ENTERTAINMENT: return ctx.getString(R.string.amenity_type_entertainment); case TOURISM: return ctx.getString(R.string.amenity_type_tourism); case HISTORIC: return ctx.getString(R.string.amenity_type_historic); case NATURAL: return ctx.getString(R.string.amenity_type_natural); case SHOP: return ctx.getString(R.string.amenity_type_shop); case LEISURE: return ctx.getString(R.string.amenity_type_leisure); case SPORT: return ctx.getString(R.string.amenity_type_sport); case BARRIER: return ctx.getString(R.string.amenity_type_barrier); case LANDUSE: return ctx.getString(R.string.amenity_type_landuse); case MAN_MADE: return ctx.getString(R.string.amenity_type_manmade); case OFFICE: return ctx.getString(R.string.amenity_type_office); case EMERGENCY: return ctx.getString(R.string.amenity_type_emergency); case MILITARY: return ctx.getString(R.string.amenity_type_military); case ADMINISTRATIVE: return ctx.getString(R.string.amenity_type_administrative); case GEOCACHE: return ctx.getString(R.string.amenity_type_geocache); case OTHER: return ctx.getString(R.string.amenity_type_other); } return ""; } public static String getPoiSimpleFormat(Amenity amenity, Context ctx, boolean en){ return toPublicString(amenity.getType(), ctx) + " : " + getPoiStringWithoutType(amenity, en); //$NON-NLS-1$ } public static String getPoiStringWithoutType(Amenity amenity, boolean en){ String n = amenity.getName(en); if(n.length() == 0){ return amenity.getSubType(); } return amenity.getSubType() + " " + n; //$NON-NLS-1$ } }