1

我有一条折线,点 A 和 B 放在地图上。

目前,我正在使用

computeOffset()

并在那条线上每五英尺放一个点,然后用

computeDistanceBetween()

找到最近的点。

是否有另一种方法或类,因为使用外部 GPS 接收器时 5 英尺非常远。我可以进行无限小的增量,但使用循环和点存储内存将很快用完。

目前Android中是否有任何支持自动计算直线距离的东西?

4

1 回答 1

1

如果您忽略表面的球形特性,这对于小距离应该没问题,那么您的位置和线正在形成一个三角形。距离就是这个三角形的高度。所以你只需要关于三角形的足够信息,例如所有边的长度,来计算高度。所有边的长度只是 3 个点之间的距离(您的位置和线的两端)。调用由您的线 A 形成的边,以及其他边 B 和 C。然后可以将高度计算为 H=(2/A)sqrt[s(sA)(sB)(sC)] 和 s=(1/ 2)(A+B+C) (刚刚查了这个公式,没试过。)

编辑

上面的解决方案给出了定义为折线延长的直线的距离,但没有考虑端点。我猜您正在寻找到由其端点限制的线的距离。

因此,您还需要了解您的位置到直线的正交投影是在端点内还是在外,或者换句话说,三角形边A和B或A和C之间的角度是否大于90度. 只有当 B 或 C 比 A 长时才会出现这种情况。如果是这样,取较短的(假设是 B)并检查 B*B + A*A 是否大于 C*C。(根据余弦定律,角度大于 90 度。)在这种情况下,B 是您要寻找的距离。

于 2014-07-20T20:20:58.653 回答