在Oracle 11g中构建点云数据类型
传送门 ? *的专栏 ? ? http://blog.csdn.net/leverage_1229 1发展历程 2处理流程 3存储模型 将逻辑结构从物理结构中分离出来 (1)逻辑结构: 这些表含有一个类型为SDO_PC的列 包含一般的属性和所占用空间的单位数量 并且包含一个指向点云块表的指针 (2
传送门 ? *的专栏 ? ? http://blog.csdn.net/leverage_1229
1发展历程
2处理流程
3存储模型
将逻辑结构从物理结构中分离出来(1)逻辑结构:
这些表含有一个类型为SDO_PC的列
包含一般的属性和所占用空间的单位数量
并且包含一个指向点云块表的指针
(2)物理结构:
“分块表”
包含点云块
可以是非常庞大的
在SDO_PC_BLK对象类型中定义结构
4创建点云表
点云表的数量没有限制支持由任何类型的字段组合
场景可以被任何属性所检索
并且场景具有空间幅度
CREATE TABLE LIDAR_SCENES (
SCENE_ID NUMBER PRIMARY KEY,
COLLECTION_TS TIMESTAMP,
DESCRIPTION CLOB,
... (any number of attributes) ...
POINT_CLOUD SDO_PC
);
5SDO_PC类型
PC_EXTENT是点云所占空间的单位数量需要一个空间索引以支持空间检索
属性 |
说明 |
BASE_TABLE |
包含一个SDO_PC类型的列的表名称 |
BASE_TABLE_COL |
SDO_PC类型的列的名称 |
PC_ID |
点云ID |
BLK_ID |
包含点云中各块信息的表名称 |
PTN_PARAMS |
点云分区的参数 |
PC_EXTENT |
SDO_GEOMETRY对象展示点云的空间幅度(最小边界对象封闭点云中所有对象) |
PC_TOL |
点云中点的容差值 |
PC_TOT_DIMENSIONS |
点云中维度的总数。包括空间维度和其他非空间维度,最大值为9 |
PC_DOMAIN |
(目前未使用) |
PC_VAL_ATTR_TABLES |
SDO_STRING_ARRAY对象为点云指定任何值属性表的名称 |
PC_OTHER_ATTRS |
XMLTYPE对象指定点云的任何其他属性 |
6创建点云分块表
使用SDO_PC_BLK类型在块ID上定义一个主键
使用SECUREFILE lobs(11g的新结构)
允许LOBs压缩(加密和删除重复)
CREATE TABLE PC_BLK_01 OF SDO_PC_BLK (
PRIMARY KEY (
OBJ_ID, BLK_ID
)
)
LOB(POINTS) STORE AS SECUREFILE
(COMPRESS HIGH NOCACHE NOLOGGING);
7SDO_PC_BLK类型
描述点的一块包含块的唯一标识
场景ID(OBJ_ID与PC_ID一致)和分块ID(BLK_ID)
属性 |
说明 |
OBJ_ID |
点云对象ID |
BLK_ID |
块ID |
BLK_EXTENT |
块的空间幅度 |
BLK_DOMAIN |
(目前未使用) |
PCBLK_MIN_RES |
在一个查询中可见块的最小分辨率 |
PCBLK_MAX_RES |
在一个查询中可见块的最大分辨率 |
NUM_POINTS |
POINTS BLOB中点的总数 |
NUM_UNSORTED_POINTS |
POINTS BLOB中无序点的数量 |
PT_SORT_DIM |
有序点的维度 |
POINTS |
BLOB包含的点 |
8BLOB结构
BLOB包含一个存放点的数组各点编码
d 64位浮点数(d = 点的维度)
一个32位整型表示点数
一个32位整型表示分区数
将来:压缩格式
从块MBR的来源处存储坐标以作为偏移量
使用短整型
9初始化一个点云
(1)定义点云的结构和组织分辨率、维度、幅度
块的容量
(2)为各点云指定块的位置
点块表的名称
表的唯一标识
INSERT INTO LIDAR_SCENES (
SCENE_ID, POINT_CLOUD)
VALUES (
1,
SDO_PC_PKG.INIT (
BASETABLE => 'LIDAR_SCENES',
BASECOL => 'POINT_CLOUD',
BLKTABLE => 'PC_BLK_01',
PTN_PARAMS => 'BLK_CAPACITY=1000',
PC_TOL => 0.005,
PC_TOT_DIMENSIONS => 3,
PC_EXTENT =>
SDO_GEOMETRY (2003, 4326, NULL,
SDO_ELEM_INFO_ARRAY (1, 1003, 3),
SDO_ORDINATE_ARRAY (-74, 40, -73, 41)
)
)
);
10加载一个点云
(1)从一个普通表中加载一个点云DECLARE
PC SDO_PC;
BEGIN
SELECT POINT_CLOUD INTO PC
FROM LIDAR_SCENES WHERE SCENE_ID = 1;
SDO_PC_PKG.CREATE_PC (PC, 'INPUT_POINTS');
END;
(2)用来输入的表的结构
(3)这个用来输入的表可以是文本文件,被关联成一个外部表使用