我有一个点的纬度和经度坐标以及我想在其中搜索停靠点的半径,然后我从 google-maps 执行一个函数来使用这些变量查询我的 GTFS 数据库,但我不知道应该如何查询看。我可以只使用 sql 查询来选择想要的路线吗?如果是这样,我该怎么做?如果仅使用 sql 无法完成,我的选择是什么?
*很抱歉这个广泛的问题,没有代码示例,但我是新手,有时需要一些基本的概念指导。
无论如何感谢您的帮助。
(警告:我对 MySQL 不太熟悉,这些查询未经测试。)
首先在 MySQL 中定义一个函数来计算经纬度点对之间的距离。参见例如这个答案。然后,选择给定点附近的停靠点:
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;