我目前正在编写一个小型地理位置应用程序,与Google定位记录十分相似。Android手机会定期将其位置发送到服务器,然后我可以在地图上显示它们。我使用JavaScript API 3,并且效果很好。然而...
如您所见,出了点问题:有时由于电话交换网络,位置非常不准确。我想摆脱那些“不好的地方”,显示出一条干净的路,但我还没有想出怎么做。
如何确定某个位置是否明显为假?
从人的角度来看,这是很明显的,不幸的是我的计算机还没有这样认为。
一种解决方案可能是使用函数computeHeading(from:LatLng, to:LatLng)
从google.maps.geometry.spherical
快速连续检测非常尖锐的角度并采取相应的措施;但是,我真的不知道该怎么做,因为每次检查最后五个点似乎效率低下……尤其是因为我要处理几千个点。
另一件事可能是估计行驶速度,而忽略涉及突然和不切实际的加速度的点。
也许我可以检查该点是否在他的邻居定义的区域内。假设每个位置都应该位于前一个位置和后一个位置之间,这似乎是合理的,如下面的示例所示。
任何帮助,将不胜感激。
因此,我决定采用我想到的第三个方法:测试标记是否在由其他两个标记定义的圆内。基本几何,毕达哥拉斯定理。这是我的代码:
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()
。因为我很懒。
那很好!
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句