Back to project page advanced-tourist-map.
The source code is released under:
GNU General Public License
If you think the Android project advanced-tourist-map listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.
package org.muxe.advancedtouristmap; /*from w ww .j a v a 2 s . c om*/ import java.text.DecimalFormat; import org.mapsforge.android.maps.GeoPoint; import org.mapsforge.core.GeoCoordinate; import android.location.Location; import android.util.Log; public class Utility { private static final int TWO_MINUTES = 1000 * 60 * 2; /** * Converts a GeoCoordinate into a GeoPoint * @param gc the GeoCoordinate * @return a GeoPoint representing the GeoCoordinate */ public static GeoPoint geoCoordinateToGeoPoint(GeoCoordinate gc) { return new GeoPoint(gc.getLatitude(), gc.getLongitude()); } /** * Determines whether one Location reading is better than the current Location fix * * @param location * The new Location that you want to evaluate * @param currentBestLocation1 * The current Location fix, to which you want to compare the new one * @return boolean whether the location is better than the current best location */ public static boolean isBetterLocation(Location location, Location currentBestLocation1) { if (currentBestLocation1 == null) { // A new location is always better than no location return true; } // Check whether the new location fix is newer or older long timeDelta = location.getTime() - currentBestLocation1.getTime(); boolean isSignificantlyNewer = timeDelta > TWO_MINUTES; boolean isSignificantlyOlder = timeDelta < -TWO_MINUTES; boolean isNewer = timeDelta > 0; // If it's been more than two minutes since the current location, use the new location // because the user has likely moved if (isSignificantlyNewer) { return true; // If the new location is more than two minutes older, it must be worse } else if (isSignificantlyOlder) { return false; } // Check whether the new location fix is more or less accurate int accuracyDelta = (int) (location.getAccuracy() - currentBestLocation1.getAccuracy()); boolean isLessAccurate = accuracyDelta > 0; boolean isMoreAccurate = accuracyDelta < 0; boolean isSignificantlyLessAccurate = accuracyDelta > 200; // Check if the old and new location are from the same provider boolean isFromSameProvider = isSameProvider(location.getProvider(), currentBestLocation1.getProvider()); // Determine location quality using a combination of timeliness and accuracy if (isMoreAccurate) { return true; } else if (isNewer && !isLessAccurate) { return true; } else if (isNewer && !isSignificantlyLessAccurate && isFromSameProvider) { return true; } return false; } /** * Checks whether two providers are the same * * @param provider1 * First Provider Name * @param provider2 * Second Provider Name * @return boolean if the two providers are the same */ private static boolean isSameProvider(String provider1, String provider2) { if (provider1 == null) { return provider2 == null; } return provider1.equals(provider2); } public static String meterToReadableDistance(int meter) { if (meter >= 1000) { DecimalFormat df = new DecimalFormat("0.00"); return df.format((float) meter / 1000) + " km"; } return meter + " m"; } }