欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

基于Oracle Spatial的存储方式学习总结

程序员文章站 2022-03-08 23:05:34
在arcgis中通过sde存储空间数据到oracle中有多种存储方式,分别有:二进制long raw、esri的st_geometry以及基于oracle spatial的sdo_geometry等...

在arcgis中通过sde存储空间数据到oracle中有多种存储方式,分别有:二进制long raw、esri的st_geometry以及基于oracle spatial的sdo_geometry等等。

关于这几种方式的各自的优缺点不是主要的探讨的方向,这些我们可以通过arcgis中的arcgis server help得到相关的帮助。这里主要是学习关于基于oracle spatial的存储方式,通过这种存储方式几何列shape的字段类型为mdsys.sde_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,标识该类型为对象类型。开始我们可以想想它为arcobjects中的geometry对象(本来要素的shape字段中的对象就是geometry),而不要理解他是怎么样组织的。至于该类型中的sdo_point_type、sdo_elem_info_array、sdo_ordinate_array也是oracle spatial自定义的类型和sdo_geometry是一样的。

为了理解方便本人专门画了一个vision图进行总结便于记忆,对sdo_geometry主要的五个参数的意义进行了解,会发现其实很简单。通过动手进行相关的地理要素的crud会对他的印象更加深刻,因此可以从sql语句组成出发,再结合本图表。

基于Oracle Spatial的存储方式学习总结

网上有很多例子,就不再赘述,列举两个sql语句:

1.插入矩形

insert into beniy388 values(

1,//其他的属性字段的值

'updoogis', //其他的属性字段的值

mdsys.sdo_geometry(//几何字段sdo_geometry的值

2003,--二维多边形

null,

null,

mdsys.sdo_elem_info_array(1,1003,3), --一个矩形(1003为逆时针方向)

mdsys.sdo_ordinate_array(1,1, 5,7) --只需要两点

)

);

2.用sql命令插入一个有岛的多边形:

insert into beniy388 values

10, //其他的属性字段的值

'updoogis', //其他的属性字段的值

mdsys.sdo_geometry(//几何字段sdo_geometry的值

2003,

null,

null,

mdsys.sdo_elem_info_array(1,1003,1, 19,2003,1), --有岛多边形

mdsys.sdo_ordinate_array(2,4, 4,3, 10,3, 13,5, 13,9, 11,13, 5,13, 2,11, 2,4,7,5, 7,10, 10,10, 10,5, 7,5)

)

);

3.例子:用sql命令插入一个复杂多义线:

insert into beniy388 values(

11, //其他的属性字段的值

'updoogis', //其他的属性字段的值

mdsys.sdo_geometry(//几何字段sdo_geometry的值

2002,

null,

null,

mdsys.sdo_elem_info_array(1,4,2, 1,2,1, 3,2,2), --复杂多义线

mdsys.sdo_ordinate_array(10,10, 10,14, 6,10, 14,10)

)

);

4.查询geometry并将其转化为wkt格式:select id,sdo_util.from_wktgeometry(geometrycolume)form tablename ;

当然还有很多其他的函数可以使用。

参考链接:oracle sdo_geometry 详细介绍

oracle spacial(空间)sdo_util包的函数