使用Lat / Lon计算从A点到线段的距离

时间:2013-02-11 00:37:18

标签: java android gps latitude-longitude

我正在开发一款使用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);
}

这是我的第一篇文章,如果我没有正确完成或有足够的信息,请告诉我。谢谢你的帮助,我喜欢这个网站!

2 个答案:

答案 0 :(得分:2)

您的距离算法错误。它没有说明地球的曲率 - 经度在较高纬度处更接近,而在较低纬度处更接近。使用Location.distanceTo函数。

答案 1 :(得分:2)

我认为您用来查找2个地理点之间距离的公式太简单了。由于地球的曲率,公式有点复杂。 看看here,这可以提供更准确的近似值。

还有一个Javascript示例,因此您可以通过一些语法调整轻松将其更改为Java。

在澄清之后,您似乎正在寻找两个位置之间地球上的路径的距离。查看上面链接中的跨轨距离变化。