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

Javascript “检测”;“不太可能”;类似于Google位置历史记录的应用程序中的位置,javascript,google-maps,google-maps-api-3,geolocation,Javascript,Google Maps,Google Maps Api 3,Geolocation,我目前正在编写一个小的地理定位应用程序,非常类似于。安卓手机定期向服务器发送位置信息,然后我可以在地图上显示它们。我使用JavaScriptAPI3,它工作得很好。然而 正如你所看到的,有些地方是错误的:有时位置是非常不准确的,可能是由于电话交换网络。我想摆脱那些“不好的位置”,以显示一个干净的路径,但我还没有想到如何做 如何检测位置是否明显错误? 从人类的角度来看,这是很明显的,不幸的是我的电脑还没有这样想 一种解决方案是使用函数computeHeading(from:LatLng,to:

我目前正在编写一个小的地理定位应用程序,非常类似于。安卓手机定期向服务器发送位置信息,然后我可以在地图上显示它们。我使用JavaScriptAPI3,它工作得很好。然而

正如你所看到的,有些地方是错误的:有时位置是非常不准确的,可能是由于电话交换网络。我想摆脱那些“不好的位置”,以显示一个干净的路径,但我还没有想到如何做

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

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

  • 一种解决方案是使用函数
    computeHeading(from:LatLng,to:LatLng)
    from
    google.maps.geometry.sphere
    快速连续检测非常尖锐的角度并相应地采取行动;然而,我真的不知道我应该怎么做,因为每次检查最后五个点似乎效率有点低。。。特别是因为我有几千点要处理

  • 另一件事可能是估计行驶速度,忽略涉及突然和不真实加速度的点

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


任何帮助都将不胜感激。

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

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.ComputedDistanceBeween()的别名。
。因为我很懒

那很好用