【问题标题】:Calculate the distance from point A to line segment using Lat /Lon使用 Lat /Lon 计算点 A 到线段的距离
【发布时间】:2013-01-26 02:17:24
【问题描述】:

我正在开发一个使用 GPS 的 Android 应用。如果“新位置”(C点)离线段AB太远,我想知道是否有办法丢弃GPS位置数据。我正在使用on Wikipedia 找到的点到线段公式。

到目前为止,当我尝试使用纬度和经度坐标时,我的代码返回 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);
}

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

【问题讨论】:

    标签: java android gps latitude-longitude


    【解决方案1】:

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

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

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

    【讨论】:

    • 我正在使用 Location.distanceTo 函数来查找其他代码位中的距离,但我看不出这适用于这个公式的什么地方。有什么我想念的吗?
    • 这个公式只是一个通用公式,如果你有经度和纬度作为数值,你可以使用。 Location.distanceTo() 实际上在内部做同样的事情,正如你在这里看到的:developer.android.com/reference/android/location/…。所以你可以使用它或自己手动实现它。
    • 使用 Location.distanceTo 用于一个位置到另一个位置。我想要一种方法来计算一个位置到线段上存在的另一个位置。但是,我知道的线段的唯一点是起点和终点。对不起,如果我误导了这个问题。
    • 好的,如果您检查该链接,则有几个变体。查看我认为适合您需求的跨轨距离。
    • 非常感谢,这正是我所需要的。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-04
      • 2016-08-05
      • 1970-01-01
      • 2018-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-20
      相关资源
      最近更新 更多