在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)這個用來輸入的表可以是文本文件,被關聯成一個外部表使用


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章