了解GPS航路点是否已通过

时间:2014-04-14 17:47:19

标签: python gps gis

想想马拉松比赛的几名选手。运动员都戴着GPS设备。赛道本身没有传感器,我需要知道每个运动员何时越过预定的GPS坐标。但是,每个运动员可能会以略微不同的纬度/长度穿越航点,因为赛道/道路可能足够宽,以至于使用了赛道/道路的不同部分。

确定运动员是否通过航路点的最佳方法是什么?

我正在使用Python,并且愿意使用外部库。我正在使用预处理的GPS数据,所以我在每个时间点只有纬度和经度(还有一些其他的零碎比如速度和行进的距离)。

2 个答案:

答案 0 :(得分:1)

你可以试试这个:enter image description here 航点是两个轨道(线)段相交的点(图中的黑线)。对于在航点上相遇的两条线段中的每一条线(通过图中的路线点的红线和蓝线),通过航点绘制与一条线段正交的线。当跑步者进入图片中标记为红色的区域时(假设跑步者来自右侧),跑步者被认为是在航点附近。经过一段时间后,跑步者可以进入图片中标记为蓝色的区域 - 当发生这种情况时,跑步者已经通过了航路点。

如果跑步者从未出现在标记为蓝色的区域,则跑垒员偏离了赛道,那么航路点尚未通过。

答案 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

其他可能的选择:

  • 使用两条海峡线的交叉点进行简单的数学计算 - 高中的东西
  • 使用postgis将你的数据导入postgres并使用postgis函数,例如ST_Crosses(如果postgres很重,我会试试SpatialLite-sqlite)
  • pyshp,shapely,gdal / geos,geodjango,geoalchemy
  • 将上面的一些内容结合起来并写一点花哨的算法,比如在一行/点周围创建一个缓冲区并检查它是否“ST_Contains”GPS位置还检查以后的任何位置是否都在关闭缓冲区(?)