【问题标题】:Android: various questions about GPSAndroid:关于GPS的各种问题
【发布时间】:2011-02-06 07:17:33
【问题描述】:

我正在编写我的第一个基于位置的 Android 应用程序,但对一些 GPS 服务 API 感到困惑。以下是我的一些问题:

1) 为了获取我的当前位置,我在一个活动的 onCreate() 方法中调用了 requestLocationUpdates() 并带有一个侦听器。但是当另一个活动开始并且当前活动不可见时会发生什么? GPS位置更新会停止吗?如果是这样,我如何在活动切换后保持它?

2) Location.getSpeed() 的准确性如何?它是如何计算的?它可以区分骑自行车和步行吗?

3) 并不是关于 android 的问题。如何计算距离我当前位置 100m 的位置的坐标?

4)要停止GPS,我只需要删除所有已注册到locationmanager的监听器?

非常感谢!

【问题讨论】:

    标签: android gps


    【解决方案1】:

    这不会是一个详尽的答案,因为我没有任何 Android 开发经验,但我只是想就您的 GPS 问题添加我的想法:

    问题 2: 通常在 GPS 硬件中计算速度,只需将距离的变化除以时间的变化。(见下面的 cmets)速度通常是只要有 GPS 覆盖,就相当准确,而且您绝对应该能够分辨出有人是步行还是骑自行车。您甚至应该能够分辨正常步行(6 公里/小时)和慢跑(12 公里/小时)。

    问题 3: 在距离当前位置 100m 处有无数个位置。只有添加方位角,才能得出目标点。公式如下(Source):

    lat2 = asin(sin(lat1)*cos(d/R) + cos(lat1)*sin( d/R)*cos(θ))
    lon2 = lon1 + atan2(sin(θ)*sin(d/R)*cos(lat1), cos(d /R)-sin(lat1)*sin(lat2))

    d/R 是角距离(以弧度为单位),其中 d 是经过的距离,R 是地球的半径

    您可能想查看下面的 Stack Overflow 帖子,了解上述的 JavaScript 实现,我认为移植应该不难:

    【讨论】:

    • 实际上,GPS 接收器直接测量速度,而不是随时间变化的距离,因此速度比您对位置精度的预期准确得多。
    • @Andrew:但在内部,它仍然必须是随时间变化的距离,至少对于没有加速度计或其他技术的消费类 GPS 接收器而言。
    • 不,不是,这就是我要说的:接收器可以直接从无线电信号的相位变化中获得速度,作为位置计算的一部分;实际上,您必须知道获得位置的速度,而不是相反。
    • @Andrew:那么,接收器在完全静止的情况下,如何从冷启动中获取位置?
    • @Daniel:接收器以高精度知道卫星发射器使用的频率。通过比较已知和观察到的(多普勒频移)频率,接收器为视野中的每颗卫星计算 PRR(伪距离速率)值,并将其用于位置和速度计算。
    【解决方案2】:

    3) 并不是关于 android 的问题。如何计算距离我当前位置 100m 的位置的坐标?

    不是您问题的真正答案,但它可能对您可能尝试解决的问题有用:http://en.wikipedia.org/wiki/Geohash

    【讨论】:

    • 谢谢,非常有趣的哈希。
    【解决方案3】:

    对于希望在 Android 中构建一个测量速度的 GPS 应用程序的人来说,这可能值得一试...http://code.google.com/p/krvarma-android-samples/source/browse/#svn%2Ftrunk%2FSpeedDemo%253Fstate%253Dclosed

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-16
      • 1970-01-01
      • 1970-01-01
      • 2013-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多