如何执行地理定位以获取尽可能精确的数据?

时间:2019-07-10 13:39:52

标签: android geolocation gps altitude

我们正在react-native中开发一个多平台(android和ios)应用程序,该应用程序主要处理地理位置数据,因此它主要取决于数据的准确性和精度。例如,应用程序每5秒钟(即10分钟)累积(读取并保存)用户的地理位置数据(称为跟踪)。因此,在跟踪过程中,大约保存了200个测量值。稍后,我们将根据跟踪过程中积累的数据执行不同的计算,并将结果可视化。

在iphone上,以几乎相同的高度物理(几乎)高度测量的数据的高度图具有相当的线性/平滑特征,而在android上,则倾向于有+ -5米的峰值。假设我们要测量轨道上升高的总米,从而计算后续测量之间的差异之和。现在想象一下,上述不精确度对结果有多大影响-每5秒可能会有5米的高度变化。尽管从物理上讲您的总海拔是+ -0米,但计算出的总海拔可能会大不相同。

因此,为消除错误,对于我们来说,基本上有两种方法:

  • 使测量更加准确和精确(这很自然)
  • 执行某种近似并相应地调整测量值(这很麻烦)

第一种方法听起来要好得多,但我们知道特定设备的硬件限制-我们根本无法使用我们的软件修复不正确的硬件。问题是,即使在同一设备上,其他商业应用程序(即Runtastic)也可以“更好地”执行测量(甚至离线)。那让我考虑第二种(近似)方法。这种方式很容易破解,尽管在很多情况下可以带来漂亮的结果,但我们认为(但无法证明)没有这样的预言近似,它永远也不会“破坏”太多数据。

因此,我们的问题是:

  1. 有什么技术可以使Android上的每次海拔高度测量尽可能精确?哪些工具可以帮助实现这一目标,我们应该如何使用它们来获得最佳体验?我们可以想到:
    • gps高度
    • nmea高度
    • 气压计
    • 在线API可根据纬度和经度获取高度
  2. 是否值得对累积数据进行某种近似?如果是这样,我们应该考虑哪些方面(甚至更好的主意)?这种技术常见吗?
  3. 我们有没有提到其他解决方案?

谢谢!

2 个答案:

答案 0 :(得分:0)

  1. GPS高度是最好的。但这取决于gps芯片。有一些具有较高的准确性(高成本)。大多数手机GPS也在网上使用以获取数据(为了获得良好的热启动)

  2. 要平滑GPS数据(或其他任何数据),可以使用卡尔曼滤波器。它复杂而沉重。它可以保证结果并很好地避免误导数据。

    您可以忽略基于以前的数据包的误导性数据包(均值过滤器)-简单,但应进行珍贵的编码

注意:我没有使用气压计。我没有给出答案。祝你好运

答案 1 :(得分:0)

如果您有气压计,那么它的高度精度可能比手机质量gps更好。这就是为什么高端自行车计算机和GPS追踪手表中都装有气压计的原因。如果您对相对海拔差异而不是实际实际海拔高度感兴趣,则尤其如此。要使用气压计获得良好的实际海拔,您需要一些明智的校准方案,并注意天气随时间的影响。

无论您以何种高度的数据来源,都应该对数据进行某种形式的后处理,以获取明智的信息。处理将取决于您的情况和您认为重要的内容。

要获得一条轨道的总爬升量,您需要考虑3种情况。简单的情况是,在一个一致的山丘上向上或向下移动很简单,您想要获得正确的高度差值,并且可以通过一张好的地图轻松地进行检查。在另一端,沿着完全平坦的路线,您想要再次零爬升,既容易又容易检查,但使用典型硬件却不那么容易。在中间,起伏的地形很难检查,尽管对于用户而言可能更有趣。获得这种精确度是某种与完全平坦的情况之间的权衡取舍。我在我的应用程序中有执行此操作的代码,通过过滤,我知道整个平面将在一个小时内超过20-30m的上升时间。每次起伏,起伏的情况将少于1m。考虑到气压式系统的已知局限性,单个大山丘通常相当准确。仅基于Gps的效果不佳。通常,对于基于gps的系统,返回在线查找方法更为一致,但这取决于查找数据的质量和地形的类型。