如何找到一个点附近的路线

时间:2014-12-16 19:03:51

标签: mysql gtfs

我有一个地点的纬度和经度坐标以及我想要搜索停止点的半径,然后我从google-maps执行一个函数来查询我的GTFS数据库中的那些变量,但我不知道如何查询应该看起来。我可以只使用sql查询选择想要的路由吗?如果是这样,我该怎么做? 如果不能只用sql做我的选择是什么?

*对于广泛的问题和没有代码示例感到抱歉,但我是新手,有时需要一些基本的概念指导。

无论如何,谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

(警告:我对MySQL并不熟悉,这些查询未经测试。)

首先在MySQL中定义一个函数来计算lat-long点对之间的距离。参见例如this answer。然后,选择给定点附近的停靠点:

SELECT stop_id
FROM stops
WHERE getDistanceBetweenPointsNew(stop_lat, stop_lon, my_lat, my_lon) < my_dist;

在GTFS规范中找到与停靠点相关的路线没有非常自然的方法。要做到这一点,你需要加入对stop_times的旅行,如果你的stop_times表很大和/或没有索引,这将是很慢的。我建议预先计算一个关联止损和路线的表格:

CREATE TABLE route_stop AS
SELECT DISTINCT route_id, stop_id
FROM trips
JOIN stop_times
ON trips.trip_id = stop_times.trip_id;

假设已创建此表,您可以找到在给定点附近停止的路由列表,如下所示:

SELECT route_id
FROM stops
JOIN route_stop
ON stops.stop_id = route_stop.stop_id
WHERE getDistanceBetweenPointsNew(stop_lat, stop_lon, my_lat, my_lon) < my_dist;