繁体   English   中英

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

[英]How do I make a simple bus route search Engine?

[不是:e用户在铁路查询系统的开发中再次询问这个问题,如何为火车,车站和站点建模? ] 我的问题描述:

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

我的问题是:如何在数据库中存储该路由信息? 如果我存储在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存储在不同的不同列中,那么它将如何...? 请用你自己的技巧建议我。 这并不紧急,但我打算进行基本的公交路线搜索,所以感谢您的评论。

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

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

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

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

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

我就是这样做的。

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM