【问题标题】:Check if a given latitude, longitude point lies along the route from A to B检查给定的经纬度点是否位于从 A 到 B 的路线上
【发布时间】:2015-03-08 04:20:53
【问题描述】:

我正在使用 Android 应用程序,我需要确定给定的纬度、经度点是否位于从 A 到 B 的路线上。

我为此使用LatLngBounds。它仅适用于从西南到北东的路线,但不适用于其他路线(NE 到 SW 或 SE 到 NW 或 NW 到 SE)。它给出了 NW 到 SW 的错误结果和 SE 到 NW 或 NW 到 SE 的错误。

我尝试将LtLngBounds.Builder() 用于其他三种情况,即NE 到SW 或SE 到NW 或NW 到SE。但是代码对他们不起作用。以下是我使用的代码。

LatLngBounds.Builder b_builder = new LatLngBounds.Builder();
b_builder.include(se_latlng); //start point
b_builder.include(nw_latlng); //end point 
LatLngBounds b = b_builder.build(); //I am building the bound here
boolean present3 = b.contains(mid_latlng1); //Checking if this point lies along the route
boolean present4 = b.contains(mid_latlng2); //Checking if this point lies along the route

在上述两种情况下,我对 b.contains(NE 到 SW 或 SE 到 NW 或 NW 到 SE)都是正确的。但事实上,这些点中只有一个位于路线沿线。我在其他情况下也尝试了同样的方法,但即使重点在于或沿着路线存在,我也总是做到这一点。

虽然 LatLngBounds 适用于西南到东北。谁能帮我找出一个点是否位于从 A 到 B 的其他方向(NE 到 SW 或 SE 到 NW 或 NW 到 SE)的路线上。

【问题讨论】:

  • 构建者的工作是构建一个包含所有提供给它的点的边界框,所以我看不出它如何可能提供有关路线或方向的任何信息。调用 contains 只会告诉您给定点是否位于生成的边界内。根据变量 mid_latlng1 和 mid_latlng2 的名称,我假设它们的坐标位于使用 se_latlng 和 nw_latlng 生成的边界矩形的中心,因此 contains 方法始终返回 true 是有道理的。
  • @stkent:感谢您的澄清,我正在关注this 以查找给定点是否位于从 A 点到 B 点的路线上。在上述问题中,se_latlng、nw_latlng 是两个高速公路上的点。 mid_latlng1 是它们之间的一个点,在高速公路上,但不是确切的中点。 mid_latlng2 是一个点,它可能位于边界矩形内,但不在高速公路上。在另一条路上离高速公路有点远。
  • 在我看来,对这个问题使用 LatLngBounds 测试太粗略/不准确。如果我是你,我会考虑一种几何方法(例如,请参阅 en.wikipedia.org/wiki/Distance_from_a_point_to_a_line 以获取一些相关的讨论)。您应该定义一些公差,表示一个点“足够接近”连接 A 到 B 的直线。如果您需要更漂亮的路径,您可以将路径分成直线,然后将相同的算法重新应用于路径的每个段。

标签: android google-maps google-play-services google-maps-android-api-2 google-maps-api-2


【解决方案1】:

已经有一个用于该任务的库。从您的LatLng 中创建一个Polyline 并使用isLocationOnPath

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-22
    • 1970-01-01
    • 2011-03-10
    • 1970-01-01
    • 2017-08-08
    • 1970-01-01
    • 2013-11-08
    相关资源
    最近更新 更多