Oracle Spatial 简介
首先Oracle 支持自定义的数据类型你可以用数组结构体或者带有构造函数功能函数的类来定义自己的对象类型这样的对象类型可以用于属性列的数据类型也可以用来创建对象表而Oracle Spatial也正是基于此种特性所开发的一套空间数据处理系统
Spatial 的自定义数据类型有很多都在MDSYS方案下经常使用的是SDO_GEOMETRY类型SDO_GEOMETRY表示一个几何对象可以是点线面多点多线多面或混合对象
Spatial 在此数据类型的基础上实现了R树空间索引和四叉树空间索引还以sql函数的形式实现了多种空间分析功能
Oracle Spatial 使用
将SDO_GEOMETRY数据类型作为数据表的一个列
CREATE TABLE cola_markets (
mkt_id NUMBER PRIMARY KEY
name VARCHAR()
shape MDSYSSDO_GEOMETRY);
填写空间元数据
INSERT INTO USER_SDO_GEOM_METADATA
VALUES (
cola_markets
shape
MDSYSSDO_DIM_ARRAY( X grid
MDSYSSDO_DIM_ELEMENT(X )
MDSYSSDO_DIM_ELEMENT(Y )
)
NULL SRID
);
创建空间索引
CREATE INDEX cola_spatial_idx
ON cola_markets(shape)
INDEXTYPE IS MDSYSSPATIAL_INDEX;
至此空间数据表的创建才算正式完成
插入空间数据空间数据的插入要
INSERT INTO cola_markets VALUES(
cola_b
MDSYSSDO_GEOMETRY(
dimensional polygon
NULL
NULL
MDSYSSDO_ELEM_INFO_ARRAY() one polygon (exterior polygon ring)
MDSYSSDO_ORDINATE_ARRAY( )
)
);
空间分析查询示例
Return the topological difference of two geometries
SELECT SDO_GEOMSDO_DIFFERENCE(c_ashape mdiminfo c_cshape mdiminfo)
FROM cola_markets c_a cola_markets c_c user_sdo_geom_metadata m
WHERE mtable_name = COLA_MARKETS AND lumn_name = SHAPE
AND c_aname = cola_a AND c_cname = cola_c;