Oracle Spacial(空间数据库)SDO_GEOMETRY介绍
create type SDO_GEOMETRY as object (
SDO_GTYPE number,
SDO_SRID number,
SDO_POINT SDO_POINT_TYPE,
SDO_ELEM_INFOMDSYS.SDO_ELEM_INFO_ARRAY,
SDO_ORDINATES MDSYS.SDO_ORDINATE_ARRAY
);
create type SDO_POINT_TYPE as object (
X number, y number, z number);
create type SDO_ELEM_INFO_ARRAY
asvarray(1048576) of number;
create type SDO_ORDINATE_ARRAY
asvarray(1048576) of number;
SDO_GTYPE
指明了geometry的类型,对应OGIS几何对象模型中的类型
是一个4位数字,格式为dltt,其中:
d代表geometry的维数:2,3,4
l代表线性参照系LRS测量维度,非LRS为0
tt指明了geometry的类型,00-07,08-99保留
geometry的几个方法可以返回类型值
GET_DIMS, GET_LRS_DIM, GET_GTYPE
值 |
geometry类型 |
说明 |
dl00 |
UNKNOWN_GEOMETRY |
Spatial忽略本类型 |
dl01 |
POINT |
点 |
dl02 |
LINE or CURVE |
折线或者带圆弧折线 |
dl03 |
POLYGON |
多边形 |
dl04 |
COLLECTION |
异质geometry集合 |
dl05 |
MULTIPOINT |
点集 |
dl06 |
MULTILINE or MULTICURVE |
线集 |
dl07 |
MULTIPOLYGON |
多边形集 |
SDO_SRID
SDO_SRID用来确定geometry所对应的空间参照系
null代表不对应任何参照系
非空值必须参照MDSYS.CS_SRS表的SRID字段,同时需要存入USER_SDO_GEOM_METADATA表的SRID字段
在同一个字段里的所有geometry对象都必须具有相同的SRISDO_POINT
为了性能优化而设置的
如果SDO_ELEM_INFO和SDO_ORDINATES成员都为空的话,SDO_POINT就是一个POINT对象的坐标值,否则SDO_POINT被忽略
如果图层中仅有POINT对象的话,强烈建议将坐标值存放在SDO_POINT中SDO_ELEM_INFO
变长的数值数组,说明SDO_ORDINATES成员中数值的意义
每三个数值为一个单元,分别是:
SDO_STARTING_OFFSET:元素坐标值从SDO_ORDINATES数组第几个数开始,>=1
SDO_ETYPE:说明元素的类型,1/2/1003/2003表明是一个简单元素;4/1005/2005表明是一个复合元素
SDO_INTERPRETATION:当ETYPE=1003/2003,指明解释SDO_ORDINATES的方式;当ETYPE=1005/2005,指明后面的几个单元构成复合元素
SDO_ORDINATES
SDO_ORDINATES是一个可变长度的数组,用于存储几何对象的真实坐标,该数组的类型为NUMBER型,它的最大长度为1048576。SDO_ORDINATES必须与SDO_ELEM_INFO数组配合使用,才具有实际意义;
SDO_ORDINATES的坐标存储方式由几何对象的维数决定,
如果几何对象为三维,则SDO_ORDINATES的坐标以{X1,Y1,Z1,X2,Y2,Z2,…..}的顺序排列,
如果几何对象为二维,则SDO_ORDINATES的坐标以{X1,Y1,X2,Y2,…..}顺序排列。
有效性约束
GTYPE=d001/d005(点),则ETYPE=1
GTYPE=d002/d006(线),则ETYPE=2/4
GTYPE=d003/d007(面),则ETYPE=3/5/1003/2003/1005/2005