在类似于 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 位置记录的应用程序中检测“不太可能”的位置的主要内容,如果未能解决你的问题,请参考以下文章
使用适用于 Mac 的 Google 工具箱记录到文件时记录文件翻转
使用Google App Engine GQL查找给定半径内的所有位置