zoukankan      html  css  js  c++  java
  • sde.layers表的eflags字段解析

        ArcSDE地理数据库,虽然经常在用,但仅限于了解功能层面的东西,其内部实现机制对我来说是个黑盒子。因为想了解register with geodatabase操作在数据库层面到底发生了什么,我分析了一下注册操作时会涉及到的几个表。这其中有一张表叫layers,在官方的帮助文档里,对layers是这样描述的: 

        该表的大多数字段含义,根据帮助文档里的描述,都很好理解。但有一个字段eflags,帮助文档里并没有描述清楚,如下图:

        这说得非常模糊,只说了存储哪些图层属性,但这些图层属性是如何通过NUMBER体现出来的?帮助文档里没有更详细的说明。如果想搞清楚,我需要找其它途径。

        ArcSDE地理数据库除了有一个方案(一系列的表),还有一些存储过程和包体,那这些存储过程中会不会有相关的信息呢?我以eflags作为关键字进行查询,查询结果如下:

        根据查询结果可知,在GDB_UTIL、LAYER_UTIL、SPX_UTIL等包体中都有对eflags字段的或引用、或查询、或赋值。如上图所示,我们至少知道了,将NUMBER转成2进制后,从右往左数第2位表示要素类型为POINT,第3位表示LINESTRING。

    但是,遗憾的是,它并未将图2中所列的所有图层属性都解译出来,而只是解译了部分属性。我们可以知道了部分比特位所代表的含义,但尚不能知道所有比特位的含义。

        我们还需要查询更多的资料。我偶然间查到了名为《ORACLE SPATIAL空间数据在ARCSDE中的图层注册(李家,曹威)》的一篇论文,上面提到了eflags的含义在sdetype.h中有定义。下载ArcSde SDK For C并查看sdetype.h,发现如下内容:

        该头文件仅介绍了SHAPE TYPE和STORAGE TYPE所对应的比物位,但对于图2中提到的其它图层属性,仍然没有介绍。

        ArcSDE地理数据库中的表一般来说,都有管理工具。因为不可能要求所有人通过SQL接口来查询或修改相关配置。那么,Layers表的管理工具有什么呢?我首先想到的就是sdelayer。Sdelayer是ArcSDE提供的,用于对图层进行查询、注册、增加geometry字段等操作的管理工具,它可以查询哪些属性呢?它又可以修改哪些属性呢?通过比较修改属性前后的eflags字段值,是不是就可以推算出不同比特位所代表的具体含义呢?

        使用sdelayer命令,需要有SDE服务,所以第一步先创建SDE service 。

        下面,"存储单精度坐标还是双精度坐标"和"存储注记"属性为例,演示使用sdelayer 推算其所代表的比特位的方法

         一 、推算"存储单精度坐标还是双精度坐标"所代表的比特位

    1. 创建两个结构完全一样的表TEST2和TEST3
    2. 使用sdelayer -o add 操作,分别以-P BASIC和-P HIGH作为参数,新增geometry字段。如下图所示:


       


    3. 比较TEST2与TEST3的eflags(二进制)

          可知,从右往左数,第8位代表图层属性"存储单精度坐标还是双精度坐标"。

            二 、推算"存储注记"所代表的比特位

    1. 创建两个结构完全一样的表TEST4和TEST5

    2. 使用sdelayer -o add 操作,分别以-e p和-e pA(-e的详细说明见文章末尾)作为参数,新增geometry字段。如下图所示

    3. 比较TEST2与TEST3的eflags(二进制)

          可知,从右往左数,第22位代表图层属性"存储注记"。

    总结:

    根据上述多种资料及多种分析方法,sde.layers.eflags字段值,转成二进制之后,从右往左数,分别代表的含义如下给所示:

    顺序位

    该位所代表的含义

    1

    允许存储空类型(几何类型),即shape字段不赋值

    2

    POINT

    3

    LINESTRING

    4

    SIMPLELINESTRING

    5

    POLYGON

    8

    坐标是单精度还是双精度(SDO_GEOMETRY无法设置单精度)

    16

    地理图形类型(MICROSOFT GEOGRAPHY)

    17

    3D

    18

    LAYER AUTO LOCKING

    19

    MULTI

    20

    存储度量值

    21

    使用只加载 I/O 模式还是正常 I/O 模式

    22

    存储注记数据

    23

    存储 CAD 数据

    24

    拓扑类型

    25

    DBMS 数据类型为SDEBinary

    26

    DBMS 数据类型为WKB

    27

    DBMS 数据类型为ST_Geometry

    28

    DBMS 数据类型为SDO_Geometry

    29

    DBMS 数据类型为SDELOB

    31

    不具有空间索引

        由上表可知,仍然有一些图层属性,尚不知道其所对应的比特位,例如"是另一个图层的视图"。然而,大多数的属性,其所占用的比特位,目前是弄清楚了。

        附加说明:

        Sdelayer 命令的-e参数,其详细含义如下:

    -e

    Entity types allowed (npslaAc3+M).

    n

    Nil

    p

    Point features

    s

    Line (spaghetti) features

    l

    Simple line (line string) features

    a

    Area features

    A

    Annotation

    c

    CAD data

    3

    Three-dimensional features can be added to the entity type mask only with the `-o add' operation

    +

    Multipart features

     

    例如:

     

    a+(面)

    p+(点)

    l+(线)

    M

    Measures on coordinates. The [-m] option is required to store measure values on each coordinate. Measures can be added to the entity type mask only with the "-o add" operation.

  • 相关阅读:
    ExtJS+DWR+Spring+Hibernate开发HRMS(5)
    ExtJS实战(9)疑难杂症分析
    ExtJS实战(8)CRUD+分页+复杂查询+排序
    ExtJS实战(7)登陆
    ExtJS+DWR+Spring+Hibernate开发HRMS(1)
    ExtJS+DWR+Spring+Hibernate开发HRMS(3)
    ExtJS实战(10)项目总结
    ExtJS+DWR+Spring+Hibernate开发HRMS(2)
    Hibernate QBC高级查询
    ExtJS+DWR+Spring+Hibernate开发HRMS(4)
  • 原文地址:https://www.cnblogs.com/6yuhang/p/9419304.html
Copyright © 2011-2022 走看看