2

先说一下思路:

我想检查用户到指定路线的距离。路线由多个位置点组成(图中为点 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的实施之外,这也许是一种选择。

4

1 回答 1

2

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

Y = 纬度 * 111,X = 经度 * 111 * cos( 纬度 )

(如果路线长度超过 1000 英里,这将略微失败,并且在两极附近或当您的路径穿过 180 条子午线时会严重失败,希望这对您的任务来说没问题)。

然后使用以下公式找到点与每个段之间的距离:https ://stackoverflow.com/a/1501725/126995 ,并搜索最小距离。您的路线有超过 200 个航段,需要进行一些性能优化。

PS如果您对这种方法的局限性不满意 - 寻找球体上点和线段之间距离的公式,但我可以向您保证,这些将包含很多三角函数,我怀疑廉价的安卓手机会做它的速度很快,路线很长。

于 2013-02-16T17:51:16.960 回答