Oracle Spatial GeoRaster 金字塔栅格存储

项目中遇到. Oracle Spatial GeoRaster 金字塔栅格存储 ,看了一些文档,下面是读书笔记。

1. Oracle Spatial GeoRaster简介

Oracle Spatial GeoRaster是Oracle Spatial 10g后的新特性。他允许存储、索引、查询、分析和传送栅格数据。GeoRaster使用一个基于组件的、逻辑分层并且多维的通用栅格数据模型。栅格中的核心数据是由栅格单元(或像素)组成的多维矩阵,且这些核心的栅格数据集可以进行分块,用于优化存储、检索和处理。

1.1 Oracle Spatial GeoRaster对象类型

在Oracle Spatial GeoRaster中主要使用两种新的对象类型SDO_GEORATSER和SDO_RATSER来存储栅格数据及其相关源数据。其中SDO_GEORATSER类型主要用于存储栅格数据集,SDO_RATSER对象包含一个BLOB字段,相关描述数据,SDO_Geometry对象,包含一个或者多个SDO_GEORATSER类型列的表称为栅格表(GeoRaster Table);而SDO_RATSER类型主要用于存储栅格对象对应的实际栅格数据,SDO_GEORATSER对象包含一个SDO_Geometry对象、相关元数据、RasterID、栅格数据表名,由SDO_RATSER类型生成的对象表称为栅格数据表(Raster Data Table,RDT)。栅格数据表用于存储一个栅格图像中的所有栅格数据,每条记录存储这个图像中的一个分块及这个分块的相关信息。

1.1.1 SDO_GEORATSER类型

Create TYPE SDO_GEORATSER as OBJECT

(

rasterType number,        //5位整数,表示空间维数、分层和类型信息

spatialExtent SDO_Geometry,      //数据覆盖的空间范围

rasterDataTable varchar2(32),     //栅格数据表名

rasterID number,                          //标识栅格数据表编号

metadata XMlType                //XML格式的元数据

);

1.1.2 SDO_RATSER类型

Create TYPE SDO_RATSER AS OBJECT

(

RasterID number,                   //数据块对应的编号

Pyramidlevel number,           //数据块在金字塔模型中的级别

bandBlockNumber number,   //数据块的层数

rowBlockNumber number,    //数据块的行号

columnBlockNumber number, //数据块的列号

blockMBR SDO_Geometry,    //数据块的最小外接矩形

rasterBlock BLOB                   //块数据

);

1.2 Oracle Spatial GeoRaster存储结构

GeoRatser使用一个系统数据表SDO_GEOR_SYSDATA_TABLE来维护栅格表和相应的栅格数据表及其它相关表格。每当一个新的栅格对象被创建的时候,要会使用SDO_GEOR.init函数给它指定一个栅格数据表并会分配一个RasterID值,所有的SDO_GEORATSER对象在创建时都会自动地记录在系统数据表 SDO_GEOR_SYSDATA_TABLE中。可通过栅格表中的栅格数据表名和RasterID唯一识别一个栅格对象。既可以将多个栅格对象的数据存储在同一个栅格数据表中,也可以分别单独存储。

通过对栅格表查找需要的那幅图像,找到该图的SDO_GEORATSER对象,得到所找图像的栅格数据表名及RasterID,再以此得到存储在栅格数据表中的SDO_RATSER对象,最后得到的SDO_RATSER对象存储了相关分块信息。

2. 金字塔栅格数据构建简介

栅格金字塔就是对原始栅格数据按照某种方法进行重新采样,以得到多种不同分辨率的栅格数据,但它们表示的地理区域是完全一样的。不同分辨率的栅格数据被分别组织在不同的层面内,最底层的是原始数据集上层数据量仅是相邻下层数据量的1/4。这样就可以针对不同数据精度的要求,提供不同分辨率的栅格数据。采用金字塔结构建立的栅格数据便于组织、存储和管理多尺度、多数据源的栅格数据,便于实现跨分辨率的索引与浏览。

3. 实现Oracle Spatial GeoRaster存储栅格金字塔

3.1 创建栅格表

CREATE TABLE georaster_jpgs_table

(

geoid number PRIMARY KEY NOT NULL,

georatser sdo_georaster

);

3.2 创建标准DML触发器

用于确保栅格对象的相关表及试图与栅格数据的协调性和完整性。

CALL SDO_GEOR_UTLCreateDMLTrigger (‘georaster_jpgs_table’,’ georatser’);

3.3 创建栅格数据表

CREATE TABLE ratser_data_table OF SDO_RASTER

(

PRIMARY KEY(RASTERID, PYRAMIDLEVEL, BANDBLOCKNUMBER, ROWBLOCKNUMBER, COLUMNBLOCKNUMBER) 

);

3.4 地理参考系

DECLARE

geoobj sdo_georaster;

BEGIN

SELECT georatser INTO geoobj FROM georaster_jpgs_table

WHERE geoid=1 FOR UPDATE;

SDO_GEOR.georefernece( geoobj ,82394,1,

SDO_NUMBER_ARRAY(-28.5,0,1232804.04), SDO_NUMBER_ARRAY(0,13678.09) );

UPDATE georaster_jpgs_table set georaster= geoobj WHERE geoid=1;

COMMIT;

END;

3.5 构建栅格金字塔

DECLARE

geoobj sdo_georaster

BEGIN

SELECT georatser INTO geoobj FROM georaster_jpgs_table

WHERE geoid=1 FOR UPDATE;

SDO_GEOR.generatePyamid(geoobj , ’ resampling=NN’ );   --采用最邻近赋值法重新采样

UPDATE georaster_jpgs_table SET georatser= geoobj WHERE geoid=1;

COMMIT;

END;

3.6 对金字塔栅格数据入库

INSERT INTO georaster_jpgs_table (name, image) VALUES ('earth', SDO_GEOR.INIT(' ratser_data_table '));

4. 优势

 基于Oracle Spatial GeoRaster 对栅格对象的金字塔式存储的实现,提供了功能强大的数据存储管理机制,且具有非常灵活的数据查询获取机制,对于海量遥感影像信息的存储和管理提供了有力的支持。

posted @ 2017-11-02 15:15  FAB4  阅读(1014)  评论(0编辑  收藏  举报