【问题标题】:How to determine wether a geo point(latitude, longitude pair) lies on a line connecting two geo points如何确定地理点(纬度,经度对)是否位于连接两个地理点的线上
【发布时间】:2013-11-08 06:26:50
【问题描述】:

我正在创建一个 java 应用程序,它可以为车辆在其路线的下一站提供预计到达时间 (eta)。 车辆发送它的当前位置(纬度和经度)和它所遵循的路线。 路线是一条折线,它的终点是沿该路线的站点。每个站点由一个地理点(纬度,经度对)表示。 此外,路线来自一组已知路线,即沿路线的每个站点的位置(纬度,经度)是已知的。 我想确定车辆沿途下一站的 eta。 我已经预先计算了从停靠点 A 沿路线移动到停靠点 B 所需的时间。(例如,考虑巴士路线)。 所以,一旦我得到当前位置,(它可能是一个停止位置或沿路线的两个停止点之间的某个位置) 我可以找出从当前位置到下一站的距离。从那个距离我可以计算出到 通过添加预先计算的停靠时间,到达下一个停靠点,从而到达路线上的所有其他停靠点。现在,我的问题是

  1. 如何判断车载传输的当前位置(经纬度)是否真的在路线沿线。

  2. 如果1)为真,如何判断当前位置在路线的哪两个停靠点之间(这样我可以计算当前位置到下一个停靠点的距离)

    李>

如果它是笛卡尔坐标系,则很容易确定一个点是否位于由两个端点连接的线上。 如何为地理点(纬度,经度对)执行此操作。我在网上搜索过,有计算距离的方法 两个地理点,但没有找到任何方法来确定一个地理点是否位于两个地理点之间的线上

【问题讨论】:

  • 我将您的问题解释为正方形表面上的一条线,您的意思是沿着大圆?因为如果它可以是任何圆圈,那么答案将永远是肯定的。
  • 如果您有计算两点之间距离的公式,那么判断点 V 是否在点 A 和 B 之间的一种方法是将 A 到 V 的距离和 V 的距离相加到 B。如果结果与从 A 到 B 的距离相同,那么你得到了一条直线(或者至少是一个大圆的一部分)。
  • (错字,在我的评论中,我指的是球体,而不是正方形)
  • @MrBackend。是的。我提出的问题只是我试图解决的一个更大问题的一小部分。我知道如何计算两个地理点之间的距离。所以我想如果我能发现车辆的当前位置 C 在停靠点 A 和 B 之间,我就可以找出从 C 到 B 的距离(以及时间),从而沿着它的路线到达后续停靠点。我真的不知道如何做那个程序化的盟友。 (我解决这个问题的方法有什么问题吗?目前我想不出任何其他方法。)注意:我是 stackoverflow 的新手。

标签: java location


【解决方案1】:

在笛卡尔坐标系的情况下,很容易组成一个穿过两点的线的方程(因为这样的线是唯一的)。在球体的情况下,可以绘制几条穿过表面上两点的线。更重要的是,在某些情况下,可以通过两点画出几条等长的线。因此,流行的 GIS 库中没有这样的 API 也就不足为奇了(但专门的数学包可以包含这些东西)。

  1. @David Wallace已经提到了正确的方法

  2. 对多段线的每一段应用上述规则。然后选择与车辆位置和路段终点之间的预期距离偏差最小为特征的路段。此路段将是路线的当前部分。

回到库:也许流行的库是通过某种近似实现的。例如,在不是大城市的情况下,可以使用笛卡尔近似(我在SUMO中遇到过这样的功能。该工具是专门为交通模拟设计的。它使用平面二维坐标)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-01
    • 1970-01-01
    • 2016-02-20
    • 1970-01-01
    • 2011-12-13
    • 1970-01-01
    相关资源
    最近更新 更多