mysql sdo geometry_SDO_Geometry结构详细说明

完全转自:http://blog.sina.com.cn/s/blog_9d0a434f0102wnt4.html

前言

在ArcGIS中通过SDE存储空间数据到Oracle中有多种存储方式,分别有:二进制Long Raw 、ESRI的ST_Geometry以及基于Oracle Spatial的SDO_Geometry等等。 这里主要是学习关于基于Oracle Spatial的存储方式,通过这种存储方式几何列Shape的字段类型为mdsys.sdo_geometry类型。

1  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);

其中sdo_geometry AS OBJECT ,标识该类型为对象类型。至于该类型中的SDO_POINT_TYPE、SDO_ELEM_INFO_ARRAY、 SDO_ORDINATE_ARRAY也是Oracle Spatial自定义的类型和 sdo_geometry 是一样的。

现在对sdo_geometry 类型中的各个参数简单的介绍:

1) SDO_GTYPE :表示要存储的几何类型,如点线面。它是通过 NUMBER类型来表达的;

2) SDO_SRID :几何的空间参考坐标系,类型也为 NUMBER;

3) SDO_POINT :如果几何类型点类型的话,就是存储点坐标,否则为空。oracle自定义的SDO_POINT_TYPE类型;

4) SDO_ELEM_INFO :定义要如何理解SDO_ORDINATES中的坐标串的;

5)SDO_ORDINATES :存储实际坐标的,以X、Y以及不同点之间都是逗号隔开;

1.1 类型解释

1.1.1 SDO_GTYPE  --标识几何体类型

SDO_GTYPE值是有四位数字组成的,有4位数字构成 dltt

Ø  d:表示几何的维数。如二维、三维对应的d=2和d=3;

Ø  l:标识三维线状参考系统(Linear referencing system,LRS)几何体的LRS度量维,即哪一维含度量值(measure value),可能的取值为3、4,对于非LRS几何体或者以ORACLE     SPATIAL默认的最后一维为LRS度量维,则l取值为0;

Ø  tt:定义了地理对象的类型。现在使用从00到07,如tt=01代表为单点;

如下表1:

几何体类型

描述

dl00

UNKNOW_GEOMETRY

Oracle Spatial忽略该几何体数据

dl01

POINT

该几何体为一个点

dl02

LINE or CURVE

该几何体为一线串(线串中的段可以为直线段也可以为弧线断

dl03

POLYGON

该几何体为一多边形,该多边形可有洞也可没有

dl04

COLLECTION

是元素的集合,其中的元素只要是非COLLECTION类型的即可

dl05

MULTIPOINT

含一个或多个点的几何体

dl06

MULTILINE or MULTICURVE

含一个或多个线串的几何体

dl07

MULTIPOLYGON

多个DISJOINT的多边形

下面就是t=2的二维几何类型,SDO_GTYPE参数值具体,如下表2:

SDO_GTYPE

几何类型

相关描述

2000

未知的地理类型

Spatial会无视这个类型的地理对象

2001

单点Point类型

地理对象包含一个普通的点

2002

单线Polyline和Curve类型

地理对象包含直线或片段segments

2003

Polygon类型

地理对象包含一个普通的多边形,但不包含空岛

2004

集合COLLECTION类型

地理对象包含不同类型元素集合

2005

多点MultiPoint类型

地理对象包含对个点的集合

2006

多线MultiPolyline和多曲线类型

地理对象有一条或更多的曲线集合

2007

多多边形MultiPolygon类型

一个地理对象包含岛(多岛)的多边形和N个多边形

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

1.1.2 SDO_SRID    --标识坐标系统

SDO_SRID定义了空间坐标参考系统。如果SDO_SRID为null,则没有指定坐标系统,如果SDO_SRID不为null,则该值必须来自于MDSYS.CS_SRS的SRID列,并且这样的值必须插入到USER_SDO_GEOM_METADATA视图的SRID列中,一图层中,各几何体的SRID值必须相同。MDSYS.CS_SRS 表参考

如下表3:

列名

类型

列名描述

CS_NAME

VARCHAR2(68)

坐标系统名称

SRID

NUMBER(38)

空间参考ID,为唯一值。1-999999为Spatial使用的空间参考,1000000以后为用户自定义

AUTH_SRID

NUMBER(38)

可选的SRID,是个外键。另一个坐标系统的SRID

AUTH_NAME

VARCHAR2(256)

WKTEXT

VARCHAR2(2046)

CS_BOUNDS

MDSYS.SDO_GEOMETRY

1.1.3 SDO_POINT    --仅用于点几何体

SDO_POINT类型的构造方法为:sdo_point_type(x,y,z),其中x,y,z类型为Double和Int都可以;

SDO_POINT字段定义为含有X、Y、Z属性的SDO_POINT_TYPE类型。如果几何类型为点类型的话,SDO_ELEM_INFO 和SDO_ORDINATES对应的值都为Null,SDO_POINT 不为空。其它情况下,SDO_POINT会被Spatial所忽略即设为 Null。如果这个层只有点对象,那么推荐你将其保存在SDO_POINT属性中。SDO_POINT_TYPE类型的定义如下:

CREATE TYPE sdo_point_type AS OBJECT (

X    NUMBER,   //X坐标值

Y    NUMBER,   //Y坐标值

Z    NUMBER);  //Z坐标值

1.1.4 SDO_ELEM_INFO   --坐标解释方式

SDO_ELEM_INFO类型的构造方法为:sdo_elem_info_array(a,b,c),其中a,b,c为Number类型,其用途是该属性给出了SDO_ORDINATES中坐标的解释方式。SDO_ELEM_INFO数组中,每三个数值为一组,用于解释一个元素(ELEMENT),组中的数值的意义为:

SDO_STARTING_OFFSET:第一个数值,存放该元素的首坐标在SDO_ORDIANTES中的位置(从1开始);

SDO_ETYPE:第二个数值,标识元素的类型;

SDO_INTERPRETATION:和以上两个数据一起解释元素;

SDO_ELEM_INFO是理解和掌握SDO_Geometry的重点和难点,SDO_ELEM_INFO 定义了如何理解SDO_ORDINATES中的坐标字符串属性。

SDO_ELEM_INFO每三个数字组合为一个SDO_ELEM_INFO属性单元(具体可以结合下面的例子理解);

每个SDO_ELEM_INFO属性单元由:SDO_STARTING_OFFSET、SDO_ETYPE 和SDO_INTERPRETATION组成。下面介绍一下这三个数字的具体含义:

(1) SDO_STARTING_OFFSET:声明了组成当前几何片段的第一个坐标在SDO_ORDINATES数组中的坐标序号。坐标序号是从1开 始起算的而非从0开始。这里的SDO_ORDINATES就是sdo_geometry 中的坐标序列,坐标序列是已逗号隔开的数字,具体的计算如:sdo_ordinate_array(1,4,6,7,8,9)中如果以'6'开始几何片段 的话,坐标序号SDO_STARTING_OFFSET=3。(具体参考下面的例子理解)

(2) SDO_ETYPE :声明元素的类型。可结合 SDO_STARTING_OFFSET和SDO_ETYPE 表来理解.

SDO_ETYPE 值 = 1, 2, 1003,或2003,说明几何为简单的几何类型。可以全部按SDO_ELEM_INFO 属性单元【即三个以逗号隔开的数】来理解sdo_ordinate_array中的坐标序列。

特别说明:SDO_ETYPE 值 = 1003 ,假如几何类型为面,则表示为外多边形环(以逆时针顺序)

SDO_ETYPE 值 = 2003 ,假如几何类型为面,则表示为内多边形环(以顺时针顺序)

SDO_ETYPE 值 = 4,1005或2005,说明几何为组合元素,往往第一个三数字组不是SDO_ELEM_INFO 属性单元,而是为了说明组合元素的信息。具体可以参见下面 复杂多义线 和 复杂多边形 的例子。

(3) SDO_INTERPRETATION:有两种可能的意思,依赖地SDO_ETYPE是否是组合元素。如果SDO_ETYPE值 = 4,1005或2005,标识的是有多少组合部分,具体参考 复杂多义线 和 复杂多边形 的例子。如果SDO_ETYPE 值 = 1, 2, 1003,或2003,标识决定了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值