我正在开发一款使用GPS的Android应用。我想知道如果“新位置”(点C)离线段AB太远,是否有可能丢弃GPS位置数据的方法。我正在使用找到on Wikipedia的Point to Line Segment公式。
到目前为止,当我尝试使用纬度和经度坐标时,我的代码是返回NaN。
private void verifyGPSLocation(Location start, Location end, Location current){
final double errorValue = 0.0000216;
double normalLength = Math.hypot(end.getLatitude() - start.getLatitude(), end.getLongitude() - start.getLongitude());
double ret = Math.abs(((current.getLatitude() - start.getLatitude()) * (end.getLongitude() - start.getLongitude()) - (end.getLatitude() - start.getLatitude()))/normalLength );
Log.e("Coooooord", normalLength+"--"+ret);
}
这是我的第一篇文章,如果我没有正确完成或有足够的信息,请告诉我。谢谢你的帮助,我喜欢这个网站!
答案 0 :(得分:2)
您的距离算法错误。它没有说明地球的曲率 - 经度在较高纬度处更接近,而在较低纬度处更接近。使用Location.distanceTo函数。
答案 1 :(得分:2)
我认为您用来查找2个地理点之间距离的公式太简单了。由于地球的曲率,公式有点复杂。 看看here,这可以提供更准确的近似值。
还有一个Javascript示例,因此您可以通过一些语法调整轻松将其更改为Java。
在澄清之后,您似乎正在寻找两个位置之间地球上的路径的距离。查看上面链接中的跨轨距离变化。