一种大范围地面连续高程提取方法
技术领域
本发明涉及地理信息技术领域,具体涉及一种基于地形金字塔以及Quantized-Mesh格式的大范围地面连续高程提取方法。
背景技术
在铁路各专业三维设计过程中,地面高程提取是一类应用非常广泛的地形计算方法,比如线路纵断面设计、桥梁孔跨布置以及路基支挡结构等,均离不开高程提取的相关算法。由于铁路设计长大线性工程的特点,涉及到的高程数据体量大,范围广,在进行地形高程提取时通常需要对地形数据进行分块处理。而WMTS以及Quantized-Mesh为当前应用比较广泛的地形金字塔瓦片服务标准以及地形瓦片数据格式,通过支持这两种标准和数据格式,不仅提高了算法的通用性,也降低了地形数据处理的工作量和工作难度。
现有的高程提取方法一种是通过人工的方式从实测点云数据中提取目标高程点,此种方式虽然保证了高程提取的精度,但效率很低,难以满足任意大范围地面高程提取的需求;另一种是利用算法进行自动提取,通常是通过半边结构或者边表等,建立全局或者分块的边与三角形对应关系,从而实现目标点高程的提取,但现有的高程提取算法存在数据预处理时间长、数据利旧率低以及算法通用性差等问题,且很少考虑孤立三角形以及重叠三角形等特殊情况。
发明内容
为了解决现有技术存在的问题,本发明提供一种考虑了特殊三角形(孤立三角形、重叠三角形),且基于WMTS标准以及Quantized-Mesh格式的大范围地面连续高程提取方法。该方法的计算效率高、通用性强、数据利旧率高,能够满足铁路三维设计过程中对大规模地面连续高程提取的需求。
为此,本发明采用以下技术方案:
一种大范围地面连续高程提取方法,包括以下步骤:
S1,处理生成以WMTS标准以及Quantized-Mesh格式存储的地形金字塔数据:
通过支持Quantized-Mesh格式的地形金字塔切分工具对以规则格网模型存储的地面数字高程模型按照WMTS标准的规则进行切分,形成按照四叉树结构进行存储的地形金字塔,其中每块地形瓦片数据均以Quantized-Mesh格式存储,所述地形瓦片数据包括三角形索引ti、顶点索引pi和构网信息;
S2,构建全局地形瓦片边界索引:
根据Quantized-Mesh格式地形瓦片数据的瓦片边界被等分为相同段数N的特点,建立全局地形瓦片的边界三角形索引,令每个地形瓦片的边界三角形索引0-(N-1)、N-(2N-1)、2N-(3N-1)以及3N-(4N-1)分别对应地形瓦片西、北、东、南四条边上的三角形;
S3,计算起始待查找点所在的地形瓦片数据:
将输入的待查找目标点列表中第一个待查找点作为起始待查找点p,根据其经纬度坐标(lon,lat)以及最高精度地形数据所在的金字塔层级z,计算该点所在的地形瓦片索引坐标(x,y),其中:
从而找到该点所在的地形瓦片;
S4,生成地形瓦片数据的边表:
遍历S3中找到的地形瓦片中的每个三角形,根据步骤S1得到的三角形索引ti和顶点索引pi,对于每个三角形中的每一条边,记录该边与该三角形的对应关系,并作为边表中的一条记录,从而得到整个地形瓦片格网所对应的完整边表;
S5,计算起始待查找点p所在的三角形及高程:
在所述起始待查找点p所在瓦片数据上随机选择一个三角形作为当前三角形,将起始待查找点p分别与当前三角形的任意两个顶点构成一个三角形,得到三个三角形,并根据这三个三角形定向面积的符号来确定是否已经找到了起始待查找点p所在的三角形,或者哪一条边距离起始待查找点p最近,直到找到起始待查找点p所在的三角形,通过三角形内插法求得起始待查找点p的高程,并返回p点及其所在的三角形,分别作为步骤S6的输入;
S6,循环计算后续待查找点的高程。
上述的步骤S5包括以下分步骤:
S51,在起始待查找点p所在瓦片数据上随机选择一个三角形作为当前三角形,将当前三角形索引记录到一个栈空间中,并令起始待查找点p与当前三角形的任意两个顶点分别构成一个三角形,共构成三个三角形,并分别求出这三个三角形定向面积的符号,设p1(x1,y1)、p2(x2,y2)、p3(x3,y3)三点构成的三角形的定向面积为S,则有:
S52,假定SArea(·)为计算三角形定向面积的函数,给定起始待查找点p以及三角形三个顶点p1、p2和p3,则有:
若SArea(p2,p1,p)≥0、SArea(p2,p3,p)≥0且SArea(p1,p3,p)≥0,则起始待查找点p在当前三角形内部,通过三角形内插法求得起始待查找点p的高程,并返回p点及其所在的三角形,分别作为步骤S6的输入;
若SArea(p2,p1,p)<0、SArea(p2,p3,p)≥0且SArea(p1,p3,p)≥0,则起始待查找点p在当前三角形内部,当前三角形的边p1p2距离起始待查找点p最近,将p1p2作为当前边,执行步骤S53;
S53,查询边表中所有与当前边p1p2相关的记录,从除当前三角形以外的记录中随机选择一条记录,将该记录的三角形作为新的当前三角形并判断该当前三角形是否存在以下两种情况:
1)该当前三角形为孤立三角形;
2)陷入了路径循环,
如果存在以上两种情况,则先判断起始待查找点p是否在该当前三角形内,如果在,则说明找到了目标点;如果不在,则说明当前三角形仅是查找路径上的过渡三角形,并不影响目标点高程的提取,因此将边表中所有关于该当前三角形的记录全部删除,回退到上一个三角形,重新进行判断,直到找到起始待查找点p所在的目标三角形为止;
然后,通过三角形内插法求得起始待查找点p的高程,并返回p点及其所在的三角形,分别作为步骤S6的输入。
其中,所述孤立三角形的判断方法为:该当前三角形不在边界上,且仅有一条边与其他三角形相接。陷入了路径循环的判断方法为:该当前三角形的索引在栈空间中已记录过。
若步骤S6循环计算后续待查找点的高程采用稀疏模式,则:将当前三角形作为起始三角形,将下一个待查找点作为目标点,重复步骤S5,直到计算完毕所有待查找目标点列表中的点的高程。
若步骤S6循环计算后续待查找点的高程采用稠密模式,则具体步骤如下:
(1)以步骤S5输出的p作为起始点ps,p点所在的三角形作为当前三角形,以下一个待查找点作为目标点pe,将pe作为终点,构成切线pspe,切线的方向向量为
(2)判断切线pspe与当前三角形三条边的相交情况:
若当前三角形为起始三角形,且切线pspe和当前三角形的三条边不相交,则判定目标点pe和起始点ps均在当前三角形内,目标点找到,执行步骤(3);
若当前三角形不为起始三角形,且切线pspe和当前三角形的三条边仅有一条相交,则判定目标点pe在当前三角形内,目标点找到,执行步骤(3);
若当前三角形为起始三角形,且切线pspe和当前三角形的一条边相交,则选择该边对应的相邻三角形为下一三角形;或者,若切线与当前三角形有两条相交边,在这两条相交边中,排除掉当前三角形与上一三角形的公用边,将剩余的另一条边作为当前边,计算并记录切线与当前边的交点高程及位置以后,令当前边对应的相邻三角形为下一三角形,再进行以下判断:
1)若下一三角形为孤立三角形,则记录切线与孤立三角形的交点,再利用步骤S5中设计的栈空间,回退到上一三角形,同时在边表中删去孤立三角形的相关记录,再将上一三角形作为当前三角形,重复步骤(2)
2)判断下一三角形是否为折叠三角形,若为折叠三角形,则选择所在直线与下一三角形中除当前边以外的相交边作为新的当前边,计算并记录交点高程及位置以后,根据新的当前边找到下下个三角形,并将其作为当前三角形,重复步骤(2);
如果下一三角形既非孤立三角形,也非折叠三角形,则直接重复步骤(2);
(3)记录该点的高程和位置,将该目标点设置为新的起始点,目标点所在的三角形为当前三角形,并将下一个待查找点设置为新的目标点,构建新的切线,重复步骤(2),直到计算完毕所有的待查找点的高程。
上述的方法中,判断下一三角形是否为折叠三角形的方法为:
假设下一三角形中不在当前边上的另外一点p到当前边所在直线的垂足为o,通过判断向量与/>的夹角,来判断当前三角形是否为折叠三角形:若夹角为钝角,则说明当前三角形为折叠三角形;若夹角为锐角,则说明当前三角形并非为折叠三角形,仍按照切线段进行相交情况判断。
上述的步骤S3中,若遇到跨瓦片的情况时,基于S2建立的边界三角形索引找到下一瓦片上相邻的三角形,下一瓦片索引(xn,yn),满足:
其中t为当前三角形的索引,(x,y)为当前瓦片的索引坐标。
上述方法步骤S2中,通常N为64。
本发明的方法利用计算机自动化手段从满足WMTS标准以及Quantized-Mesh格式的地形瓦片金字塔数据中提取大范围地面连续高程。
与现有技术相比,本发明具有以下优点和积极效果:
1.本发明充分考虑了Quantized-Mesh格式的地形瓦片数据的特点,将所有的地形瓦片边界平均划分为相同的段数,建立起全局的地形瓦片边界索引,从而简化了跨瓦片查找目标点的计算过程,使得计算效率得到了极大的提升;
2.本发明利用栈空间来记录目标点查找路径,设计了一种“回退”机制,解决了查找目标点过程中,因遇到孤立三角形以及陷入路径循环导致的算法终止或陷入死循环的问题;
3.针对稠密模式下的连续点高程提取,本发明提供了一种判断三角形是否为折叠三角形的方法,避免了因遇到折叠三角形导致的无法找到正确的下一三角形的问题;
4.本发明的方法提供了稀疏和稠密两种连续高程提取模式,提升了算法的通用性和实用价值。
附图说明
图1为本发明高程提取方法的流程图;
图2为本发明中WMTS标准下地形金字塔及Quantized-Mesh格式地形瓦片示意图;
图3为本发明中地形瓦片边界三角形跨瓦片对应关系图;
图4为本发明中待查找点所在地形瓦片索引示意图;
图5为本发明中地形格网边表示意图;
图6为本发明中折叠三角形相交情况判断原理图。
具体实施方式
下面结合附图对本发明的技术方案进行详细说明。
参见图1,本发明的大范围地面连续高程提取方法包括以下步骤:
S1,处理生成以WMTS标准以及Quantized-Mesh格式存储的地形金字塔数据:
参见图2,通过支持Quantized-Mesh格式的地形金字塔切分工具(如:CesiumLab),对以规则格网模型存储的数字高程模型(DEM)按照WMTS(Web Map Tile Service)标准的规则进行切分,形成按照四叉树结构进行存储的地形金字塔,且其中每块地形瓦片数据(包括三角形索引ti、顶点索引pi和构网信息等)均以Quantized-Mesh格式存储。
S2,构建全局地形瓦片边界索引:
如图3所示,在Quantized-Mesh格式的地形数据中,任意一块Quantized-Mesh格式的地形瓦片数据的边界均被均匀地等分为固定数值的段数(通常为64段,本步骤以64段为例),因此,瓦片边界上每一个分段均能唯一地指向一个边界上的三角形,且边界上的三角形均按照相同的顺序排列。因此,对于任意一块Quantized-Mesh格式的地形瓦片数据来说,四条边界上的三角形与相邻地形瓦片数据相应边界上的三角形间的对应关系是不变的,因此,可以为每一个Quantized-Mesh格式存储的地形瓦片数据的边界三角形按照西-北-东-南的顺序固定赋予0-63、64-127、128-191以及192-255的边界三角形索引值(共有64*4=256个),构建边界三角形索引;令所有地形瓦片四条边上相同位置的三角形,均具有相同的三角形索引,从而能够很容易地为瓦片边界上的三角形找到相邻地形瓦片上与其共边的三角形。从而建立起全局的跨瓦片对应关系。
在进行连续点高程提取时,不可避免地会遇到跨地形瓦片的情况,由于有了全局的地形瓦片索引,因此可以方便地判断是否需要跨瓦片查找(当前三角形索引小于256,且当前三角形距目标点最近的边找不到相邻的下一三角形),以及相邻瓦片上与当前三角形共边的三角形。
S3,计算起始待查找点所在的地形瓦片数据:
如图4所示,将输入的待查找目标点列表中的第一个点作为起始待查找点,根据其经纬度坐标(lon,lat)以及最高精度地形数据所在的金字塔层级z,计算该点所在的地形瓦片索引坐标(x,y),其中:
从而找到该点所在的地形瓦片;
从图4中还可以看出,当遇到跨瓦片查找的情况时(当前三角形索引i小于256,且当前三角形距目标点最近的边找不到相邻的下一三角形),可结合步骤S2中构建的边界三角形索引,找到下一瓦片上相邻的三角形,下一瓦片索引坐标(xn,yn)满足:
其中t为当前三角形的索引,(x,y)为当前瓦片的索引坐标,从而实现快速、高效地跨瓦片查找。
S4,生成地形瓦片数据的边表:
如图5所示,由于在S1生成的Quantized-Mesh格式的地形数据中包括三角形索引ti、顶点索引pi和构网信息等,通过遍历S3中所找到的地形瓦片中的每一个三角形,记录该三角形的每一条边与该三角形的对应关系,就能够得到整个地形瓦片格网所对应的完整边表。
S5,计算起始待查找点p所在的三角形及高程:
通过步骤S2-S4已经计算出起始待查找点所在地形瓦片数据,并为其建立了边表,后续还需要计算出该起始待查找点p所在的三角形,才能真正获取该点的高程值,具体过程如下:
S5l,在起始待查找点p所在瓦片数据上随机选择一个三角形作为当前三角形,将当前三角形索引记录到一个栈空间中,并令起始待查找点p与当前三角形的任意两个顶点分别构成一个三角形,共构成三个三角形,并分别求出这三个三角形定向面积的符号,设p1(x1,y1)、p2(x2,y2)、p3(x3,y3)三点构成的三角形的定向面积为S,则有:
S52,假定SArea(·)为计算三角形定向面积的函数,给定起始待查找点p以及三角形三个顶点p1、p2和p3,则有:
若SArea(p2,p1,p)≥0、SArea(p2,p3,p)≥0且SArea(p1,p3,p)≥0,则起始待查找点p在当前三角形内部,通过三角形内插法求得起始待查找点p的高程,并返回p点及其所在的三角形,分别作为步骤S6的输入;
若SArea(p2,p1,p)<0、SArea(p2,p3,p)≥0且SArea(p1,p3,p)≥0,则起始待查找点p在当前三角形内部,当前三角形的边p1p2距离起始待查找点p最近,将p1p2作为“当前边”,执行步骤S53;
S53,查询边表中所有与当前边p1p2相关的记录,从除当前三角形以外的记录中随机选择一条记录,将该记录的三角形作为新的当前三角形并判断该当前三角形是否存在以下两种情况:
1)该当前三角形为孤立三角形,即该当前三角形不在边界上,且仅有一条边与其他三角形相接;
2)陷入了“路径循环”,即,该当前三角形的索引在栈空间中已记录过。
如果存在以上两种情况,则先判断起始待查找点p是否在该当前三角形内,如果在,则说明找到了目标点;如果不在,则说明该当前三角形仅是查找路径上的过渡三角形,并不影响目标点高程的提取,因此,可以将边表中所有关于该当前三角形的记录全部删除,回退到上一个三角形,重新进行判断,直到找到起始待查找点p所在的目标三角形为止。
然后,通过三角形内插法求得起始待查找点p的高程,并返回p点及其所在的三角形,分别作为步骤S6的输入。
S6,循环计算后续待查找点的高程:
循环计算后续待查找点高程的方法包括稀疏和稠密两种模式,取决于客户的具体需求。其中,稀疏模式下的高程提取方法就是步骤S5的重复,只提取输入待查找点的高程;而稠密模式则会额外返回所有相邻两待查找点所构成的切线与地形格网的交点。
稠密模式下高程的提取方法为:以起始待查找点p为起点,下一个待查找点为终点构成切线,求该切线与地面格网的所有交点,并将所有交点以及该切线终点的高程作为查询结果返回,若遇到跨瓦片的情况,则根据当前瓦片的三角形索引,基于S2建立的瓦片边界三角形索引以及WMTS标准下地形瓦片的组织原理,直接定位到下一三角形及地形瓦片,并计算该地形瓦片的边表,之后,重复上述过程,直到计算完毕所有待查询列表中的点。具体包括以下分步骤:
(1)以步骤S5输出的p作为起始点ps,p点所在的三角形作为当前三角形,下一个待查找点(目标点)pe为终点构成切线pspe,切线的方向向量为
(2)判断切线pspe与当前三角形三条边的相交情况:
若当前三角形为起始三角形,且切线pspe和当前三角形的三条边不相交,则说明目标点pe和起始点ps均在当前三角形内,目标点找到,执行步骤(3);
若当前三角形不为起始三角形,且切线pspe和当前三角形的三条边仅有一条相交,则说明目标点pe在当前三角形内,目标点找到,执行步骤(3);
若当前三角形为起始三角形,且切线pspe和当前三角形的一条边相交,则选择该边对应的相邻三角形为下一三角形;或者,若切线与当前三角形有两条相交边,在这两条相交边中,排除掉当前三角形与上一三角形的公用边,将剩余的另一条边作为当前边,计算并记录切线与当前边的交点高程及位置以后,令当前边对应的相邻三角形为下一三角形,再进行以下判断:
1)若下一三角形为孤立三角形,则记录切线与孤立三角形的交点,再利用步骤S5中设计的栈空间,回退到上一三角形,同时在边表中删去孤立三角形的相关记录(需要注意的是:回退以后,再次计算的切线与该三角形的交点无需重复记录),再将上一三角形作为当前三角形,重复步骤(2)
2)判断下一三角形是否为折叠三角形,如图6所示,方法如下:
假设下一三角形中不在当前边上的另外一点p(即当前边以外的点)到当前边所在直线的垂足为o,需通过判断向量与/>的夹角,来判断当前三角形是否为折叠三角形:若夹角为钝角,则说明当前三角形为折叠三角形;若夹角为锐角,则说明当前三角形并非为折叠三角形,可仍按照切线段进行相交情况判断。
若下一三角形为折叠三角形,则需选择所在直线与下一三角形中除当前边以外的相交边作为新的当前边,计算并记录交点高程及位置以后,根据新的当前边找到下下个三角形,并将其作为当前三角形,重复步骤(2);
如果下一三角形既非孤立三角形,也非折叠三角形,则直接重复步骤(2);
(3)记录该点的高程和位置,将该目标点设置为新的起始点,目标点所在的三角形为当前三角形,并将下一个待查找点设置为新的目标点,构建新的切线,重复步骤(2),直到计算完毕所有的待查找点的高程。