基于路段夹角渐变特征的路网通行方向判别方法和系统
技术领域
本发明涉及地图信息技术处理领域,特别是涉及一种基于路段夹角渐变特征的路网通行方向判别方法和系统。
背景技术
在路网数据中,缺乏通行方向属性的道路数据无法应用于城市交通管理与规划中。在进行交通管理与规划中,需要获取所有道路的方向。对于无分隔的双向道路,此类道路方向为双向;对于有中央分隔栏的道路,一侧道路我们称之为单行道,这类道路只能一个方向通行,需要单独标识其通行方向。目前已有的道路通行方向判定方法主要分两类,一类是借助外部数据辅助判断,而第二类则基于路网本身数据进行判定。
前者依赖于外部数据,公开号为CN111737378A的中国发明专利于2020年 10月2日公开了一种道路通行方向识别方法,包括:基于行驶轨迹大数据,获取最近预设时间段的各车辆的行驶轨迹数据;根据各所述行驶轨迹数据匹配道路,确定所述预设时间段道路网中各道路上车辆的行驶轨迹;根据各道路上所述行驶轨迹确定与当前道路方向相反的反方向流量值,以及与当前道路方向相同的正方向流量值;基于所述反方向流量值和反方向流量值确定的反方向流量占比,得到当前道路通行方向是否发生变化的识别结果。采用本方法虽然能够无需路测车实地采集道路路况数据,降低了确定当前道路通行方向是否发生变化的成本,但其需要多方面收集用户的出行轨迹,而轨迹的数据获取成本和难度都较高,同时还涉及到用户的隐私问题,不具有普适性。
后者需求数据少。公开号为CN107655487A的中国发明专利于2020年5月8 日公开了一种路段方向识别方法及装置,包括:通过从路网数据中获取一条待识别路段;从路网数据中,确定与待识别路段满足预设的对偶路条件的路段作为目标路段,若目标路段只有一条,则从路网数据中,确定与目标路段满足对偶路条件的路段,若确定的与目标路段满足对偶路条件的路段只有一条且为待识别路段,则待识别路段和目标路段构成对偶路段;依据对偶路包含的两条路段的形状点的位置坐标以及预设的交通规则,确定对偶路所包含的两条路段的通行方向。该方法虽然能够确定出对偶路段中两条单向路段的具体通行方向,为缺失通行方向属性的对偶路段补充具体的通行方向,但其只使用了路网数据,仅对偶路段(对于单行路段,往往存在两条近似平行的路段,一条道路上行,一条道路下行,这类道路称为对偶路段)的识别效果较好,对复杂路网场景(因为道路投影到平面路网,缺少高程数据导致不同高度的道路在平面相交的路网;或单行道路不存在对偶路段的情况)下识别效果不佳,方向判定正确率低。
发明内容
本发明为克服以上至少一种技术问题,提供一种基于路段夹角渐变特征的路网通行方向判别方法和系统,用于解决复杂路网通行方向判别正确率低和判定过程中耗时过多的问题。
为解决上述技术问题,本发明的技术方案如下:
基于路段夹角渐变特征的路网通行方向判别方法,包括以下步骤:
S1:获取矢量路网文件的数据;
S2:根据获取的数据依次遍历所有路段,判断路段的通行方向信息,取出所有未知通行方向的路段,记为未知路段,其他路段记为已知路段;
S3:取一条未知道路,获取其首路段和末路段,分别对首路段和末路段构建双缓冲矩形;
S4:判断已知路段与双缓冲矩形的位置关系,得到所有与双缓冲矩形可能相交的已知通行方向的路段,记为备选路段;
S5:依次判断备选路段中的每一条路段是否满足渐进夹角条件,若是,则取出满足条件的连通路段;否则,返回执行步骤S3,直至最后一条未知路段处理完毕,执行步骤S7;
S6:对连通路段与未知路段进行连接方式判断,得到未知路段的方向,返回执行执行步骤S3,直至最后一条未知路段处理完毕;
S7:输出得到方向的未知路段,完成路网通行方向的判别。
上述方案中,矢量路网文件的数据包括几何对象数据以及构成几何对象的要素数据。几何对象数据包括编号、类型,构成几何对象的要素信息包括点编号、点经纬度坐标。其中,一条道路由多条路段组成,一条路段由多线段组成,多线段由对应数量的多个顶点组成。矢量路网数据中以路段作为基本存储单元。
上述方案中,通过遍历所有已知道路,判断与双缓冲矩形是否相交,快速排出无法提供有效信息的已知道路,避免后续重复计算,从而减少耗时。再取剩下的已知道路比较与未知道路的距离,根据一个预先设置的距离(可取经验值),进一步排除不可能连通的道路,避免后续重复计算,减少耗时。最后一句夹角渐变特征,检查路段间的夹角特征,选取与未知路段连通的已知路段,依据夹角渐变特征处理会优先选取到与未知道路连通的已知道路,避免选取未知道路邻近但实际上并不连通的道路;通过得到的已知路段与未知路段的连通方式,计算路段的斜率,最终得到未知道路的通行方向。
其中,在所述步骤S3中,取一条未知道路Ln,道路Ln由路段l1、路段l2Λ路段lm构成,称路段l1为道路Ln的首路段,路段lm为道路Ln的末路段,分别对首路段l1和末路段lm构建双缓冲矩形,执行以下过程:
取首路段l1的两个坐标P1(x1,y1)和P2(x2,y2),则l1所在直线的表达式为:
将首路段l1的两端伸延相同的距离d,取d构建线段AC=nl1,n为常数,得到缓冲矩形对角线的两个顶点,记新的两个顶点为A、C:
根据该两顶点坐标确定首路段l1的缓冲矩形的四个顶点坐标如下:
同理,取未知道路的倒数第一个顶点和倒数第二个顶点组成的线段,记为末线段lm;计算末路段的表达式,得到未知路段末线段对应的缓冲矩形;
至此得到的两个缓冲矩形构成双缓冲矩形。
其中,所述步骤S5中,设置连通标识用于记录是否找到连通路段,连通标识为正时,表示已经找到连通路段,否之则未找到;设置夹角阈值并将其初始化为0°,用来判断线段间是否满足渐进夹角的条件;具体包括以下步骤:
取一条备选路段的每相邻两个顶点组成已知线段,依次判断已知线段是否与双缓冲矩形相交,不相交则进行下一条已知线段的判断;相交则继续判断已知线段与未知线段的距离,当距离小于设定的值时,则计算已知线段与未知线段的夹角,其中,未知线段指组成未知路段的线段;
当夹角小于夹角阈值时,则将该路段作为连通路段,连通标识为正;继续判断剩余的已知线段,直至所有已知线段判断结束;
若连通标识为正,则执行步骤S6;否则,则将夹角阈值增加n°,重复执行步骤S5,直至连通标识为正,或夹角阈值达到允许的最大值,则无法得到连通路段,返回执行步骤S3。
其中,在所述步骤S5中,所述已知线段与未知线段的夹角计算过程具体为:
取未知线段的两个顶点P1和P2,分别记为(x1,y1)和(x2,y2),同理已知线段的两个顶点为Pr1和Pr2,记为(x3,y3)和(x4,y4);分别计算两条路径与X正半轴所形成的的夹角,大小分别记为α和β,当x1等于x2,记为第一夹角,即α的值为 90°,同理当x3等于x4,记第二夹角,即β的值为90°;最终计算两条线段间的夹角θ为:
θ=|α-β|θ∈[0°,180°)。
其中,在所述步骤S6中,对连通路段与未知路段进行连接方式判断,得到未知路段的方向的过程具体为:
设未知首线段为AB,已知线段为CD,分别计算AC、AD、BC和BD的距离,取最小距离的两点,记为该两点连接;其中,每个线段由相邻两个顶点组成,分别为顶点m和顶点m+1,将顶点m定义为线段的起点,m+1记为线段的终点;
在对未知路段的方向进行判断中,取出连通路段中的已知线段,如果已知线段起点与字段属性FNODE_LON、FNODE_LAT相同,记顶点顺序标识 direction=1,表示顺序记录;如果已知线段起点与字段属性TNODE_LON、 TNODE_LAT相同,即顶点顺序标识direction=0,表示逆序记录;之后按照以下方式对道路的direction属性进行标定:
已知线段起点与未知路段起点相连,且已知线段direction=1,则未知路段direction=0;已知线段direction=0,则未知路段direction=1;
已知线段起点与未知路段终点相连,且已知线段direction=1,则未知路段direction=1;已知线段direction=0,则未知路段direction=0;
已知线段终点与未知路段起点相连,且已知线段direction=1,则未知路段direction=1;已知线段direction=0,则未知路段direction=0;
已知线段终点与未知路段终点相连,且已知线段direction=1,则未知路段direction=0;已知线段direction=0,则未知路段direction=1;
接着计算未知路段的斜率k;即未知路段的起点为(xs,ys),终点为(xe,ye),当斜率k存在时,k计算方法为:
根据k和未知路段连通标识进行判断得到未知路段的通行方向:
若k大于0且绝对值大于1,direction=1,则为由南向北;direction=0,则为由北向南;
若k小于0且绝对值大于1,direction=1,则为由北向南;direction=0,则为由南向北;
若k大于0且绝对值小于1,direction=1,则为由东向西;direction=0,则为由西向东;
若k小于0且绝对值小于1,direction=1,则为由西向东;direction=0,则为由东向西。
本方案还提出一种基于路段夹角渐变特征的路网通行方向判别系统,用于实现一种基于路段夹角渐变特征的路网通行方向判别方法,包括数据获取模块、路段通行方向判断模块、双缓冲矩形构建模块、备选路段选取模块、渐进夹角判断模块、未知路段方向确定模块和输出模块;其中:
所述数据获取模块用于获取矢量路网文件的数据;
所述路段通行方向判断模块根据获取的数据依次遍历所有路段,判断路段的通行方向信息,取出所有未知通行方向的路段,记为未知路段,其他路段记为已知路段;
所述双缓冲矩形构建模块用于获取未知道路的首路段和末路段,并分别对首路段和末路段构建双缓冲矩形;
所述备选路段选取模块用于判断已知路段与双缓冲矩形的位置关系,选取所有与双缓冲矩形可能相交的已知通行方向的路段,记为备选路段;
所述渐进夹角判断模块用于依次判断备选路段中的每一条路段是否满足渐进夹角条件,取出满足条件的连通路段;
所述未知路段方向确定模块用于对连通路段与未知路段进行连接方式判断,得到未知路段的方向;
所述输出模块用于输出得到方向的未知路段,完成路网通行方向的判别。
其中,在所述双缓冲矩形构建模块中,具体执行以下步骤:
取一条未知道路Ln,道路Ln由路段l1、路段l2Λ路段lm构成,称路段l1为道路Ln的首路段,路段lm为道路Ln的末路段,分别对首路段l1和末路段lm构建双缓冲矩形,执行以下过程:
取首路段l1的两个坐标P1(x1,y1)和P2(x2,y2),则l1所在直线的表达式为:
将首路段l1的两端伸延相同的距离d,取d构建线段AC=nl1,n为常数,得到缓冲矩形对角线的两个顶点,记新的两个顶点为A、C:
根据该两顶点坐标确定首路段l1的缓冲矩形的四个顶点坐标如下:
同理,取未知道路的倒数第一个顶点和倒数第二个顶点组成的线段,记为末线段lm;计算末路段的表达式,得到未知路段末线段对应的缓冲矩形;
至此得到的两个缓冲矩形构成双缓冲矩形。
其中,在所述渐进夹角判断模块中,设置连通标识用于记录是否找到连通路段,连通标识为正时,表示已经找到连通路段,否之则未找到;设置夹角阈值并将其初始化为0°,用来判断线段间是否满足渐进夹角的条件;其具体执行以下步骤:
取一条备选路段的每相邻两个顶点组成已知线段,依次判断已知线段是否与双缓冲矩形相交,不相交则进行下一条已知线段的判断;相交则继续判断已知线段与未知线段的距离,当距离小于设定的值时,则计算已知线段与未知线段的夹角,其中,未知线段指组成未知路段的线段;
当夹角小于夹角阈值时,则将该路段作为连通路段,连通标识为正;继续判断剩余的已知线段,直至所有已知线段判断结束;
若连通标识为正,则由未知路段方向确定模块进行下一步处理;否则,则将夹角阈值增加n°,重复上述过程,直至连通标识为正,或夹角阈值达到允许的最大值,则无法得到连通路段,返回双缓冲矩形构建模块进行处理。
其中,在所述渐进夹角判断模块中,所述已知线段与未知线段的夹角计算过程具体为:
取未知线段的两个顶点P1和P2,分别记为(x1,y1)和(x2,y2),同理已知线段的两个顶点为Pr1和Pr2,记为(x3,y3)和(x4,y4);分别计算两条路径与X正半轴所形成的的夹角,大小分别记为α和β,当x1等于x2,记为第一夹角,即α的值为 90°,同理当x3等于x4,记第二夹角,即β的值为90°;最终计算两条线段间的夹角θ为:
θ=|α-β|θ∈[0°,180°)。
其中,在所述未知路段方向确定模块中,具体执行以下步骤:
设未知首线段为AB,已知线段为CD,分别计算AC、AD、BC和BD的距离,取最小距离的两点,记为该两点连接;其中,每个线段由相邻两个顶点组成,分别为顶点m和顶点m+1,将顶点m定义为线段的起点,m+1记为线段的终点;
在对未知路段的方向进行判断中,取出连通路段中的已知线段,如果已知线段起点与字段属性FNODE_LON、FNODE_LAT相同,记顶点顺序标识 direction=1,表示顺序记录;如果已知线段起点与字段属性TNODE_LON、 TNODE_LAT相同,即顶点顺序标识direction=0,表示逆序记录;之后按照以下方式对道路的direction属性进行标定:
已知线段起点与未知路段起点相连,且已知线段direction=1,则未知路段direction=0;已知线段direction=0,则未知路段direction=1;
已知线段起点与未知路段终点相连,且已知线段direction=1,则未知路段direction=1;已知线段direction=0,则未知路段direction=0;
已知线段终点与未知路段起点相连,且已知线段direction=1,则未知路段direction=1;已知线段direction=0,则未知路段direction=0;
已知线段终点与未知路段终点相连,且已知线段direction=1,则未知路段direction=0;已知线段direction=0,则未知路段direction=1;
接着计算未知路段的斜率k;即未知路段的起点为(xs,ys),终点为(xe,ye),当斜率k存在时,k计算方法为:
根据k和未知路段连通标识进行判断得到未知路段的通行方向:
若k大于0且绝对值大于1,direction=1,则为由南向北;direction=0,则为由北向南;
若k小于0且绝对值大于1,direction=1,则为由北向南;direction=0,则为由南向北;
若k大于0且绝对值小于1,direction=1,则为由东向西;direction=0,则为由西向东;
若k小于0且绝对值小于1,direction=1,则为由西向东;direction=0,则为由东向西。
与现有技术相比,本发明技术方案的有益效果是:
本发明提出一种基于路段夹角渐变特征的路网通行方向判别方法和系统,在部分已知路段的通行方向的基础上,通过路段夹角渐变特征对未知道路的相对位置进行初步判断,在后续大规模路通通行方向判断中有效较少了判断耗时,且该方案能够在复杂道路场景下进行应用。
附图说明
图1为本发明所述方法流程示意图;
图2为本发明一实施例中缓冲矩形构建示意图;
图3为本发明一实施例中判断相交示意图;
图4为本发明一实施例中线段与X正半轴夹角示意图;
图5为本发明一实施例中判断两条线段的连通点示意图;
图6为本发明所述系统的数据流向示意图。
具体实施方式
附图仅用于示例性说明,不能理解为对本专利的限制;
为了更好说明本实施例,附图某些部件会有省略、放大或缩小,并不代表实际产品的尺寸;
对于本领域技术人员来说,附图中某些公知结构及其说明可能省略是可以理解的。
下面结合附图和实施例对本发明的技术方案做进一步的说明。
实施例1
如图1所示,基于路段夹角渐变特征的路网通行方向判别方法,包括以下步骤:
S1:获取矢量路网文件的数据;
S2:根据获取的数据依次遍历所有路段,判断路段的通行方向信息,取出所有未知通行方向的路段,记为未知路段,其他路段记为已知路段;
S3:取一条未知道路,获取其首路段和末路段,分别对首路段和末路段构建双缓冲矩形;
S4:判断已知路段与双缓冲矩形的位置关系,得到所有与双缓冲矩形可能相交的已知通行方向的路段,记为备选路段;
S5:依次判断备选路段中的每一条路段是否满足渐进夹角条件,若是,则取出满足条件的连通路段;否则,返回执行步骤S3,直至最后一条未知路段处理完毕,执行步骤S7;
S6:对连通路段与未知路段进行连接方式判断,得到未知路段的方向,返回执行执行步骤S3,直至最后一条未知路段处理完毕;
S7:输出得到方向的未知路段,完成路网通行方向的判别。
在具体实施过程中,为了提高在复杂路网中道路通行方向的判定正确率,从道路夹角渐变特征进行分析,再设置缓冲矩形排除多数无效路段避免重复判断减少时间,最终能够快速且最大可能确保寻找连通的道路,从而推导未知道路通行方向。整个判定过程中优先确保了通行方向的正确性,同时减少了方向判定过程中的耗时。
在具体实施过程中,所述矢量路网文件的数据包括道路的几何对象信息以及构成道路的要素信息,几何对象信息包括路段的顶点坐标,构成几何对象的要素包括路段编号、路段类型。
更具体的,在所述步骤S2中,拿到每一条道路矢量数据,针对每一条路段进行道路属性判断,取出属性为单行路的全部路段。对已取出的单行路进行遍历,再次判断道路通行方向,方向未知则记为未知路段,其他路段记为已知路段。
更具体的,在所述步骤S3中,取一条未知道路Ln,道路Ln由路段l1、路段l2Λ路段lm构成,称路段l1为道路Ln的首路段,路段lm为道路Ln的末路段,分别对首路段l1和末路段lm构建双缓冲矩形,执行以下过程:
取首路段l1的两个坐标P1(x1,y1)和P2(x2,y2),则l1所在直线的表达式为:
将首路段l1的两端伸延相同的距离d,取d构建线段AC=nl1,n为常数,得到缓冲矩形对角线的两个顶点,记新的两个顶点为A、C:
根据该两顶点坐标确定首路段l1的缓冲矩形的四个顶点坐标如下:
同理,取未知道路的倒数第一个顶点和倒数第二个顶点组成的线段,记为末线段lm;计算末路段的表达式,得到未知路段末线段对应的缓冲矩形;
至此得到的两个缓冲矩形构成双缓冲矩形。
在具体实施过程中,双缓冲矩形用于减少后续判断路段相连过程的耗时。在缓冲矩形内,在合适距离的路段中寻找符合连通路段夹角渐变特征的连通路段。
更具体的,所述步骤S5中,设置连通标识用于记录是否找到连通路段,连通标识为正时,表示已经找到连通路段,否之则未找到;设置夹角阈值并将其初始化为0°,用来判断线段间是否满足渐进夹角的条件;具体包括以下步骤:
取一条备选路段的每相邻两个顶点组成已知线段,依次判断已知线段是否与双缓冲矩形相交,不相交则进行下一条已知线段的判断;相交则继续判断已知线段与未知线段的距离,当距离小于设定的值时,则计算已知线段与未知线段的夹角,其中,未知线段指组成未知路段的线段;
当夹角小于夹角阈值时,则将该路段作为连通路段,连通标识为正;继续判断剩余的已知线段,直至所有已知线段判断结束;
若连通标识为正,则执行步骤S6;否则,则将夹角阈值增加n°,重复执行步骤S5,直至连通标识为正,或夹角阈值达到允许的最大值,则无法得到连通路段,返回执行步骤S3。
更具体的,在所述步骤S5中,所述已知线段与未知线段的夹角计算过程具体为:
取未知线段的两个顶点P1和P2,分别记为(x1,y1)和(x2,y2),同理已知线段的两个顶点为Pr1和Pr2,记为(x3,y3)和(x4,y4);分别计算两条路径与X正半轴所形成的的夹角,大小分别记为α和β,当x1等于x2,记为第一夹角,即α的值为 90°,同理当x3等于x4,记第二夹角,即β的值为90°;最终计算两条线段间的夹角θ为:
θ=|α-β|θ∈[0°,180°)。
更具体的,在所述步骤S6中,对连通路段与未知路段进行连接方式判断,得到未知路段的方向的过程具体为:
如图3所示,设未知首线段为AB,已知线段为CD,分别计算AC、AD、 BC和BD的距离,取最小距离的两点,记为该两点连接;其中,每个线段由相邻两个顶点组成,分别为顶点m和顶点m+1,将顶点m定义为线段的起点,m+1 记为线段的终点;
在对未知路段的方向进行判断中,取出连通路段中的已知线段,如果已知线段起点与字段属性FNODE_LON、FNODE_LAT相同,记顶点顺序标识 direction=1,表示顺序记录;如果已知线段起点与字段属性TNODE_LON、 TNODE_LAT相同,即顶点顺序标识direction=0,表示逆序记录;之后按照以下方式对道路的direction属性进行标定:
已知线段起点与未知路段起点相连,且已知线段direction=1,则未知路段direction=0;已知线段direction=0,则未知路段direction=1;
已知线段起点与未知路段终点相连,且已知线段direction=1,则未知路段direction=1;已知线段direction=0,则未知路段direction=0;
已知线段终点与未知路段起点相连,且已知线段direction=1,则未知路段direction=1;已知线段direction=0,则未知路段direction=0;
已知线段终点与未知路段终点相连,且已知线段direction=1,则未知路段direction=0;已知线段direction=0,则未知路段direction=1;
接着计算未知路段的斜率k;即未知路段的起点为(xs,ys),终点为(xe,ye),当斜率k存在时,k计算方法为:
根据k和未知路段连通标识进行判断得到未知路段的通行方向:
若k大于0且绝对值大于1,direction=1,则为由南向北;direction=0,则为由北向南;
若k小于0且绝对值大于1,direction=1,则为由北向南;direction=0,则为由南向北;
若k大于0且绝对值小于1,direction=1,则为由东向西;direction=0,则为由西向东;
若k小于0且绝对值小于1,direction=1,则为由西向东;direction=0,则为由东向西。
实施例2
更具体的,在实施例1的基础上,结合具体的实施例子对方案进行说明,进一步体现本方案的技术效果。具体为:
在所述步骤S1的矢量路网文件的数据中,道路由一系列的点构成,一条道路可能包括多个路段,路段之间可以是相离的,同时路段之间也可以相交。路段的记录内容包括坐标范围、坐标点数、坐标信息(经纬度)等,如下表1所示。
表1矢量路网数据结构及含义(部分)
由表可知,矢量路网文件中的数据包包含路段的编号(记录号),路段的类型,组成路段的顶点坐标信息。路段顶点记录形式为经纬度坐标,分别设置 FNODE_LON和FNODE_LAT代表路段记录起点对应的经纬度坐标, TNODE_LON和FNODE_LAT代表路段记录终点对应的经纬度坐标。
在所述步骤S2中,如图2所示,任取一条未知道路Ln,道路Ln由路段l1,路段l2……路段lm构成(m个路段构成的道路共计有m+1个顶点),称路段l1为道路Ln的首路段,路段lm为道路Ln的末路段,分别对首路段l1和末路段lm构建缓冲矩形,构建方法如下:
以首路段为例:
读取构成首路段l1的两点坐标P1(x1,y1)和P2(x2,y2),则l1所在直线的表达式为:
将首线段l1向两端延伸相同的距离d,该例中取d使得AC=2l1,得到缓冲矩形对角线的两个顶点,其中当xa<xc,记新的两个顶点为A、C:
xa>xc时结果同上。
根据该两顶点坐标确定首路段l1的缓冲矩形的四个顶点坐标如下:
取未知道路的倒数第一个顶点Pm+1和倒数第二个顶点Pm组成的线段,记为末线段lm;计算末路段的表达式,得到未知路段末线段对应的缓冲矩形;
至此得到的两个缓冲矩形构成双缓冲矩形。
在所述步骤S4中,遍历每一条道路的首路段和末路段,任取一条路段记为lr,判断lr与道路Ln的首路段l1缓冲矩形是否相交,判断方法如下:
如图3所示,如步骤S2所述,以路段Lr与矩形边DA为例,判断两条线段是否相交。首先判断两条线段是否排斥(两条线段排斥意味由两条线段为对角线构成的矩形无重叠部分,即两条线段不可能相交)。排斥检测如下,当满足下面的条件则排斥,否则不排斥:
max{x3,x4}<min{x1,x2};
max{x1,x2}<min{x3,x4};
max{y1,y2}<min{y3,y4};
max{y3,y4}<min{y1,y2}。
若排斥,则两条线段一定不相交,直接取下一条矩形边BC继续进行判断;若不排斥,则判断两条线段是否跨立。计算lr与AD的矢量叉积(两条线段相交,则矢量叉积计算结果小于等于0,表示两条线段跨立,即相交。矢量叉积计算结果大于0,则不跨立,即不相交)。叉积计算,在该例中:
以矩形边AD为基准,由四个顶点A、D、Pr1和Pr2得到三个向量,分别为APr1, APr2和AD。再计算(APr1×AD)*(APr2×AD)的结果,×为向量的叉乘,*为向量的内乘。当计算结果小于等于0,则相交,大于0则不相交。
当已知路段lr不与矩形边AD相交,先继续判断lr与剩下三条矩形边的相交关系。
当已知路段lr与所有的矩形边不相交则直接进行下一条已知路段的判断;存在有相交则继续判断已知路段与未知路段的距离,当距离小于一定的值ds,则计算已知路段与未知路段间的夹角。
在所述步骤S5中,如图4所示,未知线段的两个顶点P1和P2,分别记为(x1,y1) 和(x2,y2),同理已知线段的两个顶点为Pr1和Pr2,记为(x3,y3)和(x4,y4);分别计算两条路径与X正半轴所形成的的夹角,大小分别记为α和β,当x1等于x2,记为第一夹角,即α的值为90°,同理当x3等于x4,记第二夹角,即β的值为 90°;最终计算两条线段间的夹角θ为:
θ=|α-β|θ∈[0°,180°)
设置夹角阈值θmax,用来表示路段间渐近夹角特征的判断条件中允许的最大夹角,设置初始值为0°。当路段间的夹角θ小于设置的夹角阈值θmax的时候,将该路段加入到连通路段集合中,同时连通标识flag设置为true。
连通标识flag用来记录未知路段是否找到与之连通的已知路段,设置flag初始值为false,表示没有连通的已知路段。flag为true表示存在连通的已知路段。
继续判断剩余的路段,当所有路段判断结束,若flag为true,则进行步骤S6。当flag仍为false,将夹角阈值的值增加2°,重复进行S5步骤,直至flag为true,或者夹角阈值达到允许的最大值45°,则判断无法找到与未知路段连通的已知路段(基于夹角渐变特征的方法可以在尽可能小的路段夹角中选取连通的已知路段,确保了通行方向判断的正确性),直接进行下一条未知路段方向的判别。
在所述步骤S6中,取该已知路段与未知路段进行连通方式判断,从而推导未知道路的方向:
以S4步骤中提到的未知首路段l1和已知路段lr相交为例,如图5所示,共计有四个顶点,分别计算Pr1到P1,Pr1到P2,Pr2到P1和Pr2到P2的距离,记为d1、 d2、d3和d4。记dmin=min{d1,d2,d3,d4}。取最小距离对应的两个顶点,记为两顶点相连通。
图例为Pr2到P1距离d3最小,记为该Pr2、P1两点连接。路段起点解释:每个路段为相邻两个顶点组成,分别为顶点n和n+1,顶点n即为路段的起点,n+1 为路段的终点。
最后的未知路段通行方向判断中,取出标记与未知路段连通的已知路段,如果已知路段起点与字段属性FNODE_LON、FNODE_LAT相同(字段属性由步骤S1读取),记顶点顺序标识direction为1,表示顺序记录;如果已知路段起点与字段属性TNODE_LON、TNODE_LAT相同,记顶点顺序标识direction为0,表示逆序记录。之后按照下表标定道路的direction属性:
1.已知道路起点与未知道路起点相连,且已知路段direction为1,则未知路段direction为0;已知路段direction为0,则未知路段direction为1;
2.已知道路起点与未知道路终点相连,且已知道路direction为1,则未知道路direction为1;已知道路direction为0,则未知道路direction为0;
3.已知道路终点与未知道路起点相连,且已知道路direction为1,则未知道路direction为1;已知道路direction为0,则未知道路direction为0;
4.已知道路终点与未知道路终点相连,且已知道路direction为1,则未知道路direction为0;已知道路direction为0,则未知道路direction为1;
计算未知路段的斜率k;即未知路段的起点为(xs,ys),终点为(xe,ye),当斜率k存在时,k计算方法为:
根据k和未知路段连通标识进行判断得到未知路段的通行方向:
若k大于0且绝对值大于1,direction=1,则为由南向北;direction=0,则为由北向南;
若k小于0且绝对值大于1,direction=1,则为由北向南;direction=0,则为由南向北;
若k大于0且绝对值小于1,direction=1,则为由东向西;direction=0,则为由西向东;
若k小于0且绝对值小于1,direction=1,则为由西向东;direction=0,则为由东向西。
在具体实施过程中,本方案通过遍历其他所有已知道路,判断与双缓冲矩形是否相交,快速排除无法提供有效信息的已知道路,避免后续重复计算,从而减少耗时。再取剩下的已知道路比较与未知道路的距离,根据一个预先设置的距离 (可取经验值),进一步排除不可能连通的道路,避免后续重复计算,减少耗时。最后依据夹角渐变特征,检查路段间的夹角特征,选取与未知路段连通的已知路段,依据夹角渐变特征处理会优先选取到与未知道路连通的已知道路,避免选取未知道路邻近但实际上并不连通的道路。
实施例3
更具体的,如图6所示,本方案还提出一种基于路段夹角渐变特征的路网通行方向判别系统,用于实现一种基于路段夹角渐变特征的路网通行方向判别方法,包括数据获取模块、路段通行方向判断模块、双缓冲矩形构建模块、备选路段选取模块、渐进夹角判断模块、未知路段方向确定模块和输出模块;其中:
所述数据获取模块用于获取矢量路网文件的数据;
所述路段通行方向判断模块根据获取的数据依次遍历所有路段,判断路段的通行方向信息,取出所有未知通行方向的路段,记为未知路段,其他路段记为已知路段;
所述双缓冲矩形构建模块用于获取未知道路的首路段和末路段,并分别对首路段和末路段构建双缓冲矩形;
所述备选路段选取模块用于判断已知路段与双缓冲矩形的位置关系,选取所有与双缓冲矩形可能相交的已知通行方向的路段,记为备选路段;
所述渐进夹角判断模块用于依次判断备选路段中的每一条路段是否满足渐进夹角条件,取出满足条件的连通路段;
所述未知路段方向确定模块用于对连通路段与未知路段进行连接方式判断,得到未知路段的方向;
所述输出模块用于输出得到方向的未知路段,完成路网通行方向的判别。
更具体的,在所述双缓冲矩形构建模块中,具体执行以下步骤:
取一条未知道路Ln,道路Ln由路段l1、路段l2Λ路段lm构成,称路段l1为道路Ln的首路段,路段lm为道路Ln的末路段,分别对首路段l1和末路段lm构建双缓冲矩形,执行以下过程:
取首路段l1的两个坐标P1(x1,y1)和P2(x2,y2),则l1所在直线的表达式为:
将首路段l1的两端伸延相同的距离d,取d构建线段AC=nl1,n为常数,得到缓冲矩形对角线的两个顶点,记新的两个顶点为A、C:
根据该两顶点坐标确定首路段l1的缓冲矩形的四个顶点坐标如下:
同理,取未知道路的倒数第一个顶点和倒数第二个顶点组成的线段,记为末线段lm;计算末路段的表达式,得到未知路段末线段对应的缓冲矩形;
至此得到的两个缓冲矩形构成双缓冲矩形。
更具体的,在所述渐进夹角判断模块中,设置连通标识用于记录是否找到连通路段,连通标识为正时,表示已经找到连通路段,否之则未找到;设置夹角阈值并将其初始化为0°,用来判断线段间是否满足渐进夹角的条件;其具体执行以下步骤:
取一条备选路段的每相邻两个顶点组成已知线段,依次判断已知线段是否与双缓冲矩形相交,不相交则进行下一条已知线段的判断;相交则继续判断已知线段与未知线段的距离,当距离小于设定的值时,则计算已知线段与未知线段的夹角,其中,未知线段指组成未知路段的线段;
当夹角小于夹角阈值时,则将该路段作为连通路段,连通标识为正;继续判断剩余的已知线段,直至所有已知线段判断结束;
若连通标识为正,则由未知路段方向确定模块进行下一步处理;否则,则将夹角阈值增加n°,重复上述过程,直至连通标识为正,或夹角阈值达到允许的最大值,则无法得到连通路段,返回双缓冲矩形构建模块进行处理。
更具体的,在所述渐进夹角判断模块中,所述已知线段与未知线段的夹角计算过程具体为:
取未知线段的两个顶点P1和P2,分别记为(x1,y1)和(x2,y2),同理已知线段的两个顶点为Pr1和Pr2,记为(x3,y3)和(x4,y4);分别计算两条路径与X正半轴所形成的的夹角,大小分别记为α和β,当x1等于x2,记为第一夹角,即α的值为 90°,同理当x3等于x4,记第二夹角,即β的值为90°;最终计算两条线段间的夹角θ为:
θ=|α-β|θ∈[0°,180°)。
更具体的,在所述未知路段方向确定模块中,具体执行以下步骤:
设未知首线段为AB,已知线段为CD,分别计算AC、AD、BC和BD的距离,取最小距离的两点,记为该两点连接;其中,每个线段由相邻两个顶点组成,分别为顶点m和顶点m+1,将顶点m定义为线段的起点,m+1记为线段的终点;
在对未知路段的方向进行判断中,取出连通路段中的已知线段,如果已知线段起点与字段属性FNODE_LON、FNODE_LAT相同,记顶点顺序标识 direction=1,表示顺序记录;如果已知线段起点与字段属性TNODE_LON、 TNODE_LAT相同,即顶点顺序标识direction=0,表示逆序记录;之后按照以下方式对道路的direction属性进行标定:
已知线段起点与未知路段起点相连,且已知线段direction=1,则未知路段direction=0;已知线段direction=0,则未知路段direction=1;
已知线段起点与未知路段终点相连,且已知线段direction=1,则未知路段direction=1;已知线段direction=0,则未知路段direction=0;
已知线段终点与未知路段起点相连,且已知线段direction=1,则未知路段direction=1;已知线段direction=0,则未知路段direction=0;
已知线段终点与未知路段终点相连,且已知线段direction=1,则未知路段direction=0;已知线段direction=0,则未知路段direction=1;
接着计算未知路段的斜率k;即未知路段的起点为(xs,ys),终点为(xe,ye),当斜率k存在时,k计算方法为:
根据k和未知路段连通标识进行判断得到未知路段的通行方向:
若k大于0且绝对值大于1,direction=1,则为由南向北;direction=0,则为由北向南;
若k小于0且绝对值大于1,direction=1,则为由北向南;direction=0,则为由南向北;
若k大于0且绝对值小于1,direction=1,则为由东向西;direction=0,则为由西向东;
若k小于0且绝对值小于1,direction=1,则为由西向东;direction=0,则为由东向西。
显然,本发明的上述实施例仅仅是为清楚地说明本发明所作的举例,而并非是对本发明的实施方式的限定。对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其它不同形式的变化或变动。这里无需也无法对所有的实施方式予以穷举。凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明权利要求的保护范围之内。
- 上一篇:石墨接头机器人自动装卡簧、装栓机
- 下一篇:一种岩土工程随机过程的参数反演方法及系统