Algorithm 位置点:到指定路线的距离

Algorithm 位置点:到指定路线的距离,algorithm,geolocation,vector-graphics,android-location,quadtree,Algorithm,Geolocation,Vector Graphics,Android Location,Quadtree,首先让我陈述一下想法: 我想检查用户到指定路线的距离。路线由多个位置点组成(图中为a、b、c、d点)。两个相邻的点描述一个向量(图中的蓝线ab、bc、cd) 现在来看应用程序(特别是android,但这不是问题的一部分) 当用户沿着路线行进时,会跟踪其位置。对于我要检查的每个新位置,用户是否仍在路线上(或在距离X内) 我沿着路线画了3个可能的位置: 位置1没有问题。我把垂直线从点1放到向量ab上。这给了我这个向量上的一个位置点,我可以计算两点之间的距离(使用android:location.

首先让我陈述一下想法:

我想检查用户到指定路线的距离。路线由多个位置点组成(图中为a、b、c、d点)。两个相邻的点描述一个向量(图中的蓝线ab、bc、cd)

现在来看应用程序(特别是android,但这不是问题的一部分) 当用户沿着路线行进时,会跟踪其位置。对于我要检查的每个新位置,用户是否仍在路线上(或在距离X内)

我沿着路线画了3个可能的位置:

  • 位置1没有问题。我把垂直线从点1放到向量ab上。这给了我这个向量上的一个位置点,我可以计算两点之间的距离(使用android:
    location.distanceTo()

  • 位置2当我处理向量时,它们没有开始也没有结束。黑线是向量ab的投影。计算最近的距离会使我离向量ab很近,但离向量bc很远。事实上,我需要计算到bc的距离,因为这就是路线的运行方式。但是,在我的算法中,我如何知道需要选择哪个向量来计算到的距离呢

  • 位置3提供了使用向量ab或bc计算的可能性。两者的差距几乎相等。如何知道选择哪一个

若要对此进行汇总:

我有一个带有位置点的数组:

{[lat1, lon1], [lat2, lon2],[...]}
我的应用程序正在跟踪用户的位置。现在,我想将新位置与阵列中的此轨迹进行比较

是否有人知道一个算法来解决这个问题,或者有人能帮我解决这个算法吗?(伪代码就足够了)


//编辑:我刚读到四叉树算法。这可能是Soonts实施之外的一个选项。

首先使用以下公式将所有数据(用户位置、点)从lat/lon转换为x/y km:

Y=lat*111,X=lon*111*cos(lat)

(当路线长度超过1000英里时,这将略微失败,在两极附近或当你的路径穿过180子午线时,这将显著失败,希望这对你的任务来说是可以的)

然后使用以下公式查找点与每条线段之间的距离:,并搜索最小距离。如果您的路线超过200段,则需要进行一些性能优化


另外,如果你对这种方法的局限性不满意,可以寻找球面上点和线段之间距离的公式,但我可以向你保证,这些公式将包含大量的三角函数,我怀疑便宜的android手机在长路线上是否能快速做到这一点。

我认为这些局限性应该不是问题。我需要考虑一下,特别是因为我需要确保用户在轨道上前进,但我想这应该不是问题。//编辑:不要在这里进行过早的优化。四叉树比较复杂,您需要花费一些时间来实现和调试。我认为即使是一部100美元的安卓手机,也能在很短的时间内计算出一个点到1000段路径之间的距离。