使用经纬度计算点A到线段的距离

5
我正在开发一款使用GPS的Android应用程序。我想知道是否有一种方法,如果“新位置”(点C)离线段AB太远,我可以丢弃GPS位置数据。我正在使用在维基百科上找到的“点到线段”公式。
到目前为止,当我尝试使用纬度和经度坐标时,我的代码返回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个回答

3
我认为你使用的计算两个地理点之间距离的公式过于简单。由于地球的曲率,该公式会变得更加复杂。
点击这里,可以提供更精确的近似值。该链接还提供了JavaScript示例,因此您可以通过几个语法调整轻松将其更改为Java代码。
经过澄清,您似乎正在寻找地球上两个位置之间路径的点到点之间的距离。请查看上面链接中的横截距离变化。

我正在使用Location.distanceTo函数在其他代码中查找距离,但我不知道它在这个公式中的应用。我是否遗漏了什么? - jheimbouch
这个公式是一个通用的公式,如果你有经度和纬度的数值,就可以使用它。Location.distanceTo() 实际上在内部执行了相同的操作,你可以在这里看到:http://developer.android.com/reference/android/location/Location.html#distanceTo(android.location.Location)。因此,你可以使用其中任何一个,或者自己手动实现。 - jbx
使用Location.distanceTo函数可以计算两个位置之间的距离。我想要一种方法来计算位于线段上的两个位置之间的距离,但是我只知道线段的起点和终点。如果我误导了问题,请谅解。 - jheimbouch
好的,如果你查看那个链接,会有几种变体。看看横向距离的那个,我认为它适合你的需求。 - jbx

2

您的距离算法是错误的。它没有考虑地球的曲率 - 经线在较高纬度处更近,在较低纬度处更远。请使用Location.distanceTo函数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接