Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么Android location.distanceTo以百万为单位返回值?_Android_Android Maps V2_Android Maps - Fatal编程技术网

为什么Android location.distanceTo以百万为单位返回值?

为什么Android location.distanceTo以百万为单位返回值?,android,android-maps-v2,android-maps,Android,Android Maps V2,Android Maps,在我的Android应用程序中,我试图计算两个位置之间的距离,但我得到的值是以千万计的。两个点/位置之间的实际距离仅为1.1km-1.3Km。为什么会这样?即使.distanceTo方法返回的值以米为单位,11M米仍然是一个很大的值 这是我的密码: Location locationA = new Location("LocationA"); locationA.setLatitude(lat); locationA.setLongitude(la

在我的Android应用程序中,我试图计算两个位置之间的距离,但我得到的值是以千万计的。两个点/位置之间的实际距离仅为1.1km-1.3Km。为什么会这样?即使.distanceTo方法返回的值以米为单位,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;
    }

你的近似值是对的。它以米为单位返回距离

您可以将其除以1000,将其转换为KM,如下所示

float distance = locationA.distanceTo(locationB)/1000;

阅读更多关于距离的信息,您的近似值是正确的。它以米为单位返回距离

您可以将其除以1000,将其转换为KM,如下所示

float distance = locationA.distanceTo(locationB)/1000;

在我的屏幕截图中阅读更多关于距离的信息,您可以看到,如果我们从双纬度、经度(即小数点后6位)获取位置,但实际上位置将纬度值保留到8位。主要区别就在这里。所以不要用double来存储纬度和经度。在我的屏幕截图中,尝试使用另一种方法,您可以看到,如果我们从双纬度、经度(即小数点后6位)获取位置,但实际上位置将纬度值保留到8位。主要区别就在这里。所以不要用double来存储纬度和经度。试着用另一种方式

你在周围转悠的方式。应该工作得很好,如果你真的想要2个小数点的精度,就不要像你的四舍五入那样进行字符串转换。如果你真的想要2个十进制精度,就不用字符串转换,就像我在问题中写的,先生,它返回1100万(11000000)米,而距离只有1.1公里。即使我将其除以(1000),该值仍然非常大(11000km)。请给我您传递的位置A的纬度和经度。噢,我感谢您询问位置A参数。参数的位置由一个方法提供,在该方法中,我发现我实际上是在传递经度参数上的纬度值,而不是经度值。哈哈,不用担心,很高兴您找到了它。:)就像我在问题中写的,先生,当它只有1.1公里远时,它正在返回1100万(11000000)米。即使我将其除以(1000),该值仍然非常大(11000km)。请给我您传递的位置A的纬度和经度。噢,我感谢您询问位置A参数。参数的位置由一个方法提供,在该方法中,我发现我实际上是在传递经度参数上的纬度值,而不是经度值。哈哈,不用担心,很高兴您找到了它。:)你忘了截图了。然而,对于精确到毫米以内的位置,双精度相机有足够的精度;单精度浮点足够精确到一米左右。你忘了截图了。然而,对于精确到毫米以内的位置,双精度相机有足够的精度;单精度浮点数足以达到接近一米的精度。