gis
gis
管理员
管理员
  • 注册日期2003-07-16
  • 发帖数15945
  • QQ554730525
  • 铜币25337枚
  • 威望15352点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • 帝国沙发管家
  • GIS帝国明星
  • GIS帝国铁杆
阅读:2681回复:1

Oracle Spatial 简介

楼主#
更多 发布于:2008-05-20 20:48
 首先,Oracle 支持自定义的数据类型,你可以用数组,结构体或者带有构造函数,功能函数的类来定义自己的对象类型。这样的对象类型可以用于属性列的数据类型,也可以用来创建对象表。而Oracle Spatial也正是基于此种特性所开发的一套空间数据处理系统。<BR>  Spatial 的自定义数据类型有很多,都在MDSYS方案下,经常使用的是SDO_GEOMETRY类型。SDO_GEOMETRY表示一个几何对象,可以是点、线、面、多点、多线、多面或混合对象。<BR>  Spatial 在此数据类型的基础上,实现了R树空间索引和四叉树空间索引,还以sql函数的形式实现了多种空间分析功能。
<P>  Oracle Spatial 使用:<BR>  1、将SDO_GEOMETRY数据类型作为数据表的一个列。</P>
<P>  CREATE TABLE cola_markets (<BR>  mkt_id NUMBER PRIMARY KEY,<BR>  name VARCHAR2(32),<BR>  shape MDSYS.SDO_GEOMETRY);</P>
<P>  2、填写空间元数据。</P>
<P>  INSERT INTO USER_SDO_GEOM_METADATA <BR>  VALUES (<BR>  'cola_markets',<BR>  'shape',<BR>  MDSYS.SDO_DIM_ARRAY( -- 20X20 grid<BR>  MDSYS.SDO_DIM_ELEMENT('X', 0, 20, 0.005),<BR>  MDSYS.SDO_DIM_ELEMENT('Y', 0, 20, 0.005)<BR>  ),<BR>  NULL -- SRID<BR>  );</P>
<P>  3、创建空间索引。</P>
<P>  CREATE INDEX cola_spatial_idx<BR>  ON cola_markets(shape)<BR>  INDEXTYPE IS MDSYS.SPATIAL_INDEX;</P>
<P>  至此,空间数据表的创建才算正式完成 。</P>
<P>  4、插入空间数据。空间数据的插入要</P>
<P>  INSERT INTO cola_markets VALUES(<BR>  2,<BR>  'cola_b',<BR>  MDSYS.SDO_GEOMETRY(<BR>  2003, -- 2-dimensional polygon<BR>  NULL,<BR>  NULL,<BR>  MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,1), -- one polygon (exterior polygon ring)<BR>  MDSYS.SDO_ORDINATE_ARRAY(5,1, 8,1, 8,6, 5,7, 5,1)<BR>  )<BR>  );</P>
<P>  5、空间分析查询示例。</P>
<P>  -- Return the topological difference of two geometries.<BR>  SELECT SDO_GEOM.SDO_DIFFERENCE(c_a.shape, m.diminfo, c_c.shape, m.diminfo) <BR>  FROM cola_markets c_a, cola_markets c_c, user_sdo_geom_metadata m <BR>  WHERE m.table_name = 'COLA_MARKETS' AND m.column_name = 'SHAPE' <BR>  AND c_a.name = 'cola_a' AND c_c.name = 'cola_c'; <BR></P>
喜欢0 评分0
biganer2008
路人甲
路人甲
  • 注册日期2009-04-29
  • 发帖数7
  • QQ
  • 铜币120枚
  • 威望0点
  • 贡献值0点
  • 银元0个
1楼#
发布于:2009-05-01 21:15
很感谢您的介绍
举报 回复(0) 喜欢(0)     评分
游客

返回顶部