发明内容
鉴于上述现有技术的不足,本发明的目的在于提供一种主动寻找具有相似行车路线的车友的方法及***,旨在解决现有的寻找车友的方法效率、效果差的问题。
本发明的技术方案如下:
一种主动寻找具有相似行车路线的车友的方法,其中,包括步骤:
A、每隔预定时间将多台车辆所在位置点上报至服务器,所述位置点为车辆的经度及纬度;
B、当所述车辆中的第一车辆向服务器发出寻找具有相似行车路线的车友的请求时,计算每一台车辆在一个预定时间段内上报的位置点的经度及纬度的算术平均数,将该算术平均数作为相应车辆的中心位置点;
C、从服务器中筛选出与所述第一车辆的中心位置点小于预定距离的车辆;
D、将第一车辆与筛选出的车辆的位置点的经度及纬度的精度精确到预定位数,依次判断第一车辆所有上报的位置点中,是否有超过预定比例的位置点在筛选出的车辆上报的位置点预设范围内,当是时,则将筛选出的车辆中符合条件的目标车辆设置为所述第一车辆的潜在车友。
所述主动寻找具有相似行车路线的车友的方法,其中,所述步骤A还包括:
服务器接收到上报的位置点后,判断同一车辆此次上报的位置点与上一次上传的位置点是否相同,当是时,不保存此次上报的位置点,当否时,保存此次上报的位置点。
所述主动寻找具有相似行车路线的车友的方法,其中,所述预定位数为小数点后三位。
所述主动寻找具有相似行车路线的车友的方法,其中,所述步骤C中,第一车辆与服务器中的第二车辆的中心位置点的距离为:
其中,latitude1和longitude1分别为第一车辆中心位置点的纬度及经度,latitude2和longitude2分别是第二车辆中心位置点的纬度及经度。
所述主动寻找具有相似行车路线的车友的方法,其中,所述预定比例为70%。
所述主动寻找具有相似行车路线的车友的方法,其中,所述步骤B中预定时间段为请求发出前的一个星期。
所述主动寻找具有相似行车路线的车友的方法,其中,所述步骤D之前中,还包括步骤:
接收用户时段过滤请求;
对第一车辆所有上报的位置点进行时段过滤;
对筛选出的车辆上报的位置点进行时段过滤。
一种主动寻找具有相似行车路线的车友的***,其中,包括服务器及与所述服务器连接的多台车辆,所述车辆包括位置点上报模块,所述服务器包括中心位置点计算模块、车辆筛选模块以及车友查找模块;
所述位置点上报模块,用于每隔预定时间将车辆所在位置点上报至服务器,所述位置点为车辆的经度及纬度;
所述中心位置点计算模块,用于当所述车辆中的第一车辆向服务器发出寻找具有相似行车路线的车友的请求时,计算每一台车辆在一个预定时间段内上报的位置点的经度及纬度的算术平均数,将该算术平均数作为相应车辆的中心位置点;
所述车辆筛选模块,用于当第一车辆寻找具有相似行车路线的车友时,从服务器中筛选出与所述第一车辆的中心位置点小于预定距离的车辆;
所述车友查找模块,用于将第一车辆与筛选出的车辆的位置点的经度及纬度的精度精确到预定位数,依次判断第一车辆所有上报的位置点中,是否有超过预定比例的位置点在筛选出的车辆上报的位置点预设范围内,当是时,则将筛选出的车辆中符合条件的目标车辆设置为所述第一车辆的潜在车友。
所述主动寻找具有相似行车路线的车友的***,其中,所述服务器还包括:
位置点比较模块,用于接收到上报的位置点后,判断同一车辆此次上报的位置点与上一次上传的位置点是否相同,当是时,不保存此次上报的位置点,当否时,保存此次上报的位置点。
所述主动寻找具有相似行车路线的车友的***,其中,所述服务器还包括时段过滤模块,所述时段过滤模块包括:
请求接收单元,用于接收用户时段过滤请求;
第一车辆时段过滤单元,用于对第一车辆所有上报的位置点进行时段过滤;
筛选车辆时段过滤单元,用于对筛选出的车辆上报的位置点进行时段过滤。
有益效果:本发明通过将多台车辆每隔预定时间上报的位置点进行计算,先初步筛选出可能具有相似行车路线的车辆,然后对位置点的精度进行调整,并对各个车辆的位置点一一比较,从而精确筛选出具有相似行车路线的潜在车友,由于本发明是一种主动寻找车友的过程,而不是被动的等待回复,所以本发明寻找车友的效率高,效果也大幅提高。
具体实施方式
本发明提供一种主动寻找具有相似行车路线的车友的方法及***,为使本发明的目的、技术方案及效果更加清楚、明确,以下对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
请参阅图1,图1为本发明主动寻找具有相似行车路线的车友的方法较佳实施例的流程图,如图所示,其包括步骤:
S101、每隔预定时间将多台车辆所在位置点上报至服务器,所述位置点为车辆的经度及纬度;
S102、当所述车辆中的第一车辆向服务器发出寻找具有相似行车路线的车友的请求时,计算每一台车辆在一个预定时间段内上报的位置点的经度及纬度的算术平均数,将该算术平均数作为相应车辆的中心位置点;
S103、从服务器中筛选出与所述第一车辆的中心位置点小于预定距离的车辆;
S104、将第一车辆与筛选出的车辆的位置点的经度及纬度的精度精确到预定位数,依次判断第一车辆所有上报的位置点中,是否有超过预定比例的位置点在筛选出的车辆上报的位置点预设范围内,当是时,则将筛选出的车辆中符合条件的目标车辆设置为所述第一车辆的潜在车友。
在步骤S101中,首先是车辆安装的车机***将其车辆的所在位置点上报给服务器,一般是每隔30s上报一次位置点。其中,所述位置点是指车辆的经纬度信息,经纬度的格式为标准格式Double(即包含所在位置的经度和纬度),其上传时的精确度为小数点后六位,如(22.540712,114.095432),而服务器接收到位置点的信息后,不仅记录保存位置点的经度及纬度,还记录上报的车机ID以及上报的时间,其存储格式表一:
表一位置点存储格式
SeqId |
DevId |
PX |
PY |
LogTime |
1 |
DEV12315 |
22.540712 |
114.095432 |
2012-11-2108:28:34 |
2 |
DEV12315 |
22.540713 |
114.100425 |
2012-11-2108:29:04 |
3 |
DEV12315 |
22.540926 |
114.104143 |
2012-11-2108:29:34 |
4 |
DEV12315 |
22.541637 |
114.108852 |
2012-11-2108:31:04 |
其中,SeqId表示记录序号,DevId表示车机ID,PX表示经度,PY表示纬度,LogTime表示上报的时间。
上面的数据片段是一段真实的位置点记录,其中,第3条和第4条之间的时间相差了90s,而不是30s,其原因是这段时间内车辆并未移动(可能是临时停车或者等红绿灯等原因),所以这段时间上报的位置点都是相同的,而如果存在这种情况,则只上传不同的位置点,其存在一个判断的过程。
具体来说,所述步骤S101还包括:
服务器接收到上报的位置点后,判断同一车辆此次上报的位置点与上一次上传的位置点是否相同,当是时,不保存此次上报的位置点,当否时,保存此次上报的位置点。这样上报到服务器中的数据都是不同的位置点,相同的位置点只保留一次,这些位置点的数据都保存在服务器的数据库中,供后续使用。
此外,本发明中寻找相似行车路线的车友,主要是针对用车时段与路线比较稳定和正常的上班族,例如,用户每天的平均用车时间为3个小时,这种情况下,每台车辆一个星期内上报的位置点的个数估算为2160个,假如有1万台车辆,一个星期内上报的记录在2160万条,考虑到重复位置不上报、周末不用车等情况,应该在2000万级以下,从而对于本发明可能的数据记录进行一个粗略的估计。
在步骤S102中,当所述车辆中的某一车辆(本发明以第一车辆为例)需要寻找具有相似行车路线的车友时,需向服务器发出请求,服务器接收到请求后,开始计算每一台车辆在一个预定时间段内上报的位置点的经度及纬度的算术平均数,将该算术平均数作为相应车辆的中心位置点。此步骤是为了大致的判别与服务器建立连接的车辆是否大致具有相似路线,因为上述方法计算得到的中心位置点是车辆行车路线的中心位置,所以如果两个车辆的中心位置点相差较大时,则说明这两台车辆不太可能具有相似路线。
上述的预定时间段是第一车辆发出请求前的一个星期,这样既避免了计算过多的数据,又能与最近的出行规律相符。
在步骤S103中,从服务器中筛选出与所述第一车辆的中心位置点小于预定距离的车辆,此步骤是利用前面计算得到的各个车辆的中心位置点,判断每一车辆与第一车辆的中心位置点的距离,假如大于预定距离,则说明,这两台车辆的行车路线不太可能相似,从而筛选出与第一车辆可能具有相似行车路线的车辆。所述的预定距离较佳的是1公里,但该值并不是固定的,具体可以根据实际情况调整。这种筛选方法也将一些具有形状相似同时相隔较远(例如相隔一个街道)的行车路线筛选掉,所以形状相似的行车路线也不一定是相似的。
上述的筛选方法是一个粗略的过程,因为,即使两台车辆的中心位置点相距很近,例如两台车辆的中心位置点处于同一十字交叉路口上,但这两台车辆的行车路线可能完全不同,此步骤不能排除这种情况,但上述的筛选方法能过滤掉大部分不相似的路径,从而极大的减轻了下一步计算的工作量。
两台车辆的中心位置点的计算公式如下:
在上述公式中,S表示A中心位置点与B中心位置点的距离,Lat1表示A中心位置点的纬度,Lat2表示B中心位置点的纬度,a表示A、B两中心位置点的纬度之差,b表示A、B两中心位置点的经度之差,6378.137表示地球的半径,单位为千米。
若以本发明中上报的经纬度格式,上述计算公式可以简化为:
A中心位置点与B中心位置点的距离S为:
上述公式中,latitude1和longitude1分别为第一车辆中心位置点的纬度及经度,latitude2和longitude2分别是第二车辆中心位置点的维度及经度。
在步骤S104中,从上报的车辆中筛选出可能具有相似行车路线的车辆后,需要进一步的精确筛选,此过程包括先将上报的位置点的精度进行调整,然后根据调整后的位置点来计算。
具体来说,因为上报到服务器中的位置点的经度及纬度的精度为小数点第6位,而经过在地图上测算,第4位小数每增加1单位,移动的距离在1到2米之间,即第4位小数的精度在1到2米之间。同样经过测算,第4位小数的精度在100米左右,第2位的精度在1000米左右。
而车辆上报位置点的时间间隔为30s,按照平均车速30km/h计算的话,相邻两个位置点的平均距离为250米,如此,在判断行车路线是否相似的时候,可以将位置点的经度及纬度的精度精确到小数点第3位即可,也就是说,若两个位置点的经度及纬度的小数点后三位是一样的,则可以认为这两个位置点是重合的或者非常接近。如果将精度精确到小数点第4位,则判断的标准大概在1米到2米左右,这样的标准过于精细,基本无法寻找到相似路线的车友,而如果将精度精确到小数点第2位,则判断的标准大概在1000米左右,这样的标准又过于粗略,寻找到的相似路线的车友过多,最终得到的效果也较差。
在对精确度进行调整后,需要依次判断第一车辆所有上报的位置点中,是否有超过预定比例的位置点在筛选出的车辆上报的位置点中。
在具体操作过程中,可以将发起请求的车辆记为M0,而查找的车辆可以记为M1,M2,…,MN。
M0的行车路线可以看作是其上一星期内上报的位置点集合,如M0对应的位置点集合为C0,M1对应的位置点集合为C1,M2对应的位置点集合为C2,…,MN对应的位置点集合为CN,每一个集合中的元素都是一系列的位置点。集合和位置点的概念在Java中对应List和Point对象,Point对象具有两个属性,经度和纬度,并精确到小数点第3位。
现在一一比较M0的位置点集合C0与其他车辆的位置点集合,先比较集合C0与C1,如果C0中有超过70%的元素(即位置点)在C1中,则判定M1是和M0具有相似行车路线的车友,同时,如果C1中没有超过70%的元素在C0中,则判定M0不是和M1具有相似行车路线的车友,即这种比较是单向的,M1是M0的车友,而M0不一定是M1的车友。其体现在具体的行车路线上,是M0的绝大部分行车路线(超过70%)在M1的行车路线上,但是M1只有部分行车路线(低于70%)在M0的行车路线上。
重复上面的比较过程,依次将C0与C2,C3,…,CN比较,若C0中有超过70%的元素在比较的集合中,则说明相应的车辆是M0具有相似行车路线的车友。
进一步,本方法还可以进一步匹配寻找上述C0与C1,C2,C3,…,CN的时间对应一致的关联,寻找在相似时段,相似行车路线的车友。比如M0与M1在一天中具有相同的行车路线,可以认为M0与M1是在一天中的行车车友,但M0与M1在一天中的出行时间可能相差较大,所以还可以进一步寻找在精确到一个时刻内,例如一小时内,甚至同一时刻的车友。进而,如图2所示,本方法还包括步骤:
S201、接收用户时段过滤请求,此过程之前用户需设定一个过滤时段,然后发出时段过滤请求,例如用户可以请求过滤出上班时段7:30~8:30或下班时段5:30~6:30的车友,或者根据用户的出行规律请求过滤符合用户需求的任意过滤时段。
S202、对第一车辆所有上报的位置点进行时段过滤;时段过滤的过程是将根据用户设定的过滤时段,将第一车辆中不符合该过滤时段的所有上报位置点过滤掉,从而保留符合过滤时段的位置点,例如用户设定的过滤时段为7:30~8:30,则只保留7:30~8:30之间的第一车辆的位置点,用于前文S104中的比较判断步骤。
S203、对筛选出的车辆上报的位置点进行时段过滤,此步骤与对第一车辆所有上报位置点的时段过滤过程相同。在进行时段过滤之后,相应的位置点数将根据过滤时段的长短而变化,若过滤时段较短,则每一车辆保留的位置点将较少,为了保证寻找车友的精确性,所以需适当增加位置点的集合大小,即增加预定时间段的大小,可以将预定时间段的大小设定为两周、一个月、两个月等等,具体可以设置一个过滤时段与预定时间段的对应关系,当用户选择某一过滤时段时,则根据所述对应关系查找出预定时间段的大小。
值得说明的是,上述相似时段的筛选过程是在步骤S104之前执行,可以是与第一次查询一起同时执行时段的筛选,也可以在后续查询结果的基础上进行筛选。
在寻找到有相似行车路线的车友后,该车友仅仅是第一车辆的潜在好友,服务器可以向被找到的潜在车友绑定的移动终端推送好友请求消息,被找到的潜在车友可以自行决定是否与其他用户建立好友关系,若被找到的潜在车友接受了好友请求,则将被找到的潜在车友与主动寻找的车主建立好友关系,双方也可以进行接下来的信息沟通。
基于上述方法,本发明还提供一种主动寻找具有相似行车路线的车友的***,如图3所示,包括服务器200及与所述服务器200连接的多台车辆100(图中仅示意一台),所述车辆100包括位置点上报模块110,所述服务器200包括中心位置点计算模块210、车辆筛选模块220以及车友查找模块230;
所述位置点上报模块110,用于每隔预定时间将车辆所在位置点上报至服务器,所述位置点为车辆的经度及纬度;
所述中心位置点计算模块210,用于当所述车辆中的第一车辆向服务器发出寻找具有相似行车路线的车友的请求时,计算每一台车辆在一个预定时间段内上报的位置点的经度及纬度的算术平均数,将该算术平均数作为相应车辆的中心位置点;
所述车辆筛选模块220,用于当第一车辆寻找具有相似行车路线的车友时,从服务器中筛选出与所述第一车辆的中心位置点小于预定距离的车辆;
所述车友查找模块230,用于将第一车辆与筛选出的车辆的位置点的经度及纬度的精度精确到预定位数,依次判断第一车辆所有上报的位置点中,是否有超过预定比例的位置点在筛选出的车辆上报的位置点预设范围内,当是时,则将筛选出的车辆中符合条件的目标车辆设置为所述第一车辆的潜在车友。
进一步,所述服务器200还包括:
位置点比较模块,用于接收到上报的位置点后,判断同一车辆此次上报的位置点与上一次上传的位置点是否相同,当是时,不保存此次上报的位置点,当否时,保存此次上报的位置点。
进一步,如图4所示,所述服务器200还包括时段过滤模块,所述时段过滤模块包括:
请求接收单元300,用于接收用户时段过滤请求;
第一车辆时段过滤单元400,用于对第一车辆所有上报的位置点进行时段过滤;
筛选车辆时段过滤单元500,用于对筛选出的车辆上报的位置点进行时段过滤。
本主动寻找具有相似行车路线的车友的***的其他技术细节请参照前述方法的描述,在此不再赘述。
综上所述,本发明通过将多台车辆每隔预定时间上报的位置点进行计算,先初步筛选出可能具有相似行车路线的车辆,然后对位置点的精度进行调整,并对各个车辆的位置点一一比较,从而精确筛选出具有相似行车路线的车友,由于本发明是一种主动寻找车友的过程,而不是被动的等待回复,所以本发明寻找车友的效率高,效果也大幅提高。
应当理解的是,本发明的应用不限于上述的举例,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,所有这些改进和变换都应属于本发明所附权利要求的保护范围。