我正在创建一个应用程序,在我想出这个之前,我已经完成了所有事情。我已经阅读了很多关于 GPS 和网络位置的信息,但我仍然有点困惑。我的应用程序将每隔 X 分钟在后台启动一次(从 0 到 120 分钟,具体取决于用户),并将获取当前位置(我仍然不知道是 GPS 还是网络)。我的目标是获得相对较好的电池,但我需要至少 100 米(350 英尺)的精度,任何 5-100 米的精度都是完美的。此外,如果无法提高精度,则放弃测量并再等待 X 分钟。有什么建议么?
2 回答
查找 GPS 定位的 DOP(精度稀释)值:它会根据用于计算位置的 GPS 卫星的数量告诉您位置的精确度。顺便说一句,用于计算位置的卫星数量很重要。
因此,一旦您的应用程序启动,轮询 GPS 以获取位置,直到 DOP 值低于给定阈值(3.0 的 DOP 非常精确,大约 20 米)。如果您在指定的时间内没有得到这样的值,则使用您收到的最佳位置。
几乎所有 GPS 芯片现在都使用 A-GPS,尤其是在 android 上,因此您可以很快得到修复(不到 30 秒)。如果您的 A-GPS 信息已过期(通过 Internet 连接下载 A-GPS 文件),您的第一次修复将需要更长的时间:当 GPS 不知道它在哪里时,最多可能需要 6 分钟才能获得可用的修复位于。
所以要尽量减少电池使用量:等待第一次修复。如果 6 分钟内没有修复,请关闭应用程序,因为您将没有任何位置。完成第一次修复后,轮询 GPS 2 或 3 分钟。如果 DOP 低于阈值(3.0 是一个不错的猜测,但请自己尝试),停止轮询。如果 DOP 不低于阈值,则使用具有最低 DOP 的位置。
请注意,您等待的时间越长,定位的精度就越高,并且 DOP 取决于所有可见卫星的位置,有时可见卫星不够多,或者它们没有以最佳方式放置以获得精确位置。
如果 DOP 不可用(我不知道 Android Location API 的细节),用于计算位置的卫星数量可能是不精确但仍然有用的信息(小于 3,放弃位置,3 很糟糕, 超过 4 是平均的,10 是相当好的)。
在此处阅读有关 DOP的更多信息。在此处阅读有关 A-GPS 的更多信息,并在此处阅读有关 GPS 的一般信息。
of course android is able to locate your device without any GPS signal by using informations from the GSM network or surrounding Wifi networks, but then i can't tell you how to know how precise your position is.
The simplest thing would be to use the Location.getAccuracy()
method. On interpreting the result see: How is location accuracy measured in Android?