zoukankan      html  css  js  c++  java
  • Arcgis创建SDE_Geometry、SDO_Geometry的区别

    先初略的了解下SDE_Geometry和SDO_Geometry的区别:

    1. SDO_GEOMETRY

            Oracle Spatial在MDSYS模式下定义了一系列几何类型、函数来支持空间数据的存储和使用,最为人耳熟能详的就是SDO_GEOMETRY这种类型——当然,ArcSDE也可以使用这种类型进行存储。Oracle Spatial并没有像ArcGIS那样有一套从桌面到数据库到服务器到开发包的全方位GIS产品体系,因此向Oracle中加载数据相比用ArcGIS要麻烦得多,同时也没有那么多的数据源格式的支持。Oracle本身则提供了一个工具shp2sdo[1],可以帮助你导入Shapefile到Oracle Spatial中。

            Oracle Spatial虽然使用了SDO_GEOMETRY类型作为几何对象的存储,不过它也提供了另外的一种类型ST_GEOMETRY,同时在此基础上还提供了一些符合OGCSimple Features Access规范的操作。

    2.SDE_GEOMETRY

    CREATE OR REPLACE

    TYPE ST_GEOMETRY AS OBJECT (

    GEOM SDO_GEOMETRY,

    MEMBER FUNCTION GET_SDO_GEOM RETURN SDO_GEOMETRY DETERMINISTIC,

    可见,Oracle Spatial的ST_GEOMETRY事实上还是通过对SDO_GEOMETRY的包装实现的。因此,我们可以通过最简单的构造函数来构造一个ST_GEOMETRY对象:

    ST_GEOMETRY(geom SDO_GEOMETRY);

    或者,也可以使用具体的ST_GEOMETRY类型来构造,比如用ST_POINT来构造一个点,你会发现内部Oracle Spatial还是根据参数生成了一个SDO_GEOMETRY对象存放了起来:

    SQL> select st_point(1,1) from dual;

    ST_POINT(1,1)(GEOM(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES))

    ------------------------------------------------------------------------------------------------------------------------

    ST_POINT(SDO_GEOMETRY(2001, NULL, SDO_POINT_TYPE(1, 1, NULL), NULL, NULL))

    因此,表面上看Oracle Spatial中与OGC规范相关的主要就包括三部分(见图 2):两张记录几何字段和空间参考的系统表、一些ST打头的对象类型和一些OGC打头的空间操作函数。但是,由于ST_GEOMETRY使用的是SDO_GEOMETRY进行存储,因此这些SDO相关的内容也会被使用到。

    3、ArcGIS支持的

           从ArcSDE的Post Installation就可以看到,ArcSDE支持多种数据存储方式,不但支持ESRI自身的ST_GEOMETRY,也支持BLOB和SDO_GEOMETRY类型。

          

    ArcSDE中的ST_GEOMETRY和Oracle Spatial中基于SDO_GEOMETRY的ST_GEOMETRY完全是不相干的两个东西。首先让我们来看一下ArcSDE中ST_GEOMETRY类型的定义:

    CREATE OR REPLACE

    Type st_geometry Authid current_user AS object

    (entity integer,numpts integer,minx float(64),

    miny float(64),maxx float(64),maxy float(64),

    minz float (64),maxz float(64),minm float(64),

    maxm float(64),area float(64),len float(64),

    srid integer,points blob,

    constructor Function st_geometry(geom_str clob,srid number) Return self AS result deterministic,

    member Function st_area Return number,

    member Function st_len Return number,

    member Function st_length Return number,

    member Function st_entity Return number,

    member Function st_numpts Return number,

    member Function st_minx Return number,

    member Function st_maxx Return number,

    member Function st_miny Return number,

    member Function st_maxy Return number,

    member Function st_minm Return number,

    member Function st_maxm Return number,

    member Function st_minz Return number,

    member Function st_maxz Return number,

    member Function st_srid Return number,

    static Function get_release Return number) NOT final;

    可见,一个ST_GEOMETRY中包含了一个几何对象的x、y、z、m坐标的范围、空间参考id、实体个数和点个数、几何对象的面积和长度、具体的节点坐标等信息。其中,节点坐标属性points比较特殊,这是一个blob类型的值。

    让我们打开ST_GEOMETRY类型的构造函数就可以发现,事实上对几何对象的构造是通过ST_GEOMETRY_SHAPELIB_PKG这个包进行处理的,而这个包事实上会调用ESRI的ST_SHAPELIB这个外部动态链接库,我们可以看一下ST_GEOMETRY_SHAPELIB_PKG包里的geometryfromtext这个存储过程,这个过程在ST_GEOMETRY的构造函数中被调用了。

    4、Arcgis10.1的.net创建FeatureClass

          调用IFeatureWorkspace 类成员CreateFeatureClass,创建的Geometry类型可在Config.Keyword中指定。

          

         在创建FeatureClass过程中,若不指定Config.Keyword,默认使用Oracle Spatial中的DEFAULTS类型ST_Geometry(到Oracle Spatial中查看默认导入的Feature Class表数据,Shape显示SDE.ST_GEOMETRY)。在使用CreateFeatureClass时,不建议Config.Keyword使用默认值。

        说明:从ArcGIS 9.3开始,新的ArcSDE eodatabases for Oracle 会默认使用ST_Geometry 方式来存储空间数据。它实现了SQL3规范中的用户自定义类型(user-defined data types),允许用户使用ST_Geometry类型创建列来存储诸如界址点,街道,地块等空间数据。

         备注:此文章中的Oracle Spatial的SDO_Geometry、ST_Geometry的相关内容,从ArcSDE vs. Oracle Spatial。

  • 相关阅读:
    Maven关于web.xml中Servlet和Servlet映射的问题
    intellij idea的Maven项目运行报程序包找不到的错误
    修改Maven项目默认JDK版本
    刷题15. 3Sum
    刷题11. Container With Most Water
    刷题10. Regular Expression Matching
    刷题5. Longest Palindromic Substring
    刷题4. Median of Two Sorted Arrays
    刷题3. Longest Substring Without Repeating Characters
    刷题2. Add Two Numbers
  • 原文地址:https://www.cnblogs.com/telwanggs/p/5252779.html
Copyright © 2011-2022 走看看