oracle 空间数据库说明

这篇博客介绍了Oracle Spatial如何存储和管理空间数据,包括SDO_GEOMETRY对象类型、SDO_GTYPE、SDO_SRID、SDO_POINT、SDO_ELEM_INFO和SDO_ORDINATES等关键概念。通过示例展示了创建表、插入数据、创建空间索引的过程,并详细解释了SDO_GEOMETRY对象的使用方法。
摘要由CSDN通过智能技术生成

由于最近弄一些空间数据,所以找了些oracle空间数据库的一些知识.下面是汇总:

Oracle Spatial由一坨的对象数据类型,类型方法,操作子,函数与过程组合而成。一个地理对象作为一个SDO_GEOMETRY对象保存在表的一个字段里。空间索引则由普通的DDL和DML语句来建立与维护。
创建表:
CREATE TABLE cola_markets (
mkt_id NUMBER PRIMARY KEY,
name VARCHAR2(32),
shape SDO_GEOMETRY);

插入数据:
INSERT INTO cola_markets VALUES(
1,
'cola_a',
SDO_GEOMETRY(
2003, -- two-dimensional polygon
NULL,
NULL,
SDO_ELEM_INFO_ARRAY(1,1003,3), -- one rectangle (1003 = exterior)
SDO_ORDINATE_ARRAY(1,1, 5,7) -- only 2 points needed to
-- define rectangle (lower left and upper right) with
-- Cartesian-coordinate data
)
);
INSERT INTO cola_markets VALUES(
2,
'cola_b',
SDO_GEOMETRY(
2003, -- two-dimensional polygon
NULL,
NULL,
SDO_ELEM_INFO_ARRAY(1,1003,1), -- one polygon (exterior polygon ring)
SDO_ORDINATE_ARRAY(5,1, 8,1, 8,6, 5,7, 5,1)
)
);

INSERT INTO cola_markets VALUES(
3,
'cola_c',
SDO_GEOMETRY(
2003, -- two-dimensional polygon
NULL,
NULL,
SDO_ELEM_INFO_ARRAY(1,1003,1), -- one polygon (exterior polygon ring)
SDO_ORDINATE_ARRAY(3,3, 6,3, 6,5, 4,5, 3,3)
)
);

INSERT INTO cola_markets VALUES(
4,
'cola_d',
SDO_GEOMETRY(
2003, -- two-dimensional polygon
NULL,
NULL,
SDO_ELEM_INFO_ARRAY(1,1003,4), -- one circle
SDO_ORDINATE_ARRAY(8,7, 10,9, 8,11)
)
);

更新视图:USER_SDO_GEOM_METADATA
INSERT INTO user_sdo_geom_metadata
(TABLE_NAME,
COLUMN_NAME,
DIMINFO,
SRID)
VALUES (
'cola_markets',
'shape',
SDO_DIM_ARRAY( -- 20X20 grid
SDO_DIM_ELEMENT('X', 0, 20, 0.005),
SDO_DIM_ELEMENT('Y', 0, 20, 0.005)
),
NULL -- SRID
);

创建空间索引:
CREATE INDEX cola_spatial_idx
ON cola_markets(shape)
INDEXTYPE IS MDSYS.SPATIAL_INDEX;
-- Preceding statement created an R-tree index.

 

这样在mapguide下就可以preview空间数据信息.

下面来说一下其中最关键的一些object:

 

( SDO_GEOMETRY对象类型
在Spatial中,地理对象的描述是放在一个单独的类型为SDO_GEOMETRY的字段中的。任何有这个字段的表,都至少要定义一个其它主键字段。

Oracle Spatial定义的SDO_GEOMETRY类型为:
CREATE TYPE sdo_geometry AS OBJECT (
 SDO_GTYPE NUMBER,
 SDO_SRID NUMBER,
 SDO_POINT SDO_POINT_TYPE,
 SDO_ELEM_INFO SDO_ELEM_INFO_ARRAY,
 SDO_ORDINATES SDO_ORDINATE_ARRAY);

当然Spatial也定义了SDO_POINT_TYPE, SDO_ELEM_INFO_ARRAY, 和
SDO_ORDINATE_ARRAY类型:
CREATE TYPE sdo_point_type AS OBJECT (
   X NUMBER,
   Y NUMBER,
   Z NUMBER);
CREATE TYPE sdo_elem_info_array AS VARRAY (1048576) of NUMBER;
CREATE TYPE sdo_ordinate_array AS VARRAY (1048576) of NUMBER;

因为SDO_ORDINATE_ARRAY最大为1048576,所以SDO_GEOMETRY对象的顶点数量就依赖于它的维度,二维为524288,三维为349525,四维只有262144个顶点了。

注意:

对于一个给定的层(同一字段),所有的地理对象必须都是相同的维度,不能将二维与三维的数据放在一个层里。

如果你使用四位的SDO_ETYPE那么,你也要使用四位的SDO_GTYPE。

)

SDO_GEOMETRY Object Type
2.1 SDO_GTYPE  dltt
    d:维数
    l:linear referencing system (LRS)
    tt:Geometry type
    00 UNKNOWN_GEOMETRY
    01 POINT
    02 LINE or CURVE
    03 POLYGON
    04 COLLECTION
    05 MULTIPOINT
    06 MULTILINE or MULTICURVE
    07 MULTIPOLYGON
2.2 SDO_SRID
    确认coordinate system,此值为SDO_COORD_REF_SYS表中的SRID值。此值也被插入到USER_SDO_GEOM_METADATA视图中。
2.3 SDO_POINT
    (1)SDO_ELEM_INFO and SDO_ORDINATES are both null
    (2)SDO_POINT attribute is non-null
    结论:存储坐标
2.4 SDO_ELEM_INFO
    用来解释存储在SDO_ORDINATES属性中的坐标信息。
    SDO_STARTING_OFFSET:SDO_ORDINATES中的offset min为1
    SDO_ETYPE: 1, 2, 1003, and 2003 simple elements; 3 polygon ring; 4, 1005, and 2005 compound elements
    SDO_INTERPRETATION
2.5 SDO_ORDINATES
    长数组,存放空间对象的坐标
2.6 Usage Considerations
    SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT 用来检查几何对象的一致性。

1.1 SDO_GEOMETRY字段详解
Oracle Spatial的空间数据都存储在空间字段sdo_Geometry中,理解sdo_Geometry是编写Oracle Spatial程序的关键。sdo_Geometry是按照Open GIS规范定义的一个对象,其原始的创建方式如下所示:

CREATE TYPE sdo_geometry AS OBJECT (
SDO_GTYPE NUMBER,
SDO_SRID NUMBER,
SDO_POINT SDO_POINT_TYPE,
SDO_ELEM_INFO SDO_ELEM_INFO_ARRAY,
SDO_ORDINATES SDO_ORDINATE_ARRAY);
该对象由五个部分组成,各部分的意义如下表所示:

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值