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

在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语句组成出发,再结合本图表。

网上有很多例子,就不再赘述,列举两个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包的函数

(0)
上一篇 2022年3月22日
下一篇 2022年3月22日

相关推荐