专利名称:用于提供公交线路的方法和系统的制作方法
技术领域:
本发明涉及交通领域,具体而言,涉及一种用于提供公交线路的方法和系统。
背景技术:
现有的公交查询一般是基于数据库进行线路_站点关系的查询,具体来说,将起 点站的所有线路中能去到终点站的公交线路列出来,或者将经过起点站的所有公交线路列 出,再从中找出能去到终点站的公交线路。在实现本发明过程中,发明人发现现有技术中公交查询系统对数据获取的效率较 低,导致用户对公交线路查询的速度较慢。
发明内容
本发明旨在提供一种用于提供公交线路的方法和系统,以解决现有技术中公交查 询系统对数据获取的效率较低,导致用户对公交线路查询的速度较慢问题。在本发明的实施例中,提供了一种用于提供公交线路的方法,包括以下步骤通过K维树找出出发地和目的地附近的公交站点,其中,K维树是公交站点的索 引,K等于2或3;根据公交站点给出出发地到目的地之间的公交线路。优选地,在上述方法中,2维树是公交站点的索引具体包括根据地理位置的经度值和纬度值建立X轴-Y轴的2维空间;在2维树的偶数层按X坐标将公交站点排序,将公交站点的X坐标上相邻的公交 站点作为公交站点的左、右子树;在2维树的奇数层按Y坐标将公交站点排序,将公交站点的Y坐标上相邻公交站 点作为公交站点的左、右子树;其中,在2维树中,设某个公交站点为根结点,其深度为0,将2维树分为偶数层和
奇数层。优选地,在上述方法中,站点信息具体表示为(SPl,SP2,X,Y,NAME, ID),其中SPl和SP2分别表示与公交站点相邻的公交站点;X和Y分别表示公交站点的经度值和维度值;NAME表示公交站点的站点名;ID表示公交站点在2维树的编号。优选地,在上述方法中,还包括以下步骤将能坐车到公交站点的其他公交站点用图的方式缓存。优选地,在上述方法中,根据公交站点给出出发地到目的地之间的公交线路具体 包括计算目的地对应的公交站点与目的地之间的距离;如果距离小于等于设定值,根据用户设定的权值给出出发地到目的地的公交线路。优选地,在上述方法中,计算目的地对应的公交站点与目的地之间的距离具体包 括计算目的地对应的公交站点A与目的地B之间的距离Distance的公式如下Distance = R^Arccos(C)*Pi/180 ;C = sin (LatA*Pi/180)*sin(LatB*Pi/180) +cos (LatA*Pi/180)*cos (LatB*Pi/180)*cos((MLonA-MLonB)*Pi/180);其中,R为地球的平均半径,MLonA和MLatA分别为公交站点A的经度值和纬度值, MLonB和MLatB分别为目的地B的经度值和纬度值,Pi为圆周率。在本发明的实施例中,还提供了一种用于提供公交线路的系统,包括索引模块,用于将公交站点索引到K维树;查询模块,用于根据用户输入的出发地和目的地查询出发地和目的地附近的公交 站点;计算模块,用于根据公交站点给出出发地到目的地之间的公交线路。优选地,在上述系统中,查询模块采用.NET Remoting作为中间数据传递协议。在本实施例中,通过将的公交站点索引到K维树,完成了对存储在介质上的公交 站点的数据信息的描述,从而可以根据输入的出发地和目的地选择K维树中分支的方向, 提高了数据获取的效率,使得用户可以较快地查询到所要乘坐的公交线路,克服了现有技 术中公交查询系统对数据获取的效率较低,导致用户对公交线路查询的速度较慢问题。
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发 明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中图1示出了根据本发明一个实施例的用于提供公交线路的方法流程图;图2示出了根据本发明一个实施例的2维树示意图;图3示出了根据本发明一个实施例的经过起点的所有公交线路图;图4示出了根据本发明一个实施例的用于提供公交线路的系统模块图;图5示出了根据本发明一个实施例的R树示意图。
具体实施例方式下面将参考附图并结合实施例,来详细说明本发明。图1示出了根据本发明一个实施例的用于提供公交线路的方法流程图,包括以下 步骤S102,通过K维树找出出发地和目的地附近的公交站点,其中,K维树是公交站点 的索引,K等于2或3;S104,根据公交站点给出出发地到目的地之间的公交线路。在本实施例中,通过将的公交站点索引到K维树,完成了对存储在介质上的公交 站点的数据信息的描述,从而可以根据输入的出发地和目的地选择K维树中分支的方向, 提高了数据获取的效率,使得用户可以较快地查询到所要乘坐的公交线路,克服了现有技术中公交查询系统对数据获取的效率较低,导致用户对公交线路查询的速度较慢问题。例如,在上述实施例中,公交站点可以是公共汽车、地铁、轻轨等站点。优选地,在上述方法中,2维树是公交站点的索引具体包括根据地理位置的经度值和纬度值建立X轴-Y轴的2维空间;在2维树的偶数层按X坐标将公交站点排序,将公交站点的X坐标上相邻的公交 站点作为公交站点的左、右子树;在2维树的奇数层按Y坐标将公交站点排序,将公交站点的Y坐标相邻的公交站 点作为公交站点的左、右子树;其中,在2维树中,设某个公交站点为根结点,其深度为0,将2维树分为偶数层和
奇数层。在本实施中,通过构造2维的平衡树,可以较快地对数据信息进行查找,提高了查 找效率。例如,2维树可以这样构建,开始时,定义站点集为S,树的根为整个平面,然后确 定分割点P,P e S,过点P的平行于Y轴的直线把S分割成两个集合Sl和S2,从中选取分 割点Pi、P2,分别过pi、p2作平行于X轴的直线分割,以此类推。图2示出了根据本发明一个实施例的2维树示意图。优选地,在上述方法中,站点信息具体表示为(SPl,SP2,X,Y,NAME, ID),其中SPl和SP2分别表示与公交站点相邻的公交站点;X和Y分别表示公交站点的经度值和维度值;NAME表示公交站点的站点名;ID表示公交站点在2维树的编号。每个公交站点用K维树中一个结点来表示,通过结点中的6个域表现出来。开始 的两个域是指向结点两个子节点的指针,各自相对应方向是左和右;X和Y各自保存公交站 点经度和纬度值;NAME域用来保存站点名;ID域表示公交站点在数据库对应的ID。当结点P是一个X识别器。那么所有具有X坐标值小于P的结点将放在左树中, 而X坐标值大于或等于P的结点将放到P的右子树中。对于一个Y识别器的结点有同样的 约定。优选地,在上述方法中,还包括以下步骤将能坐车到公交站点的其他公交站点用图的方式缓存。在本实施例中,通过把每一个站点经过的所有线路能到达的所有公交站点以图的 形式保存下来,在下次的公交线路查询汇总,可以节省一步遍历的步骤,节省了时间,提高 了查找公交线路的速度。图3示出了根据本发明一个实施例的经过起点的所有公交线路图,如图3所示,不 带箭头的线表示经过起点的某一条线路,带箭头的线表示保存在图中的边记录。图用邻接表保存,在邻接表中,对图中每个顶点建立一个单链表(并按建立的次 序编号),第i个单链表中的结点表示依附于顶点vi的边(对于有向图是以顶点vi为尾的 弧)。每个结点由三个域组成邻接点域(adjvex),用以指示与vi邻接的点在图中的位置, 链域(nextarc)用以指向依附于顶点vi的下一条边所对应的结点,存放数据的域(info) 用于记录相关信息,例如乘坐线路和距离等。
优选地,在上述方法中,根据公交站点给出出发地到目的地之间的公交线路具体 包括计算目的地对应的公交站点与目的地之间的距离;如果距离小于等于设定值,根据用户设定的权值给出出发地到目的地的公交线 路。例如,当用户希望得到更省时间的方案,那么速度的权重比例将会更高,最终在对各方 案分别计算分数进行排序时,速度较快的线路(例如地铁)由于分数更高,它们在所有换乘 的方案中排名靠前的可能性就越大。优选地,在上述方法中,计算目的地对应的公交站点与目的地之间的距离具体包 括 计算目的地对应的公交站点A与目的地B之间的距离Distance的公式如下Distance = R^Arccos(C)*Pi/180 ;C = sin (LatA*Pi/180)*sin(LatB*Pi/180) +cos (LatA*Pi/180)*cos(LatB*Pi/180)*cos((MLonA-MLonB)*Pi/180);其中,R为地球的平均半径,MLonA和MLatA分别为公交站点A的经度值和纬度值, MLonB和MLatB分别为目的地B的经度值和纬度值,Pi为圆周率。地球是一个近乎标准的椭球体,它的赤道半径为6378. 140千米,极半径为 6356. 755千米,平均半径6371. 004千米。如果我们假设地球是一个完美的球体,那么它 的半径就是地球的平均半径,记为R。如果以O度经线为基准,那么根据地球表面任意两 点的经纬度就可以计算出这两点间的地表距离(这里忽略地球表面地形对计算带来的误 差,仅仅是理论上的估算值)。设第一点A的经纬度为(LonA,LatA),第二点B的经纬度 为(LonB,LatB),按照O度经线的基准,东经取经度的正值(Longitude),西经取经度负值 (-Longitude),北纬取 90-纬度值(90-Latitude),南纬取 90+ 纬度值(90+Latitude),则经 过上述处理过后的两点被计为(MLonA,MLatA)和(MLonB,MLatB)。这里,R和Distance单位是相同,如果是采用6371. 004千米作为半径,那么 Distance就是千米为单位,如果要使用其他单位,比如mile,还需要做单位换算,1千米= 0. 621371192mile如果仅对经度作正负的处理,而不对纬度作90-Latitude (假设都是北半球,南半 球只有澳洲具有应用意义)的处理,那么公式将是C = sin (LatA)*sin (LatB) +cos (LatA)*cos(LatB)*cos(MLonA-MLonB);Distance = R*Arccos(C)*Pi/180。如果三角函数的输入和输出都采用弧度值,那么公式还可以写作C = sin (LatA*Pi/180)*sin(LatB*Pi/180) +cos (LatA*Pi/180)*cos(LatB*Pi/180)*cos((MLonA-MLonB)*Pi/180);Distance = R*Arccos(C)*Pi/180。由于起点和终点是由经纬度给出,而各站点的经纬度都已知,因此可以求出各步 行段的直线距离,以此来近似实际步行距离。图4示出了根据本发明一个实施例的用于提供公交线路的系统模块图,包括索引模块10,用于将公交站点索引到K维树;
7
查询模块20,用于根据用户输入的出发地和目的地通过K维树查询出发地和目的 地附近的公交站点;计算模块30,用于根据公交站点给出出发地到目的地之间的公交线路。在本实施例中,通过将的公交站点索引到K维树,完成了对存储在介质上的公交 站点的数据信息的描述,从而可以根据输入的出发地和目的地选择K维树中分支的方向, 提高了数据获取的效率,使得用户可以较快地查询到所要乘坐的公交线路,克服了现有技 术中公交查询系统对数据获取的效率较低,导致用户对公交线路查询的速度较慢问题。优选地,在上述系统中,查询模块采用.NET Remoting作为中间数据传递协议。. NET Remoting是微软公司.NET编程框架自带的一种远程调用通信协议,远程调 用又可称为远程过程调用。该协议允许运行于一台计算机的程序调用另一台计算机的子程 序,而程序员无需额外地为这个交互作用编程。由于处理全国的数据量非常大,本实施例采用.NET Remoting作为分布式计算的 中间数据传递协议,可将不同城市或地区的数据分布开,从而提高并发请求数。为了以经纬度判断起点终点所在城市,本实施例采用R树空间区域索引技方法。 R树是一种高度平衡的树,由中间节点和叶节点组成,实际数据对象的最小外接矩形存储在 叶节点中,中间节点通过聚集其低层节点的外接矩形形成,包含所有这些外接矩形。其后, 人们在此基础上针对不同空间运算提出了不同改进,才形成了一个繁荣的索引树族,是目 前流行的空间索引。R树是B树向多维空间发展的另一种形式,它将空间对象按范围划分,每个结点都 对应一个区域和一个磁盘页,非叶结点的磁盘页中存储其所有子结点的区域范围,非叶结 点的所有子结点的区域都落在它的区域范围之内;叶结点的磁盘页中存储其区域范围之内 的所有空间对象的外接矩形。每个结点所能拥有的子结点数目有上、下限,下限保证对磁盘 空间的有效利用,上限保证每个结点对应一个磁盘页,当插入新的结点导致某结点要求的 空间大于一个磁盘页时,该结点一分为二。R树是一种动态索引结构,即它的查询可与插 入或删除同时进行,而且不需要定期地对树结构进行重新组织。R树可以用来访问二维或者更高维区域对象组成的空间数据。树上有两类结点 叶子结点和非叶子结点。每一个结点由若干个索引项构成。对于叶子结点,索引项形如 (Index, Ob j_ID)。其中,Index表示包围空间数据对象的最小外接矩形MBR,0bj_ID标识一 个空间数据对象。对于一个非叶子结点,它的索引项形如(Index,Child_P0inter)。Child, Pointer指向该结点的子结点。Index仍指一个矩形区域,该矩形区域包围了子结点上所有 索引项MBR的最小矩形区域。图5示出了根据本发明一个实施例的R树示意图。R树的插入与许多其他树的操作一样,可以归纳为一个递归过程。首先从根结点出 发,按照一定的标准,选择其中一个孩子插入新的空间要素,然后再从以孩子为根的子树的 根结点出发重复进行上面操作,直到叶子结点。设M和m(m<M)为R树结点中单元个数的 上限和下限,当新的空间要素的插入使叶子结点中的单元个数超过M时,需要进行结点的 分裂操作。分裂操作是将溢出的结点按照一定的规则分为若干部分。在其父结点删除原来 对应的单元,并加入由分裂产生的相应的单元。如果这样引起父结点的溢出,则继续对父结 点进行分裂操作。分裂操作也是一个递归过程,它保证了空间要素插入后R树仍能保持平
从R树中删除一个空间要素与插入类似,首先从R树中查找到记录该空间要素所 在的叶子结点,这就是R树的查找。从根结点开始,依次检索包含空间要素的单元所对应孩 子结点为根结点的子树。查询方式利用了 R树的结构特征,减少了检索的范围,提高了检索 的效率。查找到该空间要素所在的叶子结点后,删除其对应的单元。如果删除后该叶子结 点单元个数少于m,需要进行R树的压缩操作,将单元数过少的结点删除。如果父结点因此 单元数也少于m,则继续对父结点重复进行该操作。最后将因进行结点调整而被删除的空 间要素重新插入到R树中。这就是R树的压缩操作,它使得R树的每个结点单元数不低于 m这个下限,从而保证了 R树结点的平衡和利用率。从R树的结构可以看出,让空间上靠近的空间要素拥有尽可能近的共同祖先,能 提高R树的查询效率。在构造R树的时候,尽可能让空间要素的空间位置的远近体现在其最 近的共同祖先的远近上,形象的说就是让聚集在一起的空间要素尽可能早的组合在一起。 插入中选择子树的标准,分裂操作、插入操作中选择子树的标准,分裂操作中的分裂方法, 都是为了体现这一目标。本实施例将每个城市或地区作为一个多边形存储在R树中,查询时由起点终点的 经纬度在R树中查询出相应的城市或地区,再调用对应的服务程序。本实施例的用于提供公交线路的系统采用负载均衡策略进行架构。负载均衡建立 在现有网络结构之上,它提供了一种廉价有效的方法扩展服务器带宽和增加吞吐量,加强 网络数据处理能力,提高网络的灵活性和可用性。它主要完成以下任务解决网络拥塞问 题,服务就近提供,实现地理位置无关性;为用户提供更好的访问质量;提高服务器响应速 度;提高服务器及其他资源的利用效率;避免了网络关键部位出现单点失效。为了满足高服务质量的需求,本发明采用反向代理技术实现负载均衡策略。代理 服务把客户的连接请求以反向代理的方式动态地转发给内部网络上的多台服务器进行处 理,这样可以避免单一服务器失效而导致整个服务失效,从而达到负载均衡的目的。同时, 由于反向代理本身占用系统资源极小,因此可以以低成本设置多个反向代理作为服务入 口,进而运用其他负载均衡策略如DNS负载均衡。在上述实施例中的用于提供公交线路的系统中,当第一次用户传入某个城市的起 点、终点经纬度,进行换乘,此城市的缓存机制开始触发,首先进行站对站索引,同时,使用K 维树,对各站建空间索引。接着,通过空间索引,得知客户可以到达的站点,接着使用站对站 索引,采用上述实施例汇总的用于提供公交线路的方法进行调试,并且使用不同的权值,规 划出最适合用户的线路方案。显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用 的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成 的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储 在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们 中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的 硬件和软件结合。以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技 术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修 改、等同替换、改进等,均应包含在本发明的保护范围之内。
权利要求
一种用于提供公交线路的方法,其特征在于,包括以下步骤通过K维树找出出发地和目的地附近的公交站点,其中,所述K维树是所述公交站点的索引,K等于2或3;根据所述公交站点给出所述出发地到所述目的地之间的公交线路。
2.根据权利要求1所述的方法,其特征在于,所述K维树是所述公交站点的索引具体包括根据地理位置的经度值和纬度值建立X轴-Y轴的2维空间; 在所述2维树的偶数层按X坐标将所述公交站点排序,将所述公交站点的X坐标上相 邻的公交站点作为所述公交站点的左、右子树;在所述2维树的奇数层按Y坐标将所述公交站点排序,将所述公交站点的Y坐标上相 邻的公交站点作为所述公交站点的左、右子树;其中,在所述2维树中,设某个公交站点为根结点,其深度为0,将所述2维树分为偶数 层和奇数层。
3.根据权利要求2所述的方法,其特征在于,所述站点信息具体表示为(SP1,SP2,X, Y, NAME, ID),其中所述SPl和所述SP2分别表示与所述公交站点相邻的公交站点; 所述X和所述Y分别表示所述公交站点的经度值和维度值; 所述NAME表示所述公交站点的站点名; 所述ID表示所述公交站点在所述2维树的编号。
4.根据权利要求1所述的方法,其特征在于,还包括以下步骤 将能坐车到所述公交站点的其他所述公交站点用图的方式缓存。
5.根据权利要求1所述的方法,其特征在于,根据所述公交站点给出所述出发地到所 述目的地之间的公交线路具体包括计算所述目的地对应的公交站点与所述目的地之间的距离;如果所述距离小于等于设定值,根据用户设定的权值给出所述出发地到所述目的地的 公交线路。
6.根据权利要求5所述的方法,其特征在于,计算所述目的地对应的公交站点与所述 目的地之间的距离具体包括计算所述目的地对应的公交站点A与所述目的地B之间的距离Distance的公式如下 Distance = R*Arccos (C)*Pi/180 ; C = sin(LatA*Pi/180)*sin(LatB*Pi/180)+cos(LatA*Pi/180)*cos(LatB*Pi/180)*cos((MLonA-MLonB)*Pi/180); 其中,R为地球的平均半径,MLonA和MLatA分别为所述公交站点A的经度值和纬度值, MLonB和MLatB分别为所述目的地B的经度值和纬度值,Pi为圆周率。
7.一种用于提供公交线路的系统,其特征在于,包括 索引模块,用于将公交站点索引到K维树;查询模块,用于根据用户输入的出发地和目的地查询所述出发地和所述目的地附近的 公交站点;计算模块,用于根据所述公交站点给出所述出发地到所述目的地之间的公交线路。
8.根据权利要求7所述的系统,其特征在于,所述查询模块采用.NET Remoting作为中 间数据传递协议。
全文摘要
本发明提供了一种用于提供公交线路的方法和系统,方法包括以下步骤通过K维树找出出发地和目的地附近的公交站点,其中,K维树是公交站点的索引,K等于2或3;根据公交站点给出出发地到目的地之间的公交线路。本发明克服了现有技术中公交查询系统对数据获取的效率较低,导致用户对公交线路查询的速度较慢问题。
文档编号G06F17/30GK101944096SQ20091015893
公开日2011年1月12日 申请日期2009年7月8日 优先权日2009年7月8日
发明者柳宗伟 申请人:广东融讯信息科技有限公司