0

状态:一周左右后接受最佳可用答案并表示感谢。等待/邀请更多带有引用的答案

这件事很复杂。我非常感谢所有评论员,特别是 asciimo、Gabe Sechan、AlexWien。请在适当研究后投票和/或进一步回答。

塞纳里奥:

Location.getLatitude()in android返回具有低精度double

Api http://developer.android.com/reference/android/location/Location.html

例子:

Edit-2 开始

我只是尝试通过模拟器发送 GPS 坐标,并将 111.422006 自动转换为 111.422004999999998Double dlongi = loc.getLongitude(); String longi = dlati.toString(); System.out.println(longi);

Edit-2 结束

Edit-3 开始

我通过模拟器(实际上是通过 GPS 设备)将坐标发送为 111.422006,android API 将其接收为双精度值 111.42004999999998

编辑3结束

太晚了: BigDecimal 类已经太晚了,因为它已经给出了 ad/Double。

问题: 如果要求完全准确怎么办。

有什么方法可以高精度或以双打以外的其他形式获得它?

只是想分享并让其他人也注意到这一点。

要求: 在您确定用citation. 这将有助于社区。

编辑:

看起来普通 GPS 设备的 Gps 坐标是不是 100% 完全准确,例如接近 3 米,但看起来双精度进一步降低。这实际上是我的问题。

4

3 回答 3

2

您的帖子显示 111.422006 变为 111.422004999999,这是 0.00001 的差异,由于双重铸造而不会发生双重。

这清楚地表明,精度的降低来自模拟器输入和/或内部 GPS 处理,很可能是出于模拟目的(模拟器可以在需要时进行插值)

肯定不是由 double 类型引起的。

对于真正的GPS,即使android会截断或舍入小数点后6位,也不影响定位精度。gsp 位置的物理限制为 3m。当android会切掉那个数字时,位置可能会改变几厘米。但这可以放心地忽略,这是设备告诉的位置,这是最广为人知的事实。你无法改进。提高位数并不能提高 GPS 精度,您需要使用更好的 GpS 天线来提高精度。

更新:
这里以米为单位的坐标粒度与使用的纬度/经度位数相关:

这种情况是最坏的情况:赤道上从 (0.0,0.0) 到 (0.0, lon2) 的距离

lon2= 0.1, meters = 11131.94558870502
lon2= 0.01, meters = 1113.194558870502
lon2= 0.0010, meters = 111.3194558870502
lon2= 1.0E-4, meters = 11.131945588705022
lon2= 1.0E-5, meters = 1.1131945588705023
lon2= 1.0E-6, meters = 0.11131945588705022

所以 0.000001 是 11cm

您也可以自己计算:
地球周长(大约)= 40.000 公里
除以 360 度 = 111.111 公里 = 111111 米/度(确切地说是 111319 米)

1 digit  after comma: 0.1:   divide by  10=  11131.9 m  
2 digits after comma: 0.01:  divide by 100=  1113.19m  

等等,看上表。

如果您希望结果更正式:查看 asciimo 发布的链接:

十进制度坐标

于 2013-06-06T10:05:16.670 回答
2

请记住,3 米的纬度精度(对于非常好的消费类 GPS 接收器)只需要5 个小数位

于 2013-05-31T19:35:21.977 回答
0

双精度不是这里的问题。尝试这个:

System.out.println(111.422006);

输出将是:

111.422006

输入似乎以某种方式进行了处理,无论如何......所以有可能,使用真实的 GPS 数据,精度比您的测试建议的要好,希望......

于 2013-05-31T22:20:16.547 回答