我目前正在编写一个小型地理定位应用程序,与 Google Location History 非常相似. Android 手机定期将其位置发送到服务器,然后我可以在 map 上显示它们。我使用 JavaScript API 3,它运行良好。然而……
如您所见,出现了问题:有时位置非常不准确,可能是由于电话交换网络。我想摆脱那些“坏位置”,以显示一条干净的路径,但我还没有想出该怎么做。
如何检测位置是否明显错误?
从人类的 Angular 来看这是很明显的,不幸的是我的计算机还没有那样想。
一种解决方案是使用
google.maps.geometry.spherical
中的函数computeHeading(from:LatLng, to:LatLng)
来检测非常锐利的情况 Angular 快速连续并相应地采取行动;然而,我真的不知道我应该怎么做,因为每次检查最后五个点似乎有点低效......特别是因为我有几千个点要处理。另一件事可能是估计行驶速度,并忽略涉及突然和不切实际的加速的点。
也许我可以检查该点是否在他的邻居定义的区域内。假设每个位置都应该介于前一个和后一个之间,这似乎是合理的,如下例所示。
如有任何帮助,我们将不胜感激。
最佳答案
所以我决定采用我想到的第三种方法:测试标记是否在由另外两个标记定义的圆内。基础几何,勾股定理。这是我的代码:
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()
的别名。因为我很懒。
效果很好!
关于javascript - 在类似于 Google Location History 的应用程序中检测 "unlikely"位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31206599/