在Oracle 11g中构建点云数据类型

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


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值