在类似于 Google 位置记录的应用程序中检测“不太可能”的位置

Posted

技术标签:

【中文标题】在类似于 Google 位置记录的应用程序中检测“不太可能”的位置【英文标题】:Detecting "unlikely" locations in an application similar to Google Location History 【发布时间】:2015-07-03 12:13:09 【问题描述】:

我目前正在编写一个小型地理定位应用程序,与Google Location History 非常相似。 android 手机会定期将其位置发送到服务器,然后我可以在地图上显示它们。我使用 javascript API 3,它运行良好。不过……

如您所见,有些地方出了问题:有时位置非常不准确,可能是由于电话切换网络所致。我想摆脱那些“坏位置”,显示一条干净的路径,但我还没想好怎么做。

如何检测某个位置是否明显错误?

从人类的角度来看这是很明显的,不幸的是我的电脑还没有这样想。

一种解决方案是使用google.maps.geometry.spherical 中的函数computeHeading(from:LatLng, to:LatLng) 快​​速连续检测非常锐角并采取相应措施;但是,我真的不知道该怎么做,因为每次检查最后五个点似乎效率有点低……尤其是因为我有几千点要处理。

另一件事可能是估计行驶速度,并忽略涉及突然且不切实际的加速的点。

也许我可以检查该点是否在他的邻居定义的区域内。假设每个位置应该在前一个和后一个之间的某个位置似乎是合理的,如下例所示。

任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

所以我决定采用我想到的第三种方法:测试标记是否在由其他两个标记定义的圆圈内。基本几何,勾股定理。这是我的代码:

function isLikely(testedPos, pos1, pos2) 
    var hypothenuse = calcDistance(pos1, pos2);
    var side1 = calcDistance(testedPos, pos1);
    var side2 = calcDistance(testedPos, pos2);
    if (hypothenuse*hypothenuse*1.2 >= side1*side1 + side2*side2)
        return true;
    else
        return false;

calcDistance 只是google.maps.geometry.spherical.computeDistanceBetween() 的别名。因为我很懒。

效果很好!

【讨论】:

以上是关于在类似于 Google 位置记录的应用程序中检测“不太可能”的位置的主要内容,如果未能解决你的问题,请参考以下文章

Google API 从位置列表中检测离用户最近的位置

使用适用于 Mac 的 Google 工具箱记录到文件时记录文件翻转

使用Google App Engine GQL查找给定半径内的所有位置

Google 地图 (Android) 中的位置更新率

需要一个类似于 Yelp 和 Google Places 的良好商业搜索 API

复制记录以填补 Google BigQuery 中日期之间的空白