《武汉工程大学学报》  2009年09期 50-52   出版日期:2009-09-28   ISSN:1674-2869   CN:42-1779/TQ
基于Web2.0的公交信息查询系统的设计与实现


0引言公交查询系统[13]能够提高城市公交对乘客出行的吸引力,为乘客的公交出行提供准确、及时、优化的公交信息服务.本文介绍基于Web 2.0的公交查询系统的设计和实现.在Google 提供的免费地图Google Maps的基础上,利用Access描述、创建了公交线路的数据存储结构,并采用ASP作为开发工具利用ADO与Database Server连接访问,实现了对公交线路及公交站点的数据信息管理和查询[45] .利用JavaScript语言在客户端调用Google Maps API[6] ,就可以在浏览器中的Google Maps上显示公交线路和车站及其相关信息[7].该系统设计具有公交线路查询、公交站台查询及具有最少换乘次数的公交换乘查询等功能,并可将这些功能的查询结果在Google Maps上显示,为乘客的公交出行提供准确、及时、优化的公交信息服务和出行辅助计划.1Google map APIGoogle在2005年提供了全新的免费地图服务Google Maps API.在基于Web2.0的公交信息查询系统的设计中利用Google推出的本地化的Google中国地图,及它提供的服务,括检索地名,查询行车路线的功能,并且全部界面都用中文显示.Google Maps API中的主要控件或者对象包括以下三项.(1)GMarker地标GMarker地标是google 地图中用于标记地理信息的对象,许多基本功能,如果要指示位置、显示信息都必须依赖GMarker对象.创建GMarker对象,其语法格式如下:Var marker0=new GMarker(lng,lat);添加信息窗口GInfoWindow对象,在GMarker上显示GInfoWindow对象信息,语法格式如下:marker.openInfoWindowHtml("Marker #<b>" + number + "</b>");(2)显示GMarkerManage对象里的GMarker地标单击GMarker地标时使openInfoWindowHtml显示出来,这种监听单击或其他操作的行为可以由Google map API中的事件监听函数实现,GEvent事件监听器使其相应单击的函数如下:GEvent.addListener(marker,“click”,function()){Marker. openInfoWindowHtml(html);}(3)使用GPolyline折线对象GPolyline折线对象在地图上面绘制折线可以称得上是Goole地图中最重要的对象了,其作用是在地图上面显示一段指定颜色和位置的折线.具体的做法如下:首先注意在网页文档的html标签里必须包含v=“urn:schemasmicrosoftcom:vml”的命名空间;然后可以使用GPolyline折线对象,具体的语法如下:new GPolylin(points,color,weight,poacity)其中points代表的就是折线中的节点,为GLatLng对象数组;color代表颜色,可以省略;weight即为折线的宽度,以像素值表示,也可以省略;poacity表示GPolyline图层的透明度,也可以省略.2系统的设计与实现2.1数据库的设计在基于Web2.0的公交信息查询系统中,Google地图的使用中线路的标示是一个难点,关键的问题是拐点的弧度问题.可以通过在站点信息表里面添加了一个字段qmstaion_transferpoint来保存站点的拐点处来解决.station的站点信息表如表1所示.表1站点信息表
Table 1Table of the stations information
字段名称数据类型说明是否必填station_id自动编号主键,站点编号是station_name文本公交车站点名否station_bus数字过该站点的公交车线路否station_addupdate日期/时间添加/修改时间否station_lat文本站点经度否station_lng文本站点纬度否staion_transferpoint文本拐点的名字否数据库中有两个表车次信息表和线路信息表分别存放车次信息和站点信息.车次信息表主要用来存储公交车的票价说明、首末班时间等信息,如表2所示;线路信息表主要用来存储线路的信息,如该公交车线路的线路号、该线路所经过的站点等信息,如表3所示.表2车次信息表
Table 2Table of the bus number information
字段名称数据类型说明是否必填bus_id自动编号主键是bus_name文本公交车的线路号否bus_ratebz数字公交车票价说明否bus_starttime日期/时间公交车首班时间否bus_endtime日期/时间公交车末班时间否bus_addupdate日期/时间添加修改时间否表3线路信息表
Table 3Table of routes information
字段名称数据类型说明是否必填route_id自动编号主键是route_name文本公交车的线路号否station_address文本该车次所经过的线路是route_addupdate日期/时间添加修改时间否车次信息表、站点信息表及线路信息表中,这三个表是基于Web2.0的公交信息查询系统设计中必不可少的三个表,它们ER图如图1所示[8].图1车次表、站点表和线路表的ER图
Fig.1ER diagram of the bus number information table,stations information table and routes information table第9期何成万,等:基于Web2.0的公交信息查询系统的设计与实现
武汉工程大学学报第31卷
2.2换乘查询的详细设计站点的查询分为三步:如果能够将所需的车次能够一次查出来,则只需要一次查询,即直达车;没有找到直达车,如果没有直达车,则进行一次换乘查询;一次换乘没有找到相应的车次,则进行二次换乘查询.查询的流程图如图2所示.图2换乘查询
Fig.2Transit query2.3实现线路查询时,输入要查询的线路后,查找数据库中的线路信息表,得到station_address 字段所保存的信息;通过station_address字段,可以得到该线路所经过的所以的站点集合,将这些站点依次按顺序保存在数组1中,然后在站点信息表中依次查找出相应站点的经度和纬度,依次保存在数组2和数组3中.同样,换乘查询时,输入起始站点和终点站点,通过换乘查询,可以得到所要经过的所有站点集合,将这些站点依次保存到数组1中,然后依次查找站点信息表中查找出相应站点的经度和纬度,依次保存在数组2和数组3中.最后通过Google Maps API中文同步文档所提供的帮助,分别用Google Maps API所提供的控件或者对象Gmarker、GmarkerManage以及Gpolyline折线对象,来标注地标、显示GMarkerManage对象的GMarker地标以及标注所经过的线路.创建GMarker对象时,其语法格式Var marker0=new GMarker(lng,lat)中的(lng,lat)分别是数组2,数组3中所保存的相应的站点经度和纬度.使用GPolyline折线对象,其语法格式new GPolylin(points,color,weight,poacity)中的points则是数组1中所保存的一系列站点的经度和纬度.根据上述设计,基于Google Map API实现了公交信息查询系统.图3是查询线路界面显示的例子.图3查询线路的界面显示
Fig.3Interface of the query route3结语本系统实现了城市公交换乘的查询功能,并且利用Google公司提供的Google Map API实现了站点和线路的图形化显示,操作直观、方便.今后的主要工作是对功能进行改进和完善,包括:如何使Google 地图上面的线路更加的准确圆滑,如何使Google 地图上某个站点的经纬度更加的精确,以及如何使用Ajax提高系统的效率等.