5

我正在开发一个使用 GPS 的 Android 应用程序。如果“新位置”(C点)离线段AB太远,我想知道是否有办法丢弃GPS位置数据。我正在使用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);
}

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

4

2 回答 2

3

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

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

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

于 2013-02-11T00:41:43.567 回答
2

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

于 2013-02-11T00:40:47.503 回答