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