oracle spatial 数据导入_Oracle Spatial建表学习步骤详解

本文详细介绍了Oracle Spatial的建表步骤,包括创建表、定义空间字段、创建空间索引、插入空间数据,并提供了查询空间数据的示例,帮助理解如何操作Oracle Spatial进行数据管理。

Oracle Spatial建表学习的步骤是本文我们主要要介绍的内容,步骤如下:

Step1. 创建一张表,其中shape用来存放空间数据

CREATE TABLE mylake (

feature_id NUMBER PRIMARY KEY,

name VARCHAR2(32),

shape MDSYS.SDO_GEOMETRY);

Step2. 在user_sdo_geom_metadata 表中插入新记录,用于描述空间字段

INSERT INTO user_sdo_geom_metadata VALUES (

'mylake',    //---表名

'shape',    //---字段名

MDSYS.SDO_DIM_ARRAY(

MDSYS.SDO_DIM_ELEMENT('X', 0, 100, 0.05),    //---X维最小,***值和容忍度。

MDSYS.SDO_DIM_ELEMENT('Y', 0, 100, 0.05)    //---Y维最小,***值和容忍度 NULL    //---坐标系,缺省为笛卡尔坐标系

);

Step3. 创建空间索引

CREATE INDEX mylake_idx ON mylake(shape)

INDEXTYPE IS MDSYS.SPATIAL_INDEX

Step4. 插入空间数据

Oracle Spatial用MDSYS.SDO_GEOMETRY来存储空间数据,定义为:

CREATE TYPE sdo_geometry AS OBJECT (

SDO_GTYPE NUMBER,

SDO_SRID NUMBER,

SDO_POINT SDO_POINT_TYPE,

SDO_ELEM_INFO MDSYS.SDO_ELEM_INFO_ARRAY,

SDO_ORDINATES MDSYS.SDO_ORDINATE_ARRAY);

SDO_SRID:坐标系,NULL为笛卡尔坐标系。 SDO_POINT:Oracle Spatial也可定义单个的点,SDO_POINT的定义: CREATE TYPE sdo_point_type AS OBJECT (X NUMBER,Y NUMBER,Z NUMBER); 如果是二维,Z为NULL。 SDO_ELEM_INFO:每三个值描述一个元素。 ***个值:***个顶点在SDO_ORDINATES_ARR开始位置 。第二个值:元素类型 。第三个值:顶点连接方式:1-通过直线连接,2-通过圆弧连接:定义为CREATE TYPE sdo_elem_info_array AS VARRAY (1048576) of NUMBER; SDO_ORDINATES:几何图形所有顶点列表。定义为    为CREATE TYPE sdo_ordinate_array AS VARRAY (1048576) of NUMBER;

// 插入包含一个岛屿的湖泊

INSERT INTO mylake VALUES(

10,

'Lake Calhoun',

MDSYS.SDO_GEOMETRY(

2003,

NULL,

NULL,

MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,1, 19,2003,1),

MDSYS.SDO_ORDINATE_ARRAY(0,0, 10,0, 10,10, 0,10, 0,0, 4,4, 6,4, 6,6, 4,6, 4,4)

));

// 插入两艘小船

INSERT INTO mylake VALUES(

11,

'The Windswept',

MDSYS.SDO_GEOMETRY(

2003,

NULL,

NULL,

MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,1),

MDSYS.SDO_ORDINATE_ARRAY(2,2, 3,2, 3,2, 2,3, 2,2) ); INSERT INTO mylake VALUES(

12,

'Blue Crest',

MDSYS.SDO_GEOMETRY(

2003,

NULL,

NULL,

MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,1),

MDSYS.SDO_ORDINATE_ARRAY(7,7, 8,7, 8,7, 7,8, 7,7) );

Step4. 查询Oracle Spatial查询数据包括二个处理过程:1.只通过索引查询候选项。通过函数SDO_FILTER实现:SDO_FILTER(geometry1 MDSYS.SDO_GEOMETRY, geometry2 MDSYS.SDO_GEOMETRY, params VARCHAR2) geometry1: 必须是被索引的几何数据 geometry2:不一定是表中的空间字段,也不要求被索引 params:Filter类型         querytype=WINDOW:geometry2不要求来自表 querytype=JOIN:geometry2必须来自表。

SELECT name boat_name

FROM mylake t

WHEREfeature_id=12

AND SDO_FILTER(t.shape, mdsys.sdo_geometry(2003,NULL,NULL,

mdsys.sdo_elem_info_array(1,1003,1),

mdsys.sdo_ordinate_array(2,2, 5,2, 5,5, 2,5, 2,2)),'querytype=WINDOW') = 'TRUE';

// 选择在定义矩形内的所有小船

SELECT name boat_name

FROM mylake t

WHEREfeature_id=12

AND SDO_FILTER(t.shape, mdsys.sdo_geometry(2003,NULL,NULL,

mdsys.sdo_elem_info_array(1,1003,1),

mdsys.sdo_ordinate_array(2,2, 5,2, 5,5, 2,5, 2,2)),

'querytype=WINDOW') = 'TRUE'

AND SDO_RELATE(t.shape, mdsys.sdo_geometry(2003,NULL,NULL,

mdsys.sdo_elem_info_array(1,1003,1),

mdsys.sdo_ordinate_array(2,2, 5,2, 5,5, 2,5, 2,2)),

'masktype=INSIDEquerytype=WINDOW') = 'TRUE'

// masktype可联合使用

SELECT feature_id id

FROM mylake t

WHEREfeature_id=12

AND SDO_FILTER(t.shape, mdsys.sdo_geometry(2003,NULL,NULL,

mdsys.sdo_elem_info_array(1,1003,1),

mdsys.sdo_ordinate_array(2,2, 5,2, 5,5, 2,5, 2,2)),

'querytype=WINDOW') = 'TRUE'

AND SDO_RELATE(t.shape, mdsys.sdo_geometry(2003,NULL,NULL,

mdsys.sdo_elem_info_array(1,1003,1),

mdsys.sdo_ordinate_array(2,2, 5,2, 5,5, 2,5, 2,2)),

'masktype=INSIDE+TOUCHquerytype=WINDOW') = 'TRUE'

关于Oracle Spatial建表学习的相关知识就介绍到这里了,希望本次的介绍能够对您有所收获!

【编辑推荐】

【责任编辑:赵鹏 TEL:(010)68476606】

点赞 0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值