转载自:http://blog.csdn.net/creativemobile/article/details/9161635
1.Storage mode of SDO_PC Type
Oracle空间引入了一个名为SDO_PC的新的数据类型,用来管理从激光雷达(LIDAR)扫描所产生的大量数据。从激光雷达扫描所生产的数据通常称为点云数据,SDO_PC类型被设计用来有效地管理这样的点云数据。在Oracle中,用户可以将这些点云数据存储在一个的点云对象中。这些点云数据被划分至固定大小的分块中,并作为单独的分块表的行进行存储,实现存储的可伸缩性。图1展示了存储点云数据类型的原理。
如图1,只有元数据,例如:分块块容量、总数量、维度(至少三位x,y,z和通常更多,如:颜色等)。分块表信息存储在SDO_PC列中。它们的数据点被划分为若干个子集(使用空间划分技术),每个子集都被存储在点列关联的分块表中。注意,blk_extent列存储每个子集的范围,并被建立空间索引。该列允许高效的两阶过滤查询处理。Max_res、Min_res列标识存储的点云数据的多分辨率范围。这种多分辨率点云数据在一些需要访问基于它们邻近值(近处分辨率更高,远处细节更少)的应用程序中是非常有用的。点云的这种划分或分块存储确保了可伸缩性。
2Queries on SDO_PC Objects
Oracle提供了在SDO_PC类型上提供了一个PL/SQL裁剪查询。该查询捕捉一个空间窗口(指定一个SDO_GEOMETRY)以及获取这个空间窗口中存在任何空间关系的所有点。除了空间窗口,查询也捕捉一个多分辨率范围以确定那些分块在该多分辨率范围之内。这种类型的查询通常称为基于多分辨率可见查询,我们将其称为裁剪操作。出于讨论范围的限制,我们只关注空间窗口之内的查询,而忽略空间窗口以为任何分辨率的查询。在图1中,一个点云存储在一个关联的分块表的多行中,每一行都包含一个blk_extend类型的列,其中SDO_GEOMETRY标识该行点的范围。该列使用Oracle R-tree索引实现隐式索引。图2展示了使用这样的索引方式,处理一个SDO_PC的裁剪查询操作。
2.1First-State
使用MDSYS.SDO_PC_BLK_TABLE中blk_extent类型的列所实现的空间索引(如:R-tree),来捕获一个点云中所有相关的分块。以作为第二阶段检索操作的数据仓库。
2.2Second-State
查询第一阶段捕获的各个分块,获取相关的点。通常在一个分块中,这些点的数量是成千上万的。这些点使用anyinteract函数进行比较。那些相交点被作为裁剪程序结果的一部分返回,裁剪程序是基于一个管道表的函数实现的。它返回一个与重复执行第一阶段操作所捕获的那个分块一致的结果分块行。
Oracle使用分块表中blk_extent类型的列,该列由R-tree索引隐式实现,能迅速地捕获在一个空间查询窗口中相关的那些分块。然后在Geometry引擎(第二阶段裁剪)中,对query-geometry和点云中的点使用“anyinteract”查询可以捕获与空间查询窗口明确相关的那些点。