0

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

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

所以,要消除错误,对我们来说,基本上有两种方法:

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

第一种方法听起来好多了,但我们知道特定设备的硬件限制——我们根本无法用我们的软件修复不准确的硬件。问题是,即使在同一设备上,其他商业应用程序(即 Runtastic)也能“更好地”执行测量(甚至离线)。这让我想到了第二种(近似)方式。这种方法相当笨拙,尽管在许多情况下它可以产生好看的结果,但我们认为(但不能证明)没有这样一个绝对不会“过多”破坏数据的近似值。

所以,我们的问题是:

  1. 有哪些技术可以使每个高度测量在 android 上尽可能准确和精确?哪些工具可以用来实现这一目标,我们应该如何使用它们来获得最佳体验?我们可以想到:
    • 全球定位系统高度
    • 海拔高度
    • 晴雨表
    • 根据经纬度获取海拔高度的在线API
  2. 对累积的数据应用某种近似值是否值得?如果是这样,我们应该考虑哪些方面(甚至更好的想法)?这种技术普遍吗?
  3. 有没有我们没有提到的不同解决方案?

提前致谢!

4

2 回答 2

0
  1. GPS高度是最好的。但这取决于gps芯片。有一些高精度(高成本)。大多数手机 GPS 也使用在线获取数据(为了获得良好的热启动)

  2. 要平滑 GPS 数据(或任何其他数据),您可以使用卡尔曼滤波器。它复杂而沉重。既能保证结果,又能很好地避免误导数据。
    或者
    ,您可以忽略基于先前数据包的误导性数据包(均值过滤器)- 简单,但应谨慎编码

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

于 2019-07-18T22:04:27.957 回答
0

如果你有一个气压计,那么它对于高度的准确性可能比你使用手机质量的 gps 得到的要好得多。这就是为什么高端自行车电脑和 GPS 跟踪手表中装有气压计的原因。如果您对相对高度差异而不是实际的实际高度感兴趣,则尤其如此。要使用气压计获得良好的实际高度,您需要一些合理的校准方案,并注意天气随时间的影响。

无论您的海拔数据来源是什么,您都应该期望对数据进行某种形式的后处理以获得合理的结果。需要进行什么处理取决于您的情况以及您认为重要的内容。

要在轨道上完全爬升,您需要考虑 3 个案例。简单的情况很简单,就是在一个一致的小山上上下,你想得到正确的高度差值,这很容易用一张好的地图检查。在另一端沿着一条完全平坦的路线前进,您希望再次获得零爬升,这很好且易于检查,但使用典型的硬件并不容易实现。在中间越过起伏的地形更难检查,尽管对用户来说可能是更有趣的情况。得到这个准确是对完全平坦的情况的某种形式的权衡。我在我的应用程序中有执行此操作的代码,并且通过过滤,我知道完全平坦的地方会在一个小时内爬升 20-30 米。对于每个起伏,起伏的情况下将计数约 1m。鉴于气压类型系统的已知限制,单个大山通常非常准确。仅基于 Gps 并没有那么好。对于基于 gps 的系统,通常返回在线查找方法更为一致,但这取决于查找数据的质量和地形类型。

于 2019-08-07T11:19:49.087 回答