oracle spation

首先,Oracle支持自定义的数据类型,你可以用数组,结构体或者带有构造函数,功能函数的类来定义自己的对象类型。这样的对象类型可以用于属性列的数据类型,也可以用来创建对象表。而OracleSpatial也正是基于此种特性所开发的一套空间数据处理系统。
  Spatial的自定义数据类型有很多,都在MDSYS方案下,经常使用的是SDO_GEOMETRY类型。SDO_GEOMETRY表示一个几何对象,可以是点、线、面、多点、多线、多面或混合对象。
  Spatial 在此数据类型的基础上,实现了R树空间索引和四叉树空间索引,还以sql函数的形式实现了多种空间分析功能。

  Oracle Spatial 使用:
  1、将SDO_GEOMETRY数据类型作为数据表的一个列。

  CREATE TABLE cola_markets (
  mkt_id NUMBER PRIMARY KEY,
  name VARCHAR2(32),
  shape MDSYS.SDO_GEOMETRY);

  2、填写空间元数据。

  INSERT INTO USER_SDO_GEOM_METADATA
  VALUES (
  'cola_markets',
  'shape',
  MDSYS.SDO_DIM_ARRAY( -- 20X20 grid
  MDSYS.SDO_DIM_ELEMENT('X', 0, 20, 0.005),
  MDSYS.SDO_DIM_ELEMENT('Y', 0, 20, 0.005)
  ),
  NULL -- SRID
  );

  3、创建空间索引。

  CREATE INDEX cola_spatial_idx
  ON cola_markets(shape)
  INDEXTYPE IS MDSYS.SPATIAL_INDEX;

  至此,空间数据表的创建才算正式完成 。

  4、插入空间数据。空间数据的插入要

  INSERT INTO cola_markets VALUES(
  2,
  'cola_b',
  MDSYS.SDO_GEOMETRY(
  2003, -- 2-dimensional polygon
  NULL,
  NULL,
  MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,1), -- one polygon (exteriorpolygon ring)
  MDSYS.SDO_ORDINATE_ARRAY(5,1, 8,1, 8,6, 5,7, 5,1)
  )
  );

  5、空间分析查询示例。

  -- Return the topological difference of two geometries.
  SELECT SDO_GEOM.SDO_DIFFERENCE(c_a.shape, m.diminfo, c_c.shape,m.diminfo)
  FROM cola_markets c_a, cola_markets c_c, user_sdo_geom_metadatam
  WHERE m.table_name = 'COLA_MARKETS' AND m.column_name ='SHAPE'
  AND c_a.name = 'cola_a' AND c_c.name = 'cola_c';
  

   应用中查询SDO_GEOMETRY的内容

   1、查询的sql语句

    selectn.* from 油井  obj,table(obj.GEOMETRY.SDO_ORDINATES)n where obj.id='16'

   2、向SDO_GEOMETRY字段中插入数值

    INSERTINTO cy11_注水井(id,bh,名称,geometry) VALUES( " + i +",generate_key(10),'" + dr["井号"].ToString().Trim() + "',MDSYS.SDO_GEOMETRY(3001, NULL,NULL, NULL, MDSYS.SDO_ORDINATE_ARRAY(" + dr["NewX"] + ", " + dr["NewY"] +")))

你可能感兴趣的:(数据结构,oracle,C++,c,C#)