传送门 ? 轮子的专栏 ? ? 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)这个用来输入的表可以是文本文件,被关联成一个外部表使用