一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

面向海量机载激光点云的分布式多级空间索引方法与流程

2022-02-20 12:41:54 来源:中国专利 TAG:


1.本发明属于激光扫描测量数据处理领域,涉及一种分布式多级空间索引方法,尤其涉及一种面向海量机载激光点云的分布式多级空间索引方法。


背景技术:

2.激光雷达测量技术(lidar)集成高精度三维激光扫描仪、定位定姿系统和高清数码相机,通过激光测距实现对现实环境的主动式测量。与其他传统测量手段相比,具有自动化程度高、受天气影响小、数据生产周期短、数据精度高等优点,可以大面积、快速、完整的获取高精度的三维空间坐标信息和纹理信息,是基础设施建设工程应用的重要数据源。
3.然而,激光点云的“海量性”给点云数据的后处理带来很大困难,已经成为限制激光点云在存储、管理、查询、分析、可视化等多方面应用的瓶颈。云计算技术,是分布式技术、并行处理技术和虚拟化技术的综合体,具有通用、廉价、分布式、高扩展性等优点,可以提供近乎无限的存储管理能力和计算能力,为海量点云数据的存储和处理提供了新思路,其灵活的体系结构、数据的充分共享和良好的可扩展性为海量激光点云数据的高效管理和利用提供了可能。
4.龚俊等利用八叉树对三维点云数据进行切割,采用动态平衡的r树对数据节点进行管理,并在此基础上建立多层次分辨率模型。杨建思利用四叉树和kd树的混合索引机制管理机载lidar数据,利用面元拟合和r树管理车载lidar数据。常用的空间索引技术有kd树,kdb树,bsp树,四叉树,八叉树,r树,r 树等,根据不同需求,选用不同的组合策略,通过索引组合,优势互补,来提高索引性能。但是,上述方法主要用于单机存储模式。相比传统单机集中式索引,分布式索引需要考虑节点通讯和开销等因素,更加复杂,不能直接沿用单机系统的索引技术。
5.近年来,分布式计算框架hadoop及其改进版本spark、分布式文件系统hdfs、分布式数据库hbase等云计算技术和软件设施快速发展。其中,spark框架采用基于内存的分布式处理模式,比hadoop mapreduce具有更好的性能和容错性。但是,其本身不支持空间数据的存储和空间操作。
6.范建永等基于hbase建立空间数据存储模型,采用格网方式构建空间索引,并使用hilbert曲线确定网格的索引id,并利用mapreduce并行创建空间索引。李勋提出一种基于hilbert曲线和r树的分布式空间索引,采用hilbert曲线对空间进行划分,通过hilbert编码,对空间数据进行排序。但是,总体而言,目前研究对于分布式存储环境下的海量激光点云的高效管理和处理不够完善和深入,对海量激光点云自身特点顾及不足。为此,本发明提出了一种融合四叉树、hilbert空间填充曲线排序、三维r树的多级分布式空间索引方法,用于海量机载激光点云在分布式云环境下的存储与并行处理。


技术实现要素:

7.为了解决背景技术中存在的上述技术问题,本发明提供了一种可以实现海量机载
激光点云在集群节点上的分布式存储以及高效查询与调度的面向海量机载激光点云的分布式多级空间索引方法。
8.为了达到上述目的,本发明采用如下技术方案:
9.一种面向海量机载激光点云的分布式多级空间索引方法,其特征在于:所述面向海量机载激光点云的分布式多级空间索引方法包括以下步骤:
10.1)基于虚拟格网对激光点云空间进行划分,形成激光点云分区;
11.2)基于四叉树和三维r树构建激光点云分区局部索引;
12.3)将各个激光点云分区局部索引的根节点,作为全局空间索引的叶子节点,利用str树建立全局空间索引。
13.作为优选,本发明所采用步骤1)的具体实现方式是:根据激光点云密度和单条点云数据占用的存储空间大小,确定虚拟格网大小,根据激光点云覆盖范围和虚拟格网大小,计算各激光点云分区的覆盖范围,利用激光点云的平面坐标,实现对应激光点云分区的快速划分。
14.作为优选,本发明所采用的步骤1)是采用hadoop hdfs实现的,所述步骤1)的具体实现方式是:
15.a)利用公式(1)计算虚拟格网边长l:
[0016][0017]
其中:
[0018]
b为hdfs文件块默认大小,在hadoop2.x版本中,所述b大小是128m;
[0019]
α为索引所占空间系数,按经验取值0.2;
[0020]
r为单条激光所占的字节数,激光点主要信息为x、y、z坐标、强度intensity、时间gpstime以及类别;
[0021]
d为机载激光点云密度,一般不超过50点/m2;
[0022]
b)扩展spark的空间数据处理功能,实现pointrdd,能够对point类型的空间数据提供弹性计算能力,利用spark中的textfile读取存储到hadoop hdfs的激光点云文件,并生成激光点云的pointrdd;
[0023]
c)利用spark中的aggregate算子,对激光点云pointrdd中每个点的最小外接矩形mbr进行聚合运算,最终确定整个工程激光点云的mbr,记为mbr


[0024]
d)根据mbr

和虚拟格网边长l,确定每个虚拟格网的坐标范围{x
min
,x
max
,y
min
,y
max
},去除无激光点的空格网,得到最终的虚拟格网列表grids;
[0025]
e)利用虚拟格网列表grids构建partitioner并输入给激光点云pointrdd,对激光点云进行分区,得到新分区的激光点云pointrdd,记为pointcloudrdd。
[0026]
作为优选,本发明所采用的步骤2)的具体实现方式是:采用四叉树对激光点云分区中的激光点进行二维剖分,对剖分得到的四叉树格网先按hilbert空间填充曲线进行一维排序,然后对排序后的四叉树格网构建r树,完成激光点云分区的局部索引构建;将激光点云分区的激光点数据和局部索引序列化到单个hdfs文件中进行保存。
[0027]
作为优选,本发明所采用的步骤2)中采用四叉树对激光点云分区中的激光点进行二维剖分的具体实现方式是:
[0028]
a)设定四叉树节点允许包含的最大激光点数目t,将整个分区的激光点云数据作为四叉树根节点压入四叉树节点缓冲区队列;
[0029]
b)获取四叉树节点缓冲区队列的首节点,统计该节点的激光点数目,设为m,如果m<t,则将该节点压入r树叶节点缓冲区队列;如果m≥t,进入步骤c);
[0030]
c)按四叉树方式分裂该节点,计算该节点的四个孩子节点对应的mbr,并将该节点内的激光点划分到四个孩子节点中,依次将四个孩子节点从四叉树节点缓冲区队列尾部逐个插入,执行完成后,继续执行步骤b);
[0031]
d)待四叉树节点缓冲队列为空时,表明分区激光点云按四叉树划分完毕。
[0032]
作为优选,本发明所采用步骤2)中对排序后的四叉树格网构建r树的具体实现方式是:
[0033]
a)设置r树的阶数和叶节点点云数目的下界值min,新建两个数组a和b;
[0034]
b)对r树叶节点缓冲区队列中的节点按照hilbert码进行一维排序,并按如下规则对其分组:激光点数量大于min的节点整体保存到数组a,激光点数量小于min的节点,将该节点中的激光点逐个保存到数组b;
[0035]
c)对数组a中的节点,批量构建r树索引;
[0036]
d)对数组b中的各个激光点,按自上而下的方式,逐点插入到步骤c)所构建的r树索引中,生成激光点云分区最终的r树索引。
[0037]
作为优选,本发明所采用步骤2)中所述将激光点云分区的激光点数据和局部索引序列化到单个hdfs文件中进行保存的具体实现方式是:利用spark的foreachpartition算子,将激光点云分区中的激光点数据和分区r树索引存储为单个hdfs文件;该文件包括用于存放分区r树索引结构信息的文件头以及各节点按照分区r树索引深度遍历顺序并存放在r树存储的各节点信息;所述文件头包括总点数、树高度、空间范围mbr、中心坐标以及索引大小;所述r树存储的各节点信息包括节点所在层号、节点对应的mbr、子节点数目以及各子节点地址。
[0038]
作为优选,本发明所采用的步骤3)中利用str树建立全局空间索引的具体实现方式是:
[0039]
a)设置r树节点的子节点数值n,计算整个激光点云的mbr,根据长边所在坐标轴的方向,确定点云的大致走向,并将各激光点云分区的根节点为叶子节点构建str树全局索引;
[0040]
b)将步骤a)构建得到的str树全局索引,以单个hdfs文件的方式存储在hadoop集群中的名字节点namenode,整个激光点云在分布式存储环境hadoop hdfs中被组织为一个融合格网、四叉树和r树多种索引的多级r树结构。
[0041]
作为优选,本发明所采用的步骤a)中构建str树全局索引的具体实现方式是:
[0042]
1)各激光点云分区的根节点为叶子节点,将同一列或同一列的所有激光点云分区组织为一个切片,作为上一层的一个节点;
[0043]
2)在x轴方向或y轴方向上,将步骤1)中生成的新一层的节点,每n个节点合为一组,形成上一层的一个节点,最后剩余的不足n个节点合并为一个节点;
[0044]
3)计算新的一层节点个数nn,如果nn≥n,则重复2)和3),否则退出。
[0045]
与现有技术相比,本发明具有以下显著优点和效果:
[0046]
本发明公开了一种面向海量机载激光点云的分布式多级索引方法,首先,根据激光点云密度和单条点云数据占用的存储空间大小,确定虚拟格网大小,根据点云覆盖范围和虚拟格网大小计算各激光点云分区覆盖范围,直接利用激光点云的平面坐标,实现激光点云的快速分区。然后,采用四叉树对激光点云分区中的激光点进行二维剖分,对剖分得到的四叉树格网首先按hilbert空间曲线进行一维排序,然后批量构建r树,并将r树索引和分区激光点云一并序列化单个hdfs数据块中。最后,将局部索引的根节点,作为全局索引的叶子节点,利用str树建立全局空间索引,并以单个hdfs文件存储在集群名字节点中,完成激光点云的多级分布式索引构建。该方法可以充分利用分布式系统提供的更为强大的存储管理能力和计算能力,实现激光点云在集群各数据节点的分布式存储和并行处理,大幅提高对海量激光点云的处理能力。相比于单机版机载激光点云管理,本发明可以充分利用分布式集群提供的更为强大的数据存储管理能力和计算能力,实现激光点云的高效查询与处理;基于虚拟格网的激光点云空间划分,免除坐标排序操作,在保证激光点空间局部性的前提下,实现激光点云的快速划分;充分利用了四叉树在二维空间剖分的快速收敛性和r树自平衡的特点,构建了激光点云的多级分布式空间索引,非常合适集群环境下机载激光点云的多层次管理和并行处理。
附图说明
[0047]
图1是本发明所采用的激光点云多级分布式索引构建流程示意图;
[0048]
图2是本发明所采用的激光点云分区局部索引构建示意图;
[0049]
图3是本发明所利用四叉树剖分所得节点构建r树的流程图。
具体实施方式
[0050]
本发明提供了一种面向海量机载激光点云的分布式多级空间索引方法,该方法包括以下步骤:
[0051]
1)基于虚拟格网的激光点云空间划分:根据激光点云密度和单条点云数据占用的存储空间大小,确定虚拟格网大小,保证单个hdfs文件块可以存储虚拟格网范围内的激光点云数据和对应的局部索引信息。根据激光点云覆盖范围和虚拟格网大小,计算各激光点云分区的覆盖范围,利用激光点云的平面坐标,实现其对应激光点云分区的快速划分。
[0052]
2)基于四叉树和三维r树的激光点云分区局部索引构建;采用四叉树对激光点云分区中的激光点进行二维剖分,对剖分得到的四叉树格网先按hilbert空间填充曲线进行一维排序,然后对排序后的四叉树格网构建r树,完成激光点云分区的局部索引构建。将激光点云分区的激光点数据和局部索引序列化到单个hdfs文件中进行保存。
[0053]
3)基于str(sort-tile-recursive)树的全局空间索引构建:将各个激光点云分区局部索引的根节点,作为全局空间索引的叶子节点,利用str树建立全局空间索引。
[0054]
以下结合附图对本发明做进一步详细描述。
[0055]
参见图1,步骤1)的具体实现方式是:
[0056]
本发明采用hadoop hdfs存储激光点云数据及其对应的空间索引。为了减少不必要的网络传输损耗,要求分区大小不超过单个hdfs数据块大小(本实施例取为128m);为保留激光点的空间局部性,空间相邻的激光点尽量分配到同一个分区。具体步骤如下:
[0057]
1)利用公式(1)计算虚拟格网边长l:
[0058][0059]
其中:
[0060]
b为hdfs文件块默认大小,在hadoop2.x版本中,基于最佳传输损耗理论,其大小为128m;
[0061]
α为索引所占空间系数,按经验一般取值0.2;
[0062]
r为单条激光所占的字节数,激光点主要信息为x、y、z坐标、强度intensity、时间gpstime、类别,本实施例中坐标和时间信息用4字节单精度浮点类型存储,强度和类别用2字节短整数类型存储,占用字节数为4
×
4 2
×
2=20字节;
[0063]
d为机载激光点云密度,一般不超过50点/m2。本实施例中,虚拟格网边长l为300m,虚拟格网大小取为300m
×
300m。
[0064]
2)扩展spark的空间数据处理功能,实现pointrdd,能够对point类型的空间数据提供弹性计算能力,利用spark中的textfile读取存储到hadoop hdfs的激光点云文件,并生成激光点云的pointrdd;
[0065]
3)利用spark中的aggregate算子,对激光点云pointrdd中每个点的最小外接矩形(minimumbounding rectangle,mbr)进行聚合运算,最终确定整个工程激光点云的mbr,记为mbr


[0066]
4)根据mbr

和虚拟格网边长l,确定每个虚拟格网的坐标范围{x
min
,x
max
,y
min
,y
max
},去除无激光点的空格网,得到最终的虚拟格网列表grids;
[0067]
5)利用虚拟格网列表grids构建partitioner并输入给激光点云pointrdd,对激光点云进行分区,得到新分区的激光点云pointrdd,记为pointcloudrdd。
[0068]
参见图2,步骤2的具体实现方式是:
[0069]
利用spark的mappartition算子,输入自定义的索引构建方法,实现对分区激光点云构建四叉树和r树混合索引,具体是:
[0070]
首先,对分区激光点云进行四叉树剖分,具体步骤如下:
[0071]
1)设定四叉树节点允许包含的最大激光点数目t,将整个分区的激光点云数据作为四叉树根节点压入四叉树节点缓冲区队列;
[0072]
2)获取四叉树节点缓冲区队列的首节点,统计该节点的激光点数目,设为m,如果m《t,则将该节点压入r树叶节点缓冲区队列;如果m≥t,进入步骤3);
[0073]
3)按四叉树方式分裂该节点,计算该节点的四个孩子节点对应的mbr,并将该节点内的激光点划分到四个孩子节点中,依次将四个孩子节点从四叉树节点缓冲区队列尾部逐个插入,执行完成后,继续执行步骤2);
[0074]
4)待四叉树节点缓冲队列为空时,表明分区激光点云按四叉树划分完毕。
[0075]
然后,利用r树叶节点缓冲区队列构建r树,如图3所示,具体步骤如下:
[0076]
5)设置r树的阶数和叶节点点云数目的下界值min,新建两个数组a和b;
[0077]
6)对r树叶节点缓冲区队列中的节点按照hilbert码进行一维排序,并按如下规则对其分组:激光点数量大于min的节点整体保存到数组a,激光点数量小于min的节点,将该节点中的激光点逐个保存到数组b。
[0078]
7)对数组a中的节点,批量构建r树索引;
[0079]
8)对数组b中的各个激光点,按自上而下的方式,逐点插入到步骤7)所构建的r树索引中,生成激光点云分区最终的r树索引。
[0080]
利用spark的foreachpartition算子,将激光点云分区中的激光点数据和分区r树索引存储为单个hdfs文件。该文件主要分为两个部分:一是文件头,存放分区r树索引的结构信息,如总点数,树高度、空间范围mbr、中心坐标、索引大小等信息;二是r树各节点信息,各节点按照分区r树索引深度遍历顺序存储,存放的信息主要有:节点所在层号,节点对应的mbr,子节点数目,各子节点地址,对于叶子节点还有对应的所包含的激光点坐标等信息。
[0081]
步骤3)的具体实现方式是:
[0082]
每个激光点云分区局部索引建立完成后,整个工程的激光点云由多个激光点云分区局部索引共同管理。对于长大线路工程,如公路、铁路等,一般情况下虚拟格网数量较多,造成激光点云分区数量较多,而不利用管理。为此,本发明将各激光点云分区的r树索引的根节点作为全局索引的叶子节点,进一步利用leutenegger等提出了一种名为str树算法构建全局r树索引。
[0083]
首先,设置r树节点的子节点数值n,计算整个激光点云的mbr,根据长边在哪个坐标轴方向,确定点云的大致走向,并将各激光点云分区的根节点为叶子节点构建str树全局索引。本实施例中以点云沿x轴走向为例构建str树全局索引的具体步骤如下:
[0084]
1)各激光点云分区的根节点为叶子节点,将同一列的所有激光点云分区组织为一个切片,作为上一层的一个节点;
[0085]
2)在x轴方向上,将步骤1)中生成的新一层的节点,每n个节点合为一组,形成上一层的一个节点,最后剩余的不足n个节点合并为一个节点;
[0086]
3)计算新的一层节点个数nn,如果nn≥n,则重复2)和3),否则退出。
[0087]
对于y轴走向,具体方法同前,此处不再赘述。
[0088]
将建立的全局索引,以单个hdfs文件的方式存储在hadoop集群中的名字节点namenode。文件格式与激光点云分区的r树索引存储文件格式基本类似,所不同的是这里的叶子节点信息为激光点云分区的r树索引存储文件的路径。
[0089]
至此,整个工程的激光点云在分布式存储环境hadoop hdfs中被组织为一个融合格网、四叉树和r树多种索引的多级r树结构。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献