一种三维模型单体化方法、系统、存储介质及设备
技术领域
本发明涉及地理信息技术领域,尤其是涉及一种三维模型单体化方法、系统、存储介质及设备。
背景技术
现阶段的倾斜摄影三维模型数据是整体模型,无法选中单个建筑,而对于大多数实际应用而言,需要对建筑等地物进行单独的选中、赋予属性、查询属性等基本的GIS操作。因此,单体化成为三维整体模型在实际应用中必须要解决的问题。
当前实景三维数据的利用率较低、使用管理不灵活、经济效益未能发挥出应有的价值与非单体化有密切关系,为了发挥倾斜实景三维数据的价值,满足管理人员、专业用户对数据管理、使用更新的要求,因此有必要对倾斜摄影三维模型进行单体化工作。
对倾斜摄影三维模型进行单体化时,通常是按照常规的、固定缓冲距离形成的缓冲区进行单体化。但是,利用这种缓冲区方式进行数据处理时,对于距离紧密的地块,容易因为缓冲距离过小,导致成果数据缺失;或者由于单体模型数据容易出现扎堆、过于聚集的情况,导致成果数据冗余。
发明内容
本发明的目的在于克服现有技术的缺点与不足,提供一种提高距离紧密地块单体化提取效果的三维模型单体化方法、系统、存储介质及设备。
一种三维模型单体化方法,包括以下步骤:
沿每个地块的边界线设置等距离缓冲区,判断每个地块的等距离缓冲区是否存在与其它地块相交;
获取等距离缓冲区与其它地块相交的地块,根据设定距离构建该地块每条边的外扩平行线;
判断该外扩平行线与是否与其它地块相交,若是,计算该边到相交地块的最短距离,以该最短距离的1/2重新构建该边的外扩平行线;获取相邻外扩平行线的交点;否则,获取相邻外扩平行线的交点;
根据所述相邻外扩平行线的交点构建缓冲多边形;
根据所述缓冲多边形对三维模型进行单体化提取。
相对于现有技术,本发明通过对每一块地块,分解多边形地块的每条边,根据每条边的实际情况,构建不同外扩距离的外扩平行线,通过获取相邻平行线的交点构建不规则的缓冲多边形,通过以灵活的缓冲距离构建缓冲区,为osgb三维数据单体化提取,提供了更合适的提取范围,避免了三维成果数据缺失或过量,大大增加了单体成果数据的可用性。
在本发明一个实施例中,所述三维模型单体化方法还包括以下步骤:
对等距离缓冲区与其它地块不相交的地块,以该地块和缓冲区构建缓冲多边形,根据所述缓冲多边形对三维模型进行单体化提取
在本发明一个实施例中,所述获取所述相邻外扩平行线交点步骤中,通过计算每个外扩平行线的解析式方程,利用笛卡尔解析几何获取相邻外扩平行线交点,将几何图形数值化,便于计算机进行计算。
在本发明一个实施例中,所述获取其等距离缓冲区与其它地块相交的地块,根据设定距离构建该地块每条边的外扩平行线步骤具体包括:
获取其等距离缓冲区与其它地块相交的地块,以顺时针的顺序将所述地块的各边转换为线段数组;
以5m的距离构建该地块每条边的外扩平行线。
本发明还提供了一种三维模型单体化系统,包括:
缓冲区设置模块,用于沿每个地块的边界线设置等距离缓冲区,判断每个地块的等距离缓冲区是否存在与其它地块相交;
外扩平行线构建模块,用于获取其等距离缓冲区与其它地块相交的地块,根据设定距离构建该地块每条边的外扩平行线;
交点获取模块,用于判断该外扩平行线与是否与其它地块相交,若是,计算该边到相交地块的最短距离,以该最短距离的1/2重新构建该边的外扩平行线;获取所述相邻外扩平行线交点;否则,获取所述相邻外扩平行线交点;
多边形构建模块,用于根据所述所述相邻外扩平行线交点,构建缓冲多边形;
单体化提取模块,用于根据所述缓冲多边形对三维模型进行单体化提取。
在本发明一个实施例中,所述三维模型单体化系统还包括:
非相交地块提取模块,用于对等距离缓冲区与其它地块不相交的地块,以该地块和缓冲区构建缓冲多边形。
在本发明一个实施例中,所述多边形构建模块包括:
方程计算单元,用于计算每个外扩平行线的解析式方程;
交点获取单元,用于利用笛卡尔解析几何获取相邻外扩平行线交点。
在本发明一个实施例中,所述外扩平行线构建模块包括:
相交地块获取单元,判断每个地块的等距离缓冲区是否存在与其它地块的相交的情况,获取其中存在与其它地块相交的地块;
数组转换单元,用于以顺时针的顺序将所述地块的各边转换为线段数组;
外扩平行线构建单元,用于以5m的距离构建该地块每条边的外扩平行线。
本发明还提供了一种计算机可读存储介质,其上储存有计算机程序,该计算机程序被处理器执行时实现如上述任意一项所述的三维模型单体化方法的步骤。
本发明还提供了一种计算机设备,包括存储器、处理器以及存储在所述存储器中并可被所述处理器执行的计算机程序,所述处理器执行所述计算机程序时实现如上述任意一项所述的三维模型单体化方法的步骤。
为了更好地理解和实施,下面结合附图详细说明本发明。
附图说明
图1为本发明实施例中一种三维模型单体化方法的流程图;
图2为本发明实施例中三维模型单体化系统的结构示意图;
图3为利用本发明所述三维模型单体化提取方法得到的缓冲区示意图;
图4为利用本发明所述三维模型单体化提取方法得到的模型示意图;
图5为利用本发明所述三维模型单体化提取方法得到的部分模型具体示意图;
图6为利用本发明所述三维模型单体化提取方法得到的另一部分模型具体示意图。
具体实施方式
实施例
本发明所述程序代码在编程上,基于ArcEngine和C#平台实现并完成。
请参阅图1,本发明提供了一种三维模型单体化方法,其中,所述三维模型数据指的是倾斜摄影数据,其格式为osgb。所述三维模型数据包括若干多边形地块,所述三维模型单体化方法包括以下步骤:
步骤S101:沿每个地块的边界线设置等距离缓冲区,判断每个地块的等距离缓冲区是否存在与其它地块相交;在本实施例中,所述等距离缓冲区指的是以每个地块的边界为依据,作缓冲距离为5m的缓冲区。
步骤S201:获取其等距离缓冲区与其它地块相交的地块,根据设定距离构建该地块每条边的外扩平行线;在本实施例中,所述设定距离为5m,该步骤具体包括:
获取其等距离缓冲区与其它地块相交的地块,以顺时针的顺序将所述地块的各边转换为线段数组;
以5m的距离构建该地块每条边的外扩平行线。通过上述步骤,将面状的多边形转换为线状数组。
在一个实施例中,所述三维模型单体化方法还包括以下步骤:
步骤S211:对等距离缓冲区与其它地块不相交的地块,以该地块和缓冲区构建缓冲多边形,根据所述缓冲多边形对三维模型进行单体化提取。若在5m的缓冲区内没有与其它地块相交,则以该地块5m缓冲区作为新的几何形状,从而输出该地块新的矢量图斑,实现三维模型的单体化提取。
步骤S202:判断该外扩平行线与是否与其它地块相交,若是,计算该边到相交地块的最短距离,以该最短距离的1/2重新构建该边的外扩平行线;获取所述相邻外扩平行线交点;否则,获取所述相邻外扩平行线交点。
其中,如果外扩平行线在与原线段相应的坐标值单位内,与其他面状地块没有相交的,则该外扩多边形为所求,将其记录入外扩平行线结果数组内。如果外扩平行线在与源线段相应的坐标值范围内,与其他面状地块有相交的,则记录下边线段对象及其对应的、与外扩平行线相交的面状地块对象(对象组),在本实施例中,设定所述外扩平行线方程为AX+BY+C=0,其中,A、B、C分别为外扩平行线的参数;
所述获取外扩平行线的步骤如下:
获取多边形地块其中一条边上的两点tmpLine.FromPoint、tmpLineToPoint,根据两个点的坐标(tmpLine.FromPoint.X、tmpLine.FromPoint.Y)、(tmpLineToPoint.X,tmpLineToPoint.Y)计算参数A和参数B;
具体地,将两点tmpLine.FromPoint、tmpLineToPoint的横坐标、纵坐标分别进行比较,若横坐标相等,则令A=1,B=0;任选其中一点的横坐标与所述多边形地块的中心点tmpPolygonCenterPoint的横坐标进行比较,若该点横坐标是否大于所述多边形地块中心点的横坐标确定所述该边位于该多边形中心点左方或右方,
若tmpLineFromPoint.X>tmpPolygonCenterPoint.X,该边位于该多边形中心点右方,则参数C为该点横坐标加上设定缓冲距离tmpDistance的负值;即:
C=-(tmpLineFromPoint.X+tmpDistance)
否则,参数C为该点横坐标减去设定缓冲距离tmpDistance的负值,即:
C=-(tmpLineFromPoint.X-tmpDistance);
若纵坐标相等,则令A=0,B=1;任选其中一点的纵坐标与所述多边形地块的中心点tmpPolygonCenterPoint的纵坐标进行比较,若该点纵坐标是否大于所述多边形地块中心点的纵坐标确定所述该边位于该多边形中心点上方或下方,在本实施例中,选取tmpLineFromPoint与多边形地块的中心点tmpPolygonCenterPoint进行比较,若tmpLineFromPoint.Y>tmpPolygonCenterPoint.Y,则该边位于该多边形中心点上方,参数C为该点坐标加上设定缓冲距离tmpDistance的负值;即:C=-(tmpLineFromPoint.Y+tmpDistance);
否则,参数C为该点纵坐标减去设定缓冲距离tmpDistance的负值,即:C=-(tmpLineFromPoint.Y-tmpDistance);
若横纵坐标均不相等,利用两点坐标值计算斜率k,具体地,
k=(tmpLineFromPoint.Y-tmpLineToPoint.Y)/(tmpLineFromPoint.X-tmpLineToPoint.X);令A=k,B=-1;通过判断该边的截距b与中心点的截距b_center的大小,判断该边位于中心点上方或下方;其中,b=tmpLineFromPoint.Y-k*tmpLineFromPoint.X;
b_center=tmpPolygonCenterPoint.Y-k*tmpPolygonCenterPoint.X;
若b>b_center,该边位于中心点上方,根据三角函数原理,根据下列方式进行计算:
其中,θ=Atan(k),
否则,该边位于中心点下方,根据三角函数原理,根据下列方式进行计算:
所述计算该边到相交地块的最短距离,以该最短距离的1/2重新构建该边的外扩平行线;获取相邻外扩平行线的交点的步骤具体实现方式为:计算线段到面状地块对象(对象组)的最短距离。以该最短距离的1/2作为外扩距离,重新做该线段的外扩平行线,并在与原线段相应的坐标值范围内,获得其外扩平行线段成果,记入外扩平行线结果数组中。其代码如下:
在本实施例中,所述相邻外扩平行线指的是外扩平行线数组上相邻的外扩平行线,由于原面状多边形是以逆时针的顺序,按多边形地块的边分解成为多条线段的,按顺序遍历外扩平行线结果数组时,可以认为数组上相邻的外扩平行线,在空间上也是相邻的。在获取所述相邻外扩平行线交点步骤中,通过计算每个外扩平行线的解析式方程,利用笛卡尔解析几何获取相邻外扩平行线交点,并将结果记录在交点数组中。
步骤S203:根据所述相邻外扩平行线交点,构建缓冲多边形;具体地,通过遍历交点数组,重新构建新的、以原多边形各边不规则的缓冲距离为依据的缓冲多边形,
具体地,设置第一直线lineFirst和与之相邻的第二直线lineNext,所述第一直线和第二直线为外扩平行线,其均为方程式为AX+BY+C=0的直线,其中,判断第一直线的是否为纵坐标为恒定值的直线,若是,则以第一直线的纵坐标恒定值-lineFirst.C/lineFirst.B作为交点的纵坐标y,根据该纵坐标及第二直线的方程式,计算其交点处的横坐标x,得到交点坐标(x,y)。
若否,判断第一曲线是否为横坐标为恒定值的直线,若是,则第一直线的横坐标恒定值-lineFirst.C/lineFirst.A作为交点的横坐标x,根据该横坐标及第二直线的方程式,计算其交点处的纵坐标y,得到交点坐标(x,y)。
若第一直线非上述两种情况,按照上述方式对第二直线的参数lineNext.A和lineNext.B进行判断,根据第二曲线是否为纵坐标为恒定值的直线或横坐标为恒定值的直线,计算第一曲线和第二曲线的交点坐标(x,y)。
若第一直线与第二直线均不属于纵坐标为恒定值的直线或横坐标为恒定值的直线,以-lineFirst.A/lineFirst.B计算第一直线的斜率k0、以-lineNext.A/lineNext.B计算第二直线的斜率k1,以-lineFirst.C/lineFirst.B计算第一直线的截距b0,以-lineNext.C/lineNext.B计算第二直线的截距b1,根据第一直线的斜率k0、第二直线的斜率k1、第一直线的截距b0、第二直线的截距b1得到交点横坐标x,具体地,x=(b1-b0)/(k0-k1),根据交点横坐标x得到交点纵坐标y,得到交点坐标(x,y)。
根据获得的交点坐标,得到缓冲多边形。
步骤S301:根据所述缓冲多边形对三维模型进行单体化提取。
本发明还提供了一种三维模型单体化系统,包括:
缓冲区设置模块101,用于沿每个地块的边界线设置等距离缓冲区,判断每个地块的等距离缓冲区是否存在与其它地块相交;
外扩平行线构建模块201,用于获取其等距离缓冲区与其它地块相交的地块,根据设定距离构建该地块每条边的外扩平行线;
交点获取模块202,用于判断该外扩平行线与是否与其它地块相交,若是,计算该边到相交地块的最短距离,以该最短距离的1/2重新构建该边的外扩平行线;获取所述相邻外扩平行线交点;否则,获取所述相邻外扩平行线交点;
多边形构建模块203,用于根据所述所述相邻外扩平行线交点,构建缓冲多边形;
单体化提取模块301,用于根据所述缓冲多边形对三维模型进行单体化提取。
在本发明一个实施例中,所述三维模型单体化系统还包括:
非相交地块提取模块211,用于对等距离缓冲区与其它地块不相交的地块,以该地块和缓冲区构建缓冲多边形。
在本发明一个实施例中,所述多边形构建模块包括:
方程计算单元,用于计算每个外扩平行线的解析式方程;
交点获取单元,用于利用笛卡尔解析几何获取相邻外扩平行线交点。
在本发明一个实施例中,所述外扩平行线构建模块包括:
相交地块获取单元,判断每个地块的等距离缓冲区是否存在与其它地块的相交的情况,获取其中存在与其它地块相交的地块;
数组转换单元,用于以顺时针的顺序将所述地块的各边转换为线段数组;
外扩平行线构建单元,用于以5m的距离构建该地块每条边的外扩平行线。
所述三维模型单体化的原理如下:因为所述地块之间的距离越紧密,在倾斜摄影的时候,就越不能拍摄到相邻立面之间的三维数据与倾斜影像;而且,相邻立面三维数据更容易会重叠在一起,增加了三维数据使用、观测的难度。所以,在进行三维数据单体化提取的时候,对于约密集的地块,缓冲距离应该越小;越稀疏的地块,距离越大。按此推断,对多边形地块,按其组成各边,根据地块间不同距离,组件缓冲多边形,是解决当前问题的方法。
本发明还提供了一种计算机可读存储介质,其上储存有计算机程序,该计算机程序被处理器执行时实现上述任意一项所述的三维模型单体化方法的步骤。
本发明可采用在一个或多个其中包含有程序代码的存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。计算机可读储存介质包括永久性和非永久性、可移动和非可移动媒体,可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其它数据。计算机的存储介质的例子包括但不限于:相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其它类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其它内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其它光学存储、磁盒式磁带,磁带磁磁盘存储或其它磁性存储设备或任何其它非传输介质,可用于存储可以被计算设备访问的信息。
本发明还提供了一种计算机设备,包括存储器、处理器以及存储在所述存储器中并可被所述处理器执行的计算机程序,所述处理器执行所述计算机程序时实现如上述任意一项所述的三维模型单体化方法的步骤。
如图3所示,其为利用本发明所述三维模型单体化提取方法得到的缓冲区示意图,如图4-6分别为利用本发明所述三维模型单体化提取方法得到的单体提取结果示意图,由图中可见,对于选中的建筑,其建筑结构完整,细节均得到清晰的展示。
相对于现有技术,本发明通过分解多边形地块的每条边,根据每条边的实际情况,构建不同外扩距离的外扩平行线,通过获取相邻平行线的交点构建不规则的缓冲多边形,通过以灵活的缓冲距离构建缓冲区,为倾斜摄影三维数据单体化提取,提供了更合适的提取范围,避免了三维成果数据缺失或过量,大大增加了单体成果数据的可用性。
本发明并不局限于上述实施方式,如果对本发明的各种改动或变形不脱离本发明的精神和范围,倘若这些改动和变形属于本发明的权利要求和等同技术范围之内,则本发明也意图包含这些改动和变形。