我正在创建一个java应用程序,它给出了沿着它的路线的下一站的车辆的估计到达时间(eta)。 车辆发送它的当前位置(纬度和经度)以及它所遵循的路线。 路线是一条多边形线,它的终点是沿该路线的停靠点。每个停靠点由一个地理点(纬度,经度对)表示。 而且,路线来自一组已知路线,即沿着路线的每个站点的位置(纬度,经度)是已知的。 我想确定沿途的下一站车辆的eta。 我已经预先计算了从停止位置A移动到沿着路线停止位置B所花费的时间(例如,考虑公共汽车路线)。 所以,一旦我得到当前位置,(它将是一个停止位置或沿着一条路线的两个停靠点之间的某个位置) 我可以找到从当前位置到下一站的距离。从那个距离我可以计算出它需要的时间 通过添加预先计算的停靠时间,到达下一站并因此沿着路线的所有其他站点。现在,我的问题是
如何确定车辆发送的当前位置(经度和纬度)是否实际沿路线行驶。
如果1)为真,如何确定当前位置沿路线的哪两个停靠位置(因此我可以计算从当前位置到下一个停靠位置的距离。)
如果它是笛卡尔坐标系,则很容易确定点是否位于由两个端点连接的线上。 如何为地理点(纬度,经度对)做到这一点。我在网上搜索过,有方法可以计算出它们之间的距离 两个地理位置,但没有找到任何方法来确定一个地理位置是否位于两个地理点之间的一条线上
答案 0 :(得分:0)
在笛卡尔坐标系统的情况下,很容易构成跨越两点的线的方程(因为这种线是唯一可能的)。在球体的情况下,可以绘制几条穿过表面上的两个点的线。更有甚者,在某些情况下,可以通过两个点绘制具有相等长度的多条线。因此,流行的GIS库中没有这样的API也就不足为奇了(但是专门的数学包可以包含这些东西)。
对折线的每个段应用上面的规则。然后选择特征在于与车辆的位置和段的结束之间的预期距离的最小偏差的区段。该段将成为路线的当前部分。
回到库:也许流行的库有一些近似的实现。例如,在不是大城市的情况下,可以使用笛卡尔近似(我在SUMO中遇到了这样的特征。该工具专门用于交通仿真。它使用平面2D坐标。)