为什么 Android location.distanceTo return 值以百万为单位?
Why does Android location.distanceTo return values in Millions?
在我的 Android 应用程序中,我试图计算两个位置之间的距离,但我得到的值是数千万 1100 万+。两者之间的实际距离point/location只有1.1km - 1.3Km。为什么会这样?即使 .distanceTo 方法 returns 的值以米为单位,11M 米仍然是一个很大的值。
这是我的代码:
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;
}
你的近似是正确的。它 returns 以米为单位的距离。
像这样除以1000就可以换算成KM了;
float distance = locationA.distanceTo(locationB)/1000;
详细了解 distanceTo
here。
在我的屏幕截图中,您可以看到,如果我们从双纬度、经度(即小数点后 6 位)获取位置,但实际上位置将纬度值保持到 8 位。主要区别就在这里。所以不要使用 double 来存储纬度、经度。换个方式试试
在我的 Android 应用程序中,我试图计算两个位置之间的距离,但我得到的值是数千万 1100 万+。两者之间的实际距离point/location只有1.1km - 1.3Km。为什么会这样?即使 .distanceTo 方法 returns 的值以米为单位,11M 米仍然是一个很大的值。
这是我的代码:
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;
}
你的近似是正确的。它 returns 以米为单位的距离。
像这样除以1000就可以换算成KM了;
float distance = locationA.distanceTo(locationB)/1000;
详细了解 distanceTo
here。
在我的屏幕截图中,您可以看到,如果我们从双纬度、经度(即小数点后 6 位)获取位置,但实际上位置将纬度值保持到 8 位。主要区别就在这里。所以不要使用 double 来存储纬度、经度。换个方式试试