[在我的Android应用程序中,我试图计算两个位置之间的距离,但是我得到的值在数以千万计的1100万以上。两点/位置之间的实际距离仅为1.1km-1.3Km。为什么会这样呢?即使。distanceTo方法返回的值以米为单位,1100万米仍然是一个非常大的值。
这是我的代码:
Location locationA = new Location("LocationA");
locationA.setLatitude(lat);
locationA.setLongitude(lang);
Location locationB = new Location("LocationB");
locationB.setLatitude(14.575224);
locationB.setLongitude(121.042475);
float distance = locationA.distanceTo(locationB);
BigDecimal _bdDistance;
_bdDistance = round(distance,2);
String _strDistance = _bdDistance.toString();
Toast.makeText(this, "distance between two locations = "+_strDistance, Toast.LENGTH_SHORT).show();
public static BigDecimal round(float d, int decimalPlace) {
BigDecimal bd = new BigDecimal(Float.toString(d));
bd = bd.setScale(decimalPlace, BigDecimal.ROUND_HALF_UP);
return bd;
}
您的近似是正确的。它返回以米为单位的距离。
您可以将其除以1000从而将其转换为KM;
float distance = locationA.distanceTo(locationB)/1000;
阅读有关distanceTo
here的更多信息。
在我的屏幕快照中,您可以看到,如果我们从双纬度经度获取位置,即小数点后6位,但实际上Location保留的纬度值一直到8位。主要区别在这里。因此,请勿将double用于存储纬度和经度。尝试使用其他方式