一种基于矢量地图数据抽稀与平滑处理的方法\n技术领域\n[0001] 本发明涉及一种基于矢量地图数据抽稀与平滑处理的方法。\n背景技术\n[0002] 地理信息系统(GIS)在各个领域中的应用越来越广泛,但海量数据不仅占用大量存储空间,也影响了数据在使用时的处理速度。因此,对数据进行抽稀成了减少冗余数据、节省数据空间、提高处理速率的解决方法。目前,比较常用的抽稀算法有道格拉斯-普克法、垂距法等,不同的抽稀算法有着各自的优势和不足。\n[0003] 道格拉斯-普克法原理:选取曲线首末点(对于闭合曲线,最左、最右特征点为曲线首末点),找出曲线内其余各点到首末点虚连直线的最大垂距,与给定阈值相比,若大于阈值,则保留该点,并以该点为界,将曲线分为前后两个部分,重复上述操作,否则舍去首末点间所有的中间点。其优点是具有平移、旋转的不变性。不足之处为对多边形的边界数据进行处理时会产生不同程度的图形失真。\n[0004] 垂距限值法原理:顺序取出曲线3个点,计算点2到点1与点3虚连直线的垂距,若垂距大于阈值,则保留点2,并以点2作为新的起点,计算点3到点2与点4虚连直线的垂距;否则,去掉点2,仍以点1为起点,计算点3到点1与点4虚连直线的垂距。重复此过程, 直至曲线最后一点。其优点是算法简单、速度快。不足之处为遗失一些重要结点而保留冗余点。\n[0005] 数据平滑会增加数据量,从处理过程来看,与数据抽稀似乎如矛与盾。如果阈值设置合理,其作用并不矛盾,反而能使棱角突出的闭合曲线达到较好的显示效果。\n[0006] 平滑处理算法原理:顺序取出曲线3个点,设为点n、点n+1、点n+2,计算角A(n+1,n,n+2)与角B(n+1,n+2,n)正切值,取两者的较大值T。若T大于某个设定的阈值M时,增加线段(n,n+1)和线段(n+1,n+2)中点处的两个点,同时去除n+1点。将当前点n的下个点置为n点,重复此过程,直至遍历到曲线终点。\n发明内容\n[0007] 本发明提出一种基于多种抽稀算法相结合,通过设置不同的线段长度阈值、角度阈值和垂距阈值对曲线特征点进行压缩,并用平滑处理算法,对不圆滑的折线进行平滑处理,有效改善了曲率变化较大与棱角突出的闭合曲线的显示效果。\n[0008] 一种基于矢量地图数据抽稀与平滑处理的方法,具体包括如下步骤:\n[0009] 步骤1、通过抽稀曲线特征点来减少数据量,所述的抽稀曲线特征点的具体步骤如下:\n[0010] 步骤11、加载矢量地图数据中曲线特征点的地理坐标值到数组中,并给每一曲线特征点设置抽稀状态标识iDel,除曲线首尾特征点的抽稀状态标识iDel=1外,其它特征点的抽稀状态标识iDel在抽稀与平滑处理前都被初始化为0,其中,抽稀状态标识iDel=0为允许抽稀、抽稀状态标识iDel=1为保留点、抽稀状态标识iDel=-1为可删除,若曲线特征点的抽稀状态标识iDel=-1,则执行抽稀或平滑处理时忽略该特征点;\n[0011] 步骤12、从数组中按次序逐对取出相邻两个曲线特征点信息,计算出该两点间距离与给定的长度阈值LValue比较,若小于该长度阈值LValue,则标记该后一个曲线特征点的抽稀状态为可删除,否则,将该后一个曲线特征点作为下一次要作比较的相邻两个特征点的前一个曲线特征点;\n[0012] 步骤13、顺序取出数组中经过步骤12的筛选后没有被标记为可删除的3个曲线特征点,通过相邻曲线特征点连成线段的斜率来计算出中间特征点所在顶点的角度,与给定角度阈值AValue比较,若大于该角度阈值AValue,则将当前的3个曲线特征点的第二个与第三个点作为下一次要计算角度的3个曲线特征点的第一个与第二个点,否则根据垂距限值法计算出中间曲线特征点到其相邻两个曲线特征点虚连直线的垂距,与给定垂距阈值VValue相比,若小于该垂距阈值VValue,则标记该中间曲线特征点的抽稀状态为可删除,否则标记为保留点,重复步骤13,直到所有曲线特征点都被遍历过;\n[0013] 步骤14、根据道格拉斯-普克法进行曲线特征点的进一步筛选,逐一计算没有被标记为可删除的各曲线特征点到曲线首末点虚连直线的垂距,与给定阈值DValue相比,若小于该阈值DValue,则标记曲线首末点间所有中间点的抽稀状态为可删除,否则标记为保留点,并以该点为界,将曲线分为前后两个部分,重复步骤14;\n[0014] 步骤2、通过平滑处理闭合曲线特征点来解决棱角突出的问题,所述的平滑处理闭合曲线特征点的具体步骤如下:\n[0015] 步骤21、从数组中顺序取出抽稀处理后被标记为保留点的闭合曲线的3个特征点,按同一方向规则,以中间特征点为坐标系原点,分别计算出从X正轴方向逆时针旋转到相邻特征点连成的线段所构成的旋转角度,通过两旋转角度即可算出内夹角,如果纬度差值<0,则从X正轴逆时针旋转到相邻特征点虚连直线所构成的角度需要用公式\n进行处理,其中Radian为弧度,Pi = 3.14159265359;3个特\n征点求出2个旋转角度相减取绝对值即为平滑处理所需内夹角,如果相减取绝对值后的角度大于 ,需要用 减去该角度,才是真正的内夹角;\n[0016] 步骤22、将步骤21中计算出的内夹角与给定角度阈值SAValue比较,若小于该角度阈值SAValue,则继续执行步骤21,否则根据相邻特征点连成线段长度获取2个平滑点,计算出2平滑点间距离,与给定间距阈值SLValue比较,若小于该间距阈值SLValue,则继续执行步骤21,否则标记该中间特征点为可删除,并将这2个平滑点作为特征点保存到数组中,重复步骤22,直到该闭合曲线上所有特征点都被遍历过;\n[0017] 步骤23、当抽稀率大于目标值,而平滑率小于目标值时,判断已达致曲线抽稀和平滑处理的目标效果,所述的抽稀率=(抽稀前特征点总个数-抽稀后保留的特征点总个数)/抽稀前特征点总个数,所述的平滑率=(平滑后保留的特征点总个数-抽稀后保留的特征点总个数)/抽稀后保留的特征点总个数。\n[0018] 本发明主要用于处理矢量地图数据,抽稀方法的应用剔除了海量地图数据中的冗余数据,不仅节省了数据空间、提高了处理速率,还使得曲线在地图显示效果上更加简洁;\n平滑方法的应用虽然增加了少量数据,但可以使棱角突出的曲线显得更加平滑。\n附图说明\n[0019] 图1为本发明在平滑处理中内夹角计算示意图。\n[0020] 以下结合附图和具体实施例对本发明作进一步详述。\n具体实施方式\n[0021] 本发明一种基于矢量地图数据抽稀与平滑处理的方法,主要包括以下两个步骤:\n[0022] 步骤1、通过抽稀曲线特征点来减少数据量;\n[0023] 步骤2、通过平滑处理闭合曲线特征点来解决棱角突出的问题。\n[0024] 所述的抽稀曲线特征点的具体步骤如下:\n[0025] 步骤11、加载矢量地图数据中曲线特征点的地理坐标值(经度和纬度)到数组中,并给每一曲线特征点设置抽稀状态标识iDel,除曲线首尾特征点的抽稀状态标识iDel=1外,其它特征点的抽稀状态标识iDel在抽稀与平滑处理前都被初始化为0,其中,抽稀状态标识iDel=0为允许抽稀、抽稀状态标识iDel=1为保留点、抽稀状态标识iDel=-1为可删除,若曲线特征点的抽稀状态标识iDel=-1,则执行抽稀或平滑处理时忽略该特征点,相当于已经被压缩掉的冗余点,无需再做任何处理;\n[0026] 步骤12、从数组中按次序逐对取出相邻两个曲线特征点信息,计算出该两点间距离与给定的长度阈值LValue比较,若小于该长度阈值LValue,则标记该后一个曲线特征点的抽稀状态为可删除,否则,将该后一个曲线特征点作为下一次要作比较的相邻两个特征点的前一个曲线特征点;\n[0027] 步骤13、顺序取出数组中经过步骤12的筛选后没有被标记为可删除的3个曲线特征点,通过相邻曲线特征点连成线段的斜率来计算出中间特征点所在顶点的角度,与给定角度阈值AValue比较,若大于该角度阈值AValue,则将当前的3个曲线特征点的第二个与第三个点作为下一次要计算角度的3个曲线特征点的第一个与第二个点,否则根据垂距限值法计算出中间曲线特征点到其相邻两个曲线特征点虚连直线的垂距,与给定垂距阈值VValue相比,若小于该垂距阈值VValue,则标记该中间曲线特征点的抽稀状态为可删除,否则标记为保留点,重复步骤13,直到所有曲线特征点都被遍历过;\n[0028] 所述的通过相邻特征点连成线段的斜率计算出抽稀所需的正切角公式如下:\n[0029]\n[0030] 其中, 、 为斜率,即是所要求的相邻特征点连成的2线段的夹角;\n[0031] 抽稀所需夹角 必小于 ,其补角为 ,只要夹角 小于角度阈值AValue,即为满足条件。由于斜率公式为 , ,此角度计算需考虑线段斜率不存在\n情况(如线段垂直于X轴),解决办法为将某个特征点的经度偏移1个单位,相当于斜率直接等于纬度的差值取反,如 。\n[0032] 步骤14、根据道格拉斯-普克法进行曲线特征点的进一步筛选,逐一计算没有被标记为可删除的各曲线特征点到曲线首末点虚连直线的垂距,与给定阈值DValue相比,若小于该阈值DValue,则标记曲线首末点间所有中间点的抽稀状态为可删除,否则标记为保留点,并以该点为界,将曲线分为前后两个部分,重复步骤14。\n[0033] 所述的平滑处理闭合曲线特征点的具体步骤如下:\n[0034] 步骤21、从数组中顺序取出抽稀处理后被标记为保留点的闭合曲线的3个特征点,按同一方向规则,以中间特征点为坐标系原点,分别计算出从X正轴方向逆时针旋转到相邻特征点连成的线段所构成的旋转角度,通过两旋转角度即可算出内夹角,如图1(a),内夹角为| |,如果求出的内夹角大于 ,如图1(b),则必须用 -| |;\n[0035] 平滑处理所需的角度主要是根据余弦与弧度间相互转换获得。如果纬度差值,则从X正轴逆时针旋转到相邻特征点虚连直线所构成的角度需要用公式\n进行处理,其中Radian为弧度,Pi = 3.14159265359。3个特\n征点求出2个旋转角度相减取绝对值即为平滑处理所需内夹角,如果相减取绝对值后的角度大于 ,需要用 减去该角度,才是真正的内夹角。\n[0036] 步骤22、将步骤21中计算出的内夹角与给定角度阈值SAValue比较,若小于该角度阈值SAValue,则继续执行步骤21,否则根据相邻特征点连成线段长度获取2个平滑点,计算出2平滑点间距离,与给定间距阈值SLValue比较,若小于该间距阈值SLValue,则继续执行步骤21,否则标记该中间特征点为可删除,并将这2个平滑点作为特征点保存到数组中,重复步骤22,直到该闭合曲线上所有特征点都被遍历过;\n[0037] 步骤23、当抽稀率大于目标值,而平滑率小于目标值时,判断已达致曲线抽稀和平滑处理的目标效果,所述的抽稀率=(抽稀前特征点总个数-抽稀后保留的特征点总个数)/抽稀前特征点总个数,所述的平滑率=(平滑后保留的特征点总个数-抽稀后保留的特征点总个数)/抽稀后保留的特征点总个数。\n[0038] 以上所述,仅是本发明较佳实施例而已,并非对本发明的技术范围作任何限制,故凡是依据本发明的技术实质对以上实施例所作的任何细微修改、等同变化与修饰,均仍属于本发明技术方案的范围内。
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有引用任何外部专利数据! |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |