• Arcgis创建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

  • 相关阅读:
    实验四(作业一:字符串加密)
    实验三“类和对象”动手动脑
    实验三“类和对象”课后作业(追踪已经创建了几个对象)
    递归实验动手动脑题目
    ("X+Y="+X+Y)与(X+Y+"=X+Y")
    Linq To Xml
    代码优先-Code First
    restFul接口设计规范
    四: 使用vue搭建网站前端页面
    三: vue组件开发及自动化工具vue-cli
  • 原文地址:https://www.cnblogs.com/gotoschool/p/4367756.html
Copyright © 2020-2023  润新知