• [转]SDE 中空间坐标的的物理存储


    坐标顺序
    一个SDE特征的几何属性,使用一个或者更多的坐标。坐标包括,最小包括一对x,y。一个特征
    可能还有与x,y相关的z或m值.x,y,z和m值都以整数来存储。二进制流的顺序为x/y,x/y,...,x/y,
    z,z,z,z...z,m,m,....m(z值和m值是可选的)。z,m值和x,y值直间都是一对一的关系。对于每一个
    z,m值都有一个x,y对与之对应。

    Multipart特征类型对象的表达
    一个SDE特征的几何属性可能有一个或多个几何部分,每个部分使用一个坐标值分隔符。分隔符有
    一个预定义的值。分隔符是第二个几何部分的开始,多个部分的几何属性坐标列表在二进制流中
    以如下形式存储: x/y,x/y,...,x/y,<separator>,x/y,x/y,...,x/y,z,z,...,z,<separator>,z,
    z,...,z,m,m,...,m,<separator>,m,m,...,m(z值和m值是可选的)

    Point压缩
    在二进制流中,每个x/y,z,和m值都压缩到一个顺序无关的字节流。


    在SDE内部,所有的空间坐标都是从0到2147483647.这种格式提供了更好的准确性和完整性,
    和相对于浮点数处理更优的性能表现.开发者应该知道内部整数的表示,因为有可能试图在
    图层中存储一个过大的值.如果是那样的话,SDE将返回SE_COORD_OUT_OF_BOUNDS错误.开发者
    不需要直接使用整数。

    因为真实世界坐标既不是正也不是负值,SDE数据需要一个偏移距离(假原点)以确保
    浮点数坐标转换到整数后是正的并有一个最小的比例系数

    Part separators(Part 分隔符)
    x 值为-1 ,y值为0,z和m值没有定义。分隔符在压缩时不需要任何逻辑

    Point compression(点压缩)
    压缩或解压缩存储在二进制流中的点分两个步骤:转换到相对偏移方案并压缩为字节数组。解压缩与之相反,
    先从字节数组中解压缩,然后把值转为绝对坐标。每个过程都描述如下:
    Relatie-offset value calculation(相对偏移值的计算)
    转化坐标值为相对偏移的目的是使其在存储是占用尽可能少的字节。在一个存储相对偏移值的数组中,
    第一个值是点的绝对坐标(使用32位整数)后面的值都是相对前一个的偏移值.

    或者差值.因此,给定N个绝对坐标值,其绝对坐标计算如下:
    relative_value[0]=absolute_value[0]
    relative_value[1]=absolute_value[1]-absolute_value[0]
    ...
    relative_value[N-2]=absolute_value[N-2]-absolute_value[N-3]
    relative_value[N-1]=absolute_value[N-1]-absolute_value[N-2]

    给定N个相对坐标值,其绝对坐标计算如下:
    absolute_value[0] = relative_value[0]
    absolute_value[1] = relative_value[0] + relative_value[1]
    ...
    absolute_value[N-2] = relative_value[N-3] + relative_value[N-2]
    absolute_value[N-1] = relative_value[N-2] + relative_value[N-1]
    这种方法通常非常有效,因为一个特征的点往往都是紧密相临的

    压缩整数值
    相对偏移值一般比绝对坐标值要用更少的字节来表达,相对偏移值被压缩为一个字节序列。每个
    字节的高位作为控制位来表示结束标志,指示是否还有后续字节。例如:如果一个整数被压缩为
    三个字节,第一和第二个字节的高位被置位(指示还有一个后续的字节),第三个字节高位没有
    被置位(表示这个是整数的最后一个字节)。第一个字节的第二个位是符号标志。所以一个字节
    有一个控制位,一个符号位,和六个数据位。所有的后续字节都包括一个控制位和七个数据位。
    因为只有很少的数据位来表达一个整数,最多五个字节才能表达一个整数值,(这是最坏的情形,
    仅仅发生在整数值大于134,217,727)

    压缩字节的整数存储的形式
    =======================================================
    字节数目              位                         值
    0                     0                          控制位(0 =最后一位,1=整数值延续到下个字节)
    0                     1                          符号位(0 =正整数,1=负整数)
    0                     2~7                       整数的其余六个位
    1-4                  0                          控制位(0 =最后一位,1=整数值延续到下个字节)
    1-4                  2~7                       整数的其余七个位
    整数值根据数据位的存储情况使用六个或七个位(在被压缩的值和0x3F或0x7F分别使用二进制OR操作)来存储到
    压缩的字节内。原始的值被向右移位(也就是将值划分为不同的部分)使用六个或七个位。如果新的,移位后的值
    不为零,那么在压缩字节内的控制位就被置位,并重复这个步骤,直到移位后的值为0。解压缩与此相似,是此过
    程的逆过程。

    二进制形式

    除了压缩的坐标值之外,一些额外的信息也被存储,用来提供坐标值存储的信息。
    字节流的前八个字节被保留,用来存放额外信息。
    当前,有两部分额外信息:压缩点字节流的大小和维度。这两个值都以压缩的整数方式来存储
    坐标字节流长度定义为总的长度减去保留的八个字节(也就是压缩点字节流的大小)。这个值
    存储在一开始的前五个字节。

    坐标系统的维度表示z值m值是否包含在字节流中,维度是一个字节位向量存储在字节流的第六个字节里
    第一个低位表示是否有z值存在。第二个低位指示是否有measure值存在。

    SDE中几何属性的二进制形式的形式表示
    =======================================================
    字节数据               使用
    0-4                  坐标值流长度,压缩整数格式(字节流长度减去8个保留字节)
    5                     坐标维度掩码,压缩整数格式
    6-7                  保留,当前没使用
    8+                    压缩的坐标值,压缩的相对偏移值格式

    //------------这是一篇官方文档的翻译稿,自己懒得去翻译了,直接转载了别人的。

  • 相关阅读:
    (转)Computer Vision Open Source Algorithm Implementations
    关于项目依赖项
    fatal error CVT1100: duplicate resource. type:MANIFEST, name:1, language:0×0409
    转:error LNK2005
    C++ string类常用函数
    [转载]同步synchronized方法和代码块
    Java语言基础常用对象API(二)泛型、Map集合
    Java语言基础IO流(输入输出流) 字符流
    Java语言基础常用对象API(二)集合框架
    Java语言基础IO流(输入输出流) 字节流、转换流
  • 原文地址:https://www.cnblogs.com/feedback/p/1412980.html
Copyright © 2020-2023  润新知