在oracle中创建带有坐标字段的表

在oracle中创建带有坐标字段的表。
1,通过Create语句,创建一个表,其中坐标字段类型为MDSYS.SDO_GEOMETRY;例如:
CREATE TABLE cola_markets (
   mkt_id NUMBER PRIMARY KEY,
   name VARCHAR2(32),
   shape MDSYS.SDO_GEOMETRY);
2,在空间元数据表(USER_SDO_GEOM_METADATA )中添加一条记录,例如:
INSERT INTO USER_SDO_GEOM_METADATA
   VALUES (
   'cola_markets',                            //具有空间数据类型的标的名字
   'shape', //保存空间数据字段的名字
   MDSYS.SDO_DIM_ARRAY( //定义这个坐标字段的维数名称(X,Y 2维),最小最大值,以及坐标的容忍度(精确度).
   MDSYS.SDO_DIM_ELEMENT('X', 0, 20, 0.005), //二维中的第一维名称是X,最小值是0,最大值是20,容忍度是0.005。
   MDSYS.SDO_DIM_ELEMENT('Y', 0, 20, 0.005) //二维中的第二维名称是Y,最小值是0,最大值是20,容忍度是0.005。
   ),
   NULL //坐标体系对应的srid值
  );
3,创建空间索引,例如:
CREATE INDEX cola_spatial_idx
  ON cola_markets(shape)
  INDEXTYPE IS MDSYS.SPATIAL_INDEX;

以上三步完成后,这个具有空间数据类型的表,才算创建完毕!下面就需要往这个表中插入数据,insert语句如下:
INSERT INTO cola_markets VALUES(
   2,
   'cola_b',
   MDSYS.SDO_GEOMETRY(
   2003, //图形类型
   NULL,//srid值
   NULL,//点坐标,如果类型是点,则这个参数有效,如果后面2个参数不为null,此参数无效
   MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,1),
   MDSYS.SDO_ORDINATE_ARRAY(5,1, 8,1, 8,6, 5,7, 5,1)
   )
  );
解释:上面出现的1003,2003标示图形类型。
第一位代表了维数,可以是二维、三维、四维;
第二位标识Linear Referencing System (LRS),非LRS的类型,此值为0;
第三、四位代表形状,从00到09共有10种类型。00 – 忽略此形状;01 – 点;02 – 线;03 – 多边形或面;04 – 类型的集合;05 – 01类型的集合,既多点集;06 – 02类型的集合;07 – 03类型的集合;08 – 体(三维空间中有多个面封闭起来的空间);09 – 08类型的集合;
SDO_ELEM_INFO代表几何形状包含的元素的信息,最基本的元素是点。比如,一个立方体包含多个面元素。元素还可以包含自己的子元素。
  一个元素的信息是一个数组,数组中有三个数。如(1, 1003, 1, 4, 2003, 1)包含两个元素,第一个元素是(1, 1003, 1),第二个元素是(4, 2003, 1)。每一个数组的含义如下:
第一个数代表了元素在SDO_ORDINATES中起始偏移位。如SDO_ORDINATES是(5, 4, 2, 12, 8, 15, 3, 7),元素的起始偏移位是5,那么(8, 15)是元素的第一个点。如果元素是连续的,那么元素最后点的偏移位就是下一元素的起始偏移位,如(8, 15)是元素的终点,同时也是下一元素的起点。
   第二个数代表了元素的类型,最多有四位。如果元素是复合类型,那么在它之后跟着是它的子元素。
   第三个数指名如何解释元素。对复合元素来说,表明它子元素的个数。对单元素来说,通常元素类型的进一步解释,比如(1, 1003, 3)代表矩形,(1, 1003, 4)代表圆形……
SDO_ORDINATES
  此属性是一个数组,包含了几何形状所有的坐标点。比如二维系统中,SDO_ORDINATES(5, 4, 2, 12, 8, 15, 3, 7)包含了四个点,分别是(5, 4); (2, 12); (8, 15); (3, 7)。


说明,本文是一个同事收集的文章中的一段,但是我从网络上找了一下,似乎他是从多个文章中合并而来,本文只好厚着脸皮说是原创

你可能感兴趣的:(oracle)