站点表(id,name,...)--站点编码,站点名称
线路表(l_id,l_name,...)--车号编码,车号名称
站点车次关系表(id,l_id,l_id_order)--站点编码,车号编码,车号站点顺序号(每个站点对应车号的排名次序)
一个站点对应多部车号,一部车号对应多个站点,多对多关系举个例子:
两个站点(A-G)最短路程(最少站点):
select l_id,count(1) 站点数目 from 站点车次关系表 
where l_id in 
(select * from (select l_id from 站点车次关系表 where id='A') a where exist(select 1 from 站点车次关系表 b where a.l_id=b.l_id and id='G'))
and id in ('A','G') group by l_id以上设计上,只能设计到最少站点数目,最短时间比较困难(本人意见,各位有何见解)

解决方案 »

  1.   

    1, 公车表(BusNo, ...);
    2, 站台表(PlatformNo, ...); 
    3,公交路线表(BusNo, PlatformNo, 站台路线序号, .....);
    4. 相邻站台路程权值表(PlatformNo1, PlatformNo2, Value);一, 求A1,A2两站点最佳路线车次:
    a. 求的过A1的公交车次集合a1;
    b. 求的过A2的公交车次集合a2;
    c. 求的a1, a2的交集, 利用权值表得出最佳路径。二, 求A1,A2两站点最佳换乘路线车次(换乘一次):
    a. 求的过A1的所有公交车次经过的所有站点的集合a1;
    b. 求的过A1的所有公交车次经过的所有站点的集合a2;
    c. 把问题转变成a1的每一点到A2和,a2每一点到A1的问题。
    d. 利用权值表得出最佳路径。三,求A1,A2两站点最佳换乘路线车次(换乘n次):
    a. 求的过A1的所有公交车次(换乘n-1次)经过的所有站点的集合a1;
    b. 求的过A1的所有公交车次(换乘n-1次)经过的所有站点的集合a2;
    c. 把问题转变成a1的每一点到A2和,a2每一点到A1的问题。
    d. 利用权值表得出最佳路径。 
    当然这种算法比较低级,高级的算法是先建模,转换成图的问题,再利用图论的一些结论,定理来解决。   
     
      

  2.   

    我认为可以把公交路线看成是网络拓扑图,
    首先用节点表和路段表描述公交线路网,
    节点和路段都有自己的权值,然后用组成公交线路的路段ID列表来表示每一条公交线路,
    每一条公交线路还可以有自己的权值放大系数,用于放大或缩小站点和路段的权值。最后,可以用Oracle的存储过程和存储函数,递归调用自己来完成公交换乘的查询。
      

  3.   

    shuixin13(犬犬(心帆)) 说的我已经考虑了,只不过这里没说出来,不好意思阿
    是这样的,某个站点可能还需要一些关键词,也就是逻辑上的某个站点周围的标志性建筑物.
    我现在有个简单的头绪,就是在查询的时候,不作太多的算法,要不速度太慢了,让浏览者无法承受,我想这部分放在数据库里面,比如说换乘这部分的查询,我们可以转化成为查询数据库里面的记录,而这些记录已经存在数据库中了,就像我们简单的查询一样.
    我想每个站点要和其他的站点匹配,然后找出换乘的路线,不一定是最佳的换乘路线.
    请大家在仔细想想,看看用什么最好的办法来解决这个问题!
    谢谢大家了!
      

  4.   

    给你一个思路,是完全可行的.三个表"公交线路表"(里面有如213\214的车次),"公交站点表"(内有站点的各个信息),与"公交线路表"以编号相关联,具体还有一部分数据结构,不多说了
    ,因为不能说多了,我们现在正做这样的bs系统呢,不过用的不是jsp.
      

  5.   

    不好意思,这个问题我不懂。但我就要学foxpro了,可是又听人说没有用处,不知道是真是假,请各位朋友多多指教——学了以后可以从事拿一方面的工作呢?谢谢!
      

  6.   

    呵呵,
    这东东,如果细想的话,越想越复杂!!到了一个站点可能要去另一个同名的反向站点坐车,
    (楼主说: "每个站点要和其他的站点匹配",呵呵,这个可不容易匹配了)
    而两个站点离得又比较远
    或者说不可能在一个视线中看到
    呵呵,
    晕~~~~~~~~~
    如果如 baggio785(狗狗) (????!!!!! 汗 ^_* )所述
    "不一定是要最佳的换乘路线!!"那就无所谓了,
    不需要考虑要换乘几次,不需要考虑线路的行走时间, ......
    那做的都没什么意思了,呵呵,不如做成这样的,
    http://h.7i24.com/vbcc/querytrain/
      

  7.   

    兄弟,你这完全是一个GIS系统了建议你试着使用mapinfo的mapx来解决这个问题,就算你现在用数据库实现了这些功能,相信以后你还会遇到各种问题的,而这些问题本来应该使用gis系统来解决的,非单纯的数据库能处理的go2map在网站上使用的是自己开发地图中间件,我们使用这个中间件开发这个行业的应用系统,不仅开发成本低,而且稳定。公司在公交行业应用的还可以,例如北京公交,已经深圳公交等等如果你是开发商用的系统,建议你可以考虑go2map的MIP地图中间件,如果有不明,可以联系我
    [email protected]
      

  8.   

    已经有网站做过类似功能了,你可以去看看http://www.go2map.com/
      

  9.   

    shuixin13(犬犬(心帆)) ,你提供的网址不能下载.
    现在如果只是考虑数据库,大家能不能提供以下数据库的设计?
      

  10.   

    简单想法。
    如A换到B,则找出A站有哪条线路,并且是通过B的,有则选一条到B站换乘数最少的、站数最少的。如果没有,则找一个站到B站最近的,这要有两站之间的距离记录。线路表(记录有什么线路)
    站点表(记录有什么站,有哪条线路通过)
    站点线路表(记录各站的信息,距离、路况等)
      

  11.   

    比较复杂,以下个人意见:
    设计一库表,字段为:公交线路、途径车站编号、流水号、距离起始点距离、距离起始点时间
    (两站之间的绝对差可以比较最短时间或最短距离,比如519路经过A站时距离起点2KM,10分钟,到达B时距离起点22KM,70分钟,同样536路经过A站时距离起点10KM,30分钟,到达B时距离起点40KM,100分钟,那么从A到B,519的距离为22-2KM,时间为70-10M,536为40-10KM,100-30M,流水号的作用便于换路用),换乘比较复杂,比如从A到B,可以找出经过A/B的所有线路,设为集合Ra,Rb,列出所Ra,Rb中每条线路经过的站点集合(删掉重复的),这样分别得到站点集合,设为集合Pa,Pb,显然如果Pa,Pb中有重复的站点,设为T,说明存在从A到T的线路以及从T到B的线路,同样可以列出所有的解,并根据前面的方法计算最优解,
    最复杂的是T不存在的情况,这时需要增加换乘的次数了,现在利用同样的办法来构造Pc,先找出经过Pb的线路集合Rc,再构造Pc,Pc与Pb中重复的站点就是解集,
    依次类推...突发奇想,请大家多多推敲,共同进步!!!
      

  12.   

    to:fengys(叶开)
    简单的时间或路程的加权好象还不能确定最优路线。应该还有一个换乘的问题。例如:
    A-C-E-G为由站间权值确定的最优路线,然而实际乘车的时候,直接走A-C-E-G路线可能要换两趟车,而走A-D-C路线只要换一趟车。
      

  13.   

    感觉没有那么可怕。以下是个人看法:
    1、BUS(BUS_ID,NAME,...) :存放公共交通线路
    2、STATION(STATION_ID,NAME,...) :存放站点
    3、BUS-STATION(BUS_ID,STATION_ID,TIME,LENGTH...) : 存放没条线路从起点到该纪录站点的时间和路程。起点:路程或时间为0。
    终点:同一线路的各站点中路程或时间最小的站点。
    换乘站点:起点线路和终点线路共有的站点。
    时间或路程最短:用表3的数据求差比较,取最小值既可。
    个人意见,大家多批判。
      

  14.   

    感觉没有那么可怕。以下是个人看法:
    1、BUS(BUS_ID,NAME,...) :存放公共交通线路
    2、STATION(STATION_ID,NAME,...) :存放站点
    3、BUS-STATION(BUS_ID,STATION_ID,TIME,LENGTH...) : 存放没条线路从起点到该纪录站点的时间和路程。起点:路程或时间为0。
    终点:同一线路的各站点中路程或时间最小的站点。
    换乘站点:起点线路和终点线路共有的站点。
    时间或路程最短:用表3的数据求差比较,取最小值既可。
    个人意见,大家多批判。
      

  15.   

    如果不考虑时间和路程 ,我想只用一个表,
    公交线路,站名,这条线的第几站
    linename,station_name,forder
    121      a              0
    121      b               1
    121      c                2111      c                0
    111      f                 1
    111      g                 2select t1.* ,t2.station_name  from (select * from bus_station where station_name='xiasha' ) as t1 
    inner join (select * from bus_station where station_name='dongchang' ) as t2  on t1.linename=t2.linename
      

  16.   

    where download book about design with ER?
    thx!