码迷,mamicode.com
首页 > 数据库 > 详细

oracle 创建SDO_Geometry表

时间:2018-02-11 14:27:28      阅读:241      评论:0      收藏:0      [点我收藏+]

标签:circle   http   nbsp   mod   数据   null   bsp   sys   number   

Oracle Spatial由一坨的对象数据类型,类型方法,操作子,函数与过程组合而成。一个地理对象作为一个SDO_GEOMETRY对象保存在表的一个字段里。空间索引则由普通的DDL和DML语句来建立与维护。
 本章主要说了一些例子演示如何建立,查询,索引空间数据。

简单的插入,索引与查询空间数据例子
 本节演示一个很简单建立空间表,插入,建立索引,查询数据的过程。
 场景是一个软饮料公司,用地理信息来表示他们的产品(可乐)在各个地区的情况。这些情况可以是:市场份额,竞争压力,增长潜力等等。而地区可以是邻近的市,州,省或国家。
 我们要作的是:
 1.建立一个表(COLA_MARKETS)来保存空间数据
 2.插入四个(cola_a, cola_b, cola_c, cola_d)地区的数据
 3.升级USER_SDO_GEOM_METADATA视图来反正这些地区的维度信息
 4.建立空间索引(COLA_SPATIAL_IDX)
 5.进行一些空间查询

 

 

[sql] view plain copy
 
  1. CREATE TABLE cola_markets (  
  2.   mkt_id NUMBER PRIMARY KEY,  
  3.   name VARCHAR2(32),  
  4.   shape SDO_GEOMETRY);  

 

[sql] view plain copy
 
  1. INSERT INTO cola_markets VALUES(  
  2.   1,  
  3.   ‘cola_a‘,  
  4.   SDO_GEOMETRY(  
  5.     2003,  -- two-dimensional polygon  
  6.     NULL,  
  7.     NULL,  
  8.     SDO_ELEM_INFO_ARRAY(1,1003,3), -- one rectangle (1003 = exterior)  
  9.     SDO_ORDINATE_ARRAY(1,1, 5,7) -- only 2 points needed to  
  10.           -- define rectangle (lower left and upper right) with  
  11.           -- Cartesian-coordinate data  
  12.   )  
  13. );  
  14. -- The next two INSERT statements create areas of interest for   
  15. -- Cola B and Cola C. These areas are simple polygons (but not  
  16. -- rectangles).  
  17. INSERT INTO cola_markets VALUES(  
  18.   2,  
  19.   ‘cola_b‘,  
  20.   SDO_GEOMETRY(  
  21.     2003,  -- two-dimensional polygon  
  22.     NULL,  
  23.     NULL,  
  24.     SDO_ELEM_INFO_ARRAY(1,1003,1), -- one polygon (exterior polygon ring)  
  25.     SDO_ORDINATE_ARRAY(5,1, 8,1, 8,6, 5,7, 5,1)  
  26.   )  
  27. );  
  28. INSERT INTO cola_markets VALUES(  
  29.   3,  
  30.   ‘cola_c‘,  
  31.   SDO_GEOMETRY(  
  32.     2003,  -- two-dimensional polygon  
  33.     NULL,  
  34.     NULL,  
  35.     SDO_ELEM_INFO_ARRAY(1,1003,1), -- one polygon (exterior polygon ring)  
  36.     SDO_ORDINATE_ARRAY(3,3, 6,3, 6,5, 4,5, 3,3)  
  37.   )  
  38. );  
  39. -- Now insert an area of interest for Cola D. This is a  
  40. -- circle with a radius of 2. It is completely outside the  
  41. -- first three areas of interest.  
  42. INSERT INTO cola_markets VALUES(  
  43.   4,  
  44.   ‘cola_d‘,  
  45.   SDO_GEOMETRY(  
  46.     2003,  -- two-dimensional polygon  
  47.     NULL,  
  48.     NULL,  
  49.     SDO_ELEM_INFO_ARRAY(1,1003,4), -- one circle  
  50.     SDO_ORDINATE_ARRAY(8,7, 10,9, 8,11)  
  51.   )  
  52. );  


需要写将建立的表的空间图层的信息插入一条到USER_SDO_GEOM_METADATA

 

[sql] view plain copy
 
  1. INSERT INTO user_sdo_geom_metadata  
  2.     (TABLE_NAME,  
  3.      COLUMN_NAME,  
  4.      DIMINFO,  
  5.      SRID)  
  6.   VALUES (  
  7.   ‘cola_markets‘,  
  8.   ‘shape‘,  
  9.   SDO_DIM_ARRAY(   -- 20X20 grid  
  10.     SDO_DIM_ELEMENT(‘X‘, 0, 20, 0.005),  
  11.     SDO_DIM_ELEMENT(‘Y‘, 0, 20, 0.005)  
  12.      ),  
  13.   NULL   -- SRID  
  14. );  
[sql] view plain copy
 
  1. -- SRID  

USER_SDO_GEOM_METADATA 在登陆PL/SQL后,Users→MDSYS→Objects→Views→USER_SDO_GEOM_METADATA 

打开可以查看到下图(我已经插入了2个空间表的记录了)

技术分享图片

可以看到这个插入的记录,点击红色方框初的任意一个,会出现下图:

技术分享图片

 

[sql] view plain copy
 
  1. SDO_DIM_ARRAY(   -- 20X20 grid  
  2.     SDO_DIM_ELEMENT(‘X‘, 0, 20, 0.005),  
  3.     SDO_DIM_ELEMENT(‘Y‘, 0, 20, 0.005)  
  4.      ),  


就是这句sql的意思了,其中SDO_DIMNAME是一个二维的最大值和最小值的描述,SDO_LB是在X上面最小值,SDO_UB是X上面的最大值,SDO_TOLERANCE是指误差的大小,这里就是指0.005内的数据都会默认为一个数据。

 

第四步就是,建立空间索引(COLA_SPATIAL_IDX)

 

[sql] view plain copy
 
  1. CREATE INDEX cola_spatial_idx  
  2.    ON cola_markets(shape)  
  3.    INDEXTYPE IS MDSYS.SPATIAL_INDEX;  


建立索引的目的是增加查询速度(理论上也可以不建立索引进行查询,但是实际中基本无法查询的出来)

建立好索引后会在tables中生成一个下面的表:

技术分享图片

这个是个索引表:

可以在系统的索引表中找的到。

以上就创建完成了SDO_Geometry表了;可以开始空间分析了。

oracle 创建SDO_Geometry表

标签:circle   http   nbsp   mod   数据   null   bsp   sys   number   

原文地址:https://www.cnblogs.com/telwanggs/p/8440810.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!