如何在Android中测量位置精确度?
有谁知道由getAccuracy()返回的准确性度量的正确解释? 例如,他们的计算是:
-
循环错误概率(意思是说,如果我理解正确,半径为50%置信圈)?
-
95%置信圈半径?
-
别的东西?
另外,实际使用的计算是多less,我们可以依靠多less? 它取决于位置估计的来源(GPS与networking)?
非常感谢您给我的任何build议。
要回答问题的一部分,数字是the radius of 68% confidence,
这意味着真实位置在以米为单位的测量点的半径内有68%的可能性。 假设错误是正态分布的(正如文献所说,这不一定是正确的),这意味着这是一个标准偏差。 例如,如果Location.getAccuracy
返回10,那么设备的真实位置在报告的坐标10米以内的可能性为68%。
http://developer.android.com/reference/android/location/Location.html#getAccuracy();
当你的电池寿命有限,build筑物内没有GPS信号时,以及在build筑物很多的地方等,这个位置是一件棘手的事情。但是Android使它变得容易得多。 当你要求一个位置时,你只需要指定你需要的精度。
如果你指定了一个例子*100 meters*
的accuracy
,Android会尝试获取位置,如果它可以获得70米精度的位置,它会返回给你,但是如果Android可以获得一个位置精确度高于100米,您的应用程序将等待,直到有一个这样的准确性的位置,将不会收到任何东西。
通常情况下,Android会首先获取Cell ID,然后将其发送给Google服务器,Google服务器会映射这些Cell ID,服务器将返回一个经度和纬度,精确度为1000米。 此时,Android也会尝试查看该地区的所有WiFinetworking,并向Google服务器发送有关这些networking的信息,如果可能的话,Google服务器将返回一个具有更高精确度的新位置,例如800米。
这时GPS将会开启。 GPS设备从冷启动至less需要30秒才能修复,所以如果能够修复,它将返回经度和纬度,但是仍然以精确度返回,这将是例如100米的最高可能性。 GPS工作的时间越长,您获得的精确度就越高。
重要提示:前两种方法需要互联网连接。 如果没有数据连接,您将不得不等待GPS,但是如果设备在build筑物内,您将可能找不到位置。
关于getAccuracy的文档说,它以米为单位返回精度。 我想这意味着如果你得到60的返回值,你就在一个围绕着提供的位置半径60米的圆圈内的某个地方。
就我可以快速浏览Android源代码而言,这取决于设备的硬件以及它select返回的值。
GpsLocationProvider.java
文件有一个reportLocation
方法 ,它被本地代码调用,并作为一个值传递精度。 因此,至less在框架中似乎没有计算。
qcom(我相信是Qualcomm的)git git repo 传递的是hor_unc_circular
参数的准确性,这似乎意味着至less该实现使用了CER。
如果像在文档中引用的那样,这是一个准确性,那么用户的实际位置在QUOTED_LOCATION +/- ACCURACY内。 所以准确度定义了一个你可以期待用户的半径。 什么文件没有说是如何确保你可以是用户在半径内 – 标准是95%,所以我想这个。
我得到你要求在概率上有一个明确的答案,但是我认为这里有两件事要考虑。 首先,由供应商决定他们想要把这个价值放在什么位置,所以根据供应商的不同,这可能只是一个错误的猜测。 其次,这可能有助于把这看作是一个潜在的四舍五入问题。 如果我想根据多个input来计算您的位置,并且其中一些input仅可用于一定数量的有效数字,则只能计算具有给定数量有效数字的位置。 这样想一下 – 什么是“关于”一个加上“大约”一百个。 可能大约有一百个,因为一百个的准确性可能小于1的大小。如果我突然说,答案是大约101,那么我最终可能意味着一定程度的准确性。 但是,如果我实际上指定了准确性,那么我可以说100加10减1加1减101是101加减10.我知道这通常是指95%的置信水平标准错误),但是,所有这一切都假设提供者理解统计数据,而不仅仅是猜测。