如何制作简单的公交路线搜索引擎?

时间:2011-11-18 21:14:54

标签: mysql sql database web

[不是:用户在Development of railway enquiry system, how to model Trains, Stations and Stops?再次询问此问题] 我的问题说明:

假设我在ROUTE-1 中有一个 BUS-123,它将穿过ROUTE-中的A,B,C,D,E,F,G,H和 BUS-321 2 到D,E,F, X,Y,Z 。 如果有人输入B作为源点而F输入目标点,那么带有BUS-123的ROUTE-1应显示在结果中。但是如果有人输入H作为源而A作为目标结果不应该显示,因为返回可能并不总是与行进的结果相同。 但如果一个人输入A作为源,Z作为目的地,那么 BUS-123 ROUTE-1 BUS-321 应显示ROUTE-2

我的问题是: 如何在数据库中存储该路由信息?如果我存储在RDBMS中,如下所示

BUS_NUMBER   ROUTE_NUMBER    VIA_ROUTES
BUS-123      ROUTE-1         A, B, C, D, E, F, G, H
BUS-321      ROUTE-2         D, E, F, X, Y, Z

然后我的搜索将如何工作。我的意思是如何在字符串中搜索它。 如果我将所有VIA_ROUTES存储在不同的不同列中,那么它将如何...?请用你自己的技巧建议我。这并不紧急,但我打算进行基本的公交路线搜索,所以感谢您的评论。

3 个答案:

答案 0 :(得分:4)

我将其建模为循环图。每个公交车站由一个顶点表示。两个站点之间的每个直接连接由标有路由号码的边缘表示;因此,每条路线都是一系列连接的边缘。也使边缘定向。并非所有从A站到B站的路线都必须从B站往另一个方向停止A.

可能希望用估计的旅行时间填充每个边缘,这条腿的方差的度量(或度量) - 在星期日晚上凌晨2点,方差可能很低,但是在星期五晚上的下午5点,它可能会非常高,并列出出发时间。

然后是图遍历并找到“最低成本”路线,但是您选择定义“最低成本” - 您可能要考虑的因素包括:

  • 总行程时间
  • 等待下一站离开的总时间。
  • 在任何一个人停下来等待时间。
  • 距离是多少?

应该注意的是,太多的等待时间是不好的(1月份等待公共汽车需要花费40分钟才能达到-10华氏度?)。太少也是坏事,因为它增加了错失连接的可能性,因为公交车的时间表往往具有相当大的可变性,因为它们对当地交通状况的波动有高度响应。

我就是这样做的。

我不相信我会尝试直接在SQL中解决它。

该模型非常适合SQL。您需要以下实体,然后是一些实体,因为您需要表示时间表等:

  • 停止。巴士站。图的顶点。
  • 路线。巴士路线。
  • 即可。两站之间的直接联系。图的边缘。
  • RouteSegment。一个关联实体,表示组成路线的有序段序列。

答案 1 :(得分:0)

我认为bus_numbers并不重要,因为您可以稍后查找它们。也许你需要的是在一个大矩阵中创建一个带有bus_stops的二维矩阵,然后使用像dijkstra这样的图遍历算法来找到从A到B的最短路径。当你得到它时你可以很容易地查找bus_numbers和向客户展示它们。因此,我认为您的数据库已经非常好了。

答案 2 :(得分:0)

我有一个route表和一个route_part表。后者将包含对路由的引用,加上用于排序的序数,以及对stop表的引用。因此,您可以存储任何路线。

在搜索方面,如果您希望搜索两站之间的路线,您可以在route_part表中查找两个站点,看看它们在任何情况下是否出现在同一路线上(承载请注意,路线可能存在于一个方向而不是另一个方向。)