I’m a big proponent of going metric; I’ve never fully understood why we don’t just do it. Then again, I’d also like the entire world to be on UTC time. But since we insist on using our own bass-ackward units of measure, I needed an Android Location class that returned U.S. customary units instead of metric.
So, here goes…
import android.location.Location;
public class CLocation extends Location
{
private boolean bUseMetricUnits = false;
public CLocation(Location location)
{
this(location, true);
}
public CLocation(Location location, boolean bUseMetricUnits)
{
super(location);
this.bUseMetricUnits = bUseMetricUnits;
}
public boolean getUseMetricUnits()
{
return this.bUseMetricUnits;
}
public void setUseMetricUnits(boolean bUseMetricUnits)
{
this.bUseMetricUnits = bUseMetricUnits;
}
@Override
public float distanceTo(Location dest)
{
float nDistance = super.distanceTo(dest);
if (!this.getUseMetricUnits())
{
// Convert meters to feet
nDistance = nDistance * 3.28083989501312f;
}
return nDistance;
}
@Override
public float getAccuracy()
{
float nAccuracy = super.getAccuracy();
if (!this.getUseMetricUnits())
{
// Convert meters to feet
nAccuracy = nAccuracy * 3.28083989501312f;
}
return nAccuracy;
}
@Override
public double getAltitude()
{
double nAltitude = super.getAltitude();
if (!this.getUseMetricUnits())
{
// Convert meters to feet
nAltitude = nAltitude * 3.28083989501312d;
}
return nAltitude;
}
@Override
public float getSpeed()
{
float nSpeed = super.getSpeed();
if (!this.getUseMetricUnits())
{
// Convert meters/second to miles/hour
nSpeed = nSpeed * 2.2369362920544f;
}
return nSpeed;
}
}
This class really isn’t anything special, it just allows you to toggle which units you would like to use:
- U.S. Customary Units: feet and miles/hour
- Metric: meters and meters/second
Please, take it and make it better :)