SDO_ELEM_INFO也是一个变长NUMBER数组,其作用是告诉几何引擎如何去解析存放在SDO_ORDINATES中的坐标序列,正确地构造几何对象。SDO_ELEM_INFO中每三个元素构成一个三元组,其具体含义如下。
(1)SDO_STARTING_OFFSET:表示几何元素的第一个坐标点的开始位置。数组下标从1开始,也就是说,第一个几何元素的第一个坐标的第一维分量应该是SDO_ORDINATES(1)。如果有第二个几何元素,则它的第一个坐标应该是SDO_ORDINATES(n)。
(2)SDO_ETYPE:表示几何元素的类型,具体见表3-3。SDO_ETYPE的值1、2、1003和2003表示的是简单元素。在SDO_ELEM_INFO数组中,它们被定义成单个的三元体。对于SDO_ETYPE的值1003和2003,第一个数字表示外部(1)或内部(2)。1003表示多边形外环,必须是逆时针方向。2003表示多边形内环,必须是顺时针方向。SDO_ETYPE的值4、1005、2005、1006和2006表示的是复合元素。它们包含至少一个头三元组和一个三元组序列。对于4位数字的SDO_ETYPE值,第一位数字的含义是外部(1)或内部(2)。1005表示外多边形环(必须是逆时针方向)。2005表示内多边形环,必须是顺时针方向。1006表示外表面,由一个或多个多边形环构成。2006表示体元素的内表面。1007表示体元素。一个复合元素的所有元素都是相互连接的。复合元素中的一个子元素的最后一个点是下一个子元素的开始点,这个点是不重复的。
(3)SDO_INTERPRETATION:如果SDO_ETYPE是复合元素(4,1005,2005,1006,2006),则它表示有多少个子元素构成这个复合元素;如果不是复合元素,它表明应该怎样解析组成该元素的坐标序列。例如,一个线串或多边形,它们的边界是如何由一系列的点连接的,是采用线段连接还是采用圆弧段连接。具体值及说明参见表3-3。
如果一个几何对象包含一个或多个元素,元素的最后一个坐标总是比下一个元素的开始偏移小1。最后一个元素的坐标是从它的开始坐标数组偏移到SDO_ORDINATES的最后。对于复合元素(SDO_ETYPE的值为4、1005、2005、1006和2006),可以用n个三元组来描述。一定要记住的是,复合元素的子元素都是相互连接的。子元素的最后一个点是下一个子元素的第一个点。一个变长数组的长度在PL/SQL中用VARRAY_VARIABLE.COUNT获取,在OCI中用函数OCICOllSize获取。具体语义关系见表3-3。(www.xing528.com)
表3-3 SDO_ETYPE和SDO_INTERPRETATION的语义
续表3-3
除上面的规则外,在具体使用过程中,SDO_GTYPE和SDO_ETYPE之间也有一些需要注意的关系:①对于SDO_GTYPE为D001或D005,任何SDO_ETYPE不为1的子元素将被忽略;②对于SDO_GTYPE为D002或D006,任何SDO_ETYPE不为2或4的子元素将被忽略;③对于SDO_GTYPE为D003或D007,任何SDO_ETYPE不为3或5的子元素将被忽略。
如果不确定几何对象是否有效,可用SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT函数检测几何对象是否有效。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。