想想马拉松比赛的几名选手。运动员都戴着GPS设备。赛道本身没有传感器,我需要知道每个运动员何时越过预定的GPS坐标。但是,每个运动员可能会以略微不同的纬度/长度穿越航点,因为赛道/道路可能足够宽,以至于使用了赛道/道路的不同部分。
确定运动员是否通过航路点的最佳方法是什么?
我正在使用Python,并且愿意使用外部库。我正在使用预处理的GPS数据,所以我在每个时间点只有纬度和经度(还有一些其他的零碎比如速度和行进的距离)。
答案 0 :(得分:1)
你可以试试这个: 航点是两个轨道(线)段相交的点(图中的黑线)。对于在航点上相遇的两条线段中的每一条线(通过图中的路线点的红线和蓝线),通过航点绘制与一条线段正交的线。当跑步者进入图片中标记为红色的区域时(假设跑步者来自右侧),跑步者被认为是在航点附近。经过一段时间后,跑步者可以进入图片中标记为蓝色的区域 - 当发生这种情况时,跑步者已经通过了航路点。
如果跑步者从未出现在标记为蓝色的区域,则跑垒员偏离了赛道,那么航路点尚未通过。
答案 1 :(得分:1)
恕我直言,解决问题的方法很少。 第一个出现在我脑海中的是:
from shapely.geometry import LineString
line1 = LineString([(i, i) for i in range(5)])
line2 = zip(range(5)[::-1], range(5))
if line1.crosses(line2):
print 'yeah!'
添加一个循环并迭代每个waypoint-line
其他可能的选择: