Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何查找点附近的路线_Mysql_Gtfs - Fatal编程技术网

Mysql 如何查找点附近的路线

Mysql 如何查找点附近的路线,mysql,gtfs,Mysql,Gtfs,我有一个点的lat和lon坐标以及我想要搜索一个站点的半径,然后我从google maps执行一个函数,用这些变量查询我的GTFS数据库,但我不知道查询应该是什么样子。我可以仅使用sql查询选择所需的路由吗?如果是,我该怎么做? 如果仅使用sql无法完成,我的选项是什么 *很抱歉,问题太大,没有代码示例,但我对这方面还不熟悉,有时需要一些基本的概念指导 无论如何,谢谢你的帮助。(注意:我对MySQL不太熟悉,这些查询还没有经过测试。) 首先在MySQL中定义一个函数来计算两对lat长点之间的距离

我有一个点的lat和lon坐标以及我想要搜索一个站点的半径,然后我从google maps执行一个函数,用这些变量查询我的GTFS数据库,但我不知道查询应该是什么样子。我可以仅使用sql查询选择所需的路由吗?如果是,我该怎么做? 如果仅使用sql无法完成,我的选项是什么

*很抱歉,问题太大,没有代码示例,但我对这方面还不熟悉,有时需要一些基本的概念指导

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

(注意:我对MySQL不太熟悉,这些查询还没有经过测试。)

首先在MySQL中定义一个函数来计算两对lat长点之间的距离。见例。然后,要选择给定点附近的站点:

SELECT stop_id
FROM stops
WHERE getDistanceBetweenPointsNew(stop_lat, stop_lon, my_lat, my_lon) < my_dist;
假设已创建此表,您可以找到在给定点附近停止的路线列表,如下所示:

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;
选择路由\u id
从头到尾
加入巴士站
ON stops.stop\u id=路线\u stop.stop\u id
WHERE getDistancebetweenpointswew(stop_lat,stop_lon,my_lat,my_lon)
如果您正在做大量的GIS类型的工作,那么对于Postgres来说,它的功能远远超过MySQL中的同等解决方案。如果您刚刚开始,请查看。GTFS数据库模式。如果您指的是GTFS数据库的内容,则其标准表和相关表为:路由-(路由id、代理id、路由短名称、路由长名称、路由类型)形状-(形id、形pt lat、形pt lon、形pt顺序)停止时间-(行程id、到达时间、出发时间、停止id、停止顺序)停止-(停止id、停止代码、停止名称、停止描述、停止时间、停止时间)行程-(路线id、服务id、行程id、方向id、形状id)另一个细节是,我想获得形状,这意味着在“半径”内的一个站点停止的所有路线形状距离地点的距离我也推荐PostGIS。你可以找到一些代码导入PostGIS。然后你可以选择:)谢谢你的回答。我确实按照你的说明添加了函数和表,但我再次遇到了另外两个问题:1-在你的上一个示例中,我需要在函数中插入“stop_lat,stop_lon”,我如何将它们插入?(我需要取stops.stop_lan和stops.stop_lon为我检查的每一行,并将它们插入函数,如何完成?)。第二个问题——我实际上需要从
shapes
中选择这样的形状“select
shapeid
shapept\u lat
shapept\u lon
”,其中
shapeid
=?,这个形状需要与第三个示例中选择的路由的形状id相等。(shapes.shape_id==所选路由的routes.shape_id.route_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;