我有一个地点的纬度和经度坐标以及我想要搜索停止点的半径,然后我从google-maps执行一个函数来查询我的GTFS数据库中的那些变量,但我不知道如何查询应该看起来。我可以只使用sql查询选择想要的路由吗?如果是这样,我该怎么做? 如果不能只用sql做我的选择是什么?
*对于广泛的问题和没有代码示例感到抱歉,但我是新手,有时需要一些基本的概念指导。
无论如何,谢谢你的帮助。答案 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;