Heim  >  Artikel  >  Datenbank  >  在Oracle 11g中构建点云数据类型

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

WBOY
WBOYOriginal
2016-06-07 15:24:201279Durchsuche

传送门 ? 轮子的专栏 ? ? http://blog.csdn.net/leverage_1229 1发展历程 2处理流程 3存储模型 将逻辑结构从物理结构中分离出来 (1)逻辑结构: 这些表含有一个类型为SDO_PC的列 包含一般的属性和所占用空间的单位数量 并且包含一个指向点云块表的指针 (2

传送门 ? 轮子的专栏 ?  ? http://blog.csdn.net/leverage_1229

1发展历程

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

2处理流程

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

3存储模型

将逻辑结构从物理结构中分离出来
(1)逻辑结构:
这些表含有一个类型为SDO_PC的列
包含一般的属性和所占用空间的单位数量
并且包含一个指向点云块表的指针
(2)物理结构:
“分块表”
包含点云块
可以是非常庞大的
在SDO_PC_BLK对象类型中定义结构

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

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是点云所占空间的单位数量
需要一个空间索引以支持空间检索
在Oracle 11g中构建点云数据类型

属性

说明

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)

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

属性

说明

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)用来输入的表的结构

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

(3)这个用来输入的表可以是文本文件,被关联成一个外部表使用

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

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:无法加载oracle in oradb10gNächster Artikel:常见的数据库连接池