• oracle 创建SDO_Geometry表


    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表了;可以开始空间分析了。

  • 相关阅读:
    Visual Studio 2010 Preview (cont.)
    Office VBA 进阶(开篇)
    Two cool debugger tips that I learnt today
    Send GMail
    Google Email Uploader
    看看.NET 4.0 都有些什么?
    XML Serializer in .NET
    Timeloc: 一个Adobe AIR程序
    SDC task library 一个MSBuild Task的有益补充。
    不考虑促销活动的百货业态供应商结算设计
  • 原文地址:https://www.cnblogs.com/telwanggs/p/8440810.html
Copyright © 2020-2023  润新知