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

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

转载自:https://blog.csdn.net/qq_26991807/article/details/80233309

You may also like...