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.进行一些空间查询

  1. CREATE TABLE cola_markets (
  2. mkt_id NUMBER PRIMARY KEY,
  3. name VARCHAR2(32),
  4. shape SDO_GEOMETRY);
  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

  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. );
  1. -- SRID

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

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

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

  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)

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

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

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

这个是个索引表:

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

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

oracle 创建SDO_Geometry表的更多相关文章

  1. Oracle创建测试表

    试中文排序的数据库版本: SQL> select * from v$version; BANNER ----------------------------------------------- ...

  2. oracle创建默认表空间---重要

    当oracle创建数据库后,sys创建用户时还要有默认表空间.不创建默认表空间在导如项目时会有些数据表导入不成功! 由于时间仓促以截屏为例  之后会在刚刚那个空文件生成一个文件 ----------- ...

  3. Oracle 创建数据表

    数据库中的每一个表都被一个模式(或用户)所拥有,因此表是一种典型的模式对象.在创建数据表时,Oracle 将在一个指定的表空间中为其分配存储空间.最初创建的表时一个空的逻辑存储结构,其中不包含任何数据 ...

  4. Oracle 创建数据表以及对数据表、字段、主外键、约束的操作

    选择主键的原则: 最少性 尽量选择使用单个键作为主键 稳定性 尽量选择数值更新少的列作为主键 1.创建数据表(CREATE TABLE) --创建数据表Student create table Stu ...

  5. Oracle 创建/删除 表空间、用户、授权

    首先以DBA连接到数据库:sqlplus / as sysdba; --创建表空间 create tablespace test_tablespace datafile 'D:\developer\o ...

  6. oracle 创建数据表空间和用户

    --创建临时表空间(不必须)create temporary tablespace zwtest tempfile 'D:\Java\oracle\oradata\zwtest.dbf' size 5 ...

  7. oracle创建数据库表空间

    1.创建表空间(存放数据) create tablespace xtba_datadatafile 'F:\ORACLE\ORADATA\ORCL\XTBA.DBF'size 50mautoexten ...

  8. oracle创建数据库表空间 用户 授权 导入 导出数据库

    windows下可以使用向导一步一步创建数据库,注意编码. windows连接到某一个数据库实例(不然会默认到一个实例下面):set ORACLE_SID=TEST --登录开始创建表空间及可以操作的 ...

  9. Oracle 创建外部表

    Oracle 外部表能迅速的将海量的数据导入到数据库里面,外部表的创建使用步骤如下: 1 创建一个Directory:必须用sys用户创建,用户存放外部数据文件. create directory D ...

随机推荐

  1. C语言指针收藏

    指针是什么 >>每一个内存单元只能同时存储一个数据,如何保证内存单元同时只能存储一个数据,可以使用编号的方式实现内存单元标记,此编号就是指针. >>指针是一个变量,指针是存放着 ...

  2. mpdf Could not find image file (http://local.com/xxxxx)

    记录一下昨天和今天遇到的,yii2使用mpdf的时候,图片是使用php方法生成的二维码,所以图片地址为http://local.com/xxxxx,url中携带不同的参数. 但是开启了 $mpdf-& ...

  3. python_元组 学习

    一.创建元组 代码: name=(‘chinese’,’gansu’,’beijing’) 创建空元组 name=() 元组中只包含一个元素时,需要在玄素后面加逗号(,)消除歧义: name=(‘ch ...

  4. Indexing the World Wide Web: the Journey So Far阅读笔记

    文献文档用google搜索标题即可. term预处理:用空格切分,去除标点,去除撇号,归一化小写,去除变音符号,词干还原(?),去除停用词,挖掘词组. 索引选型工程最佳实践:term粒度.按doc分块 ...

  5. Windows 10家庭版升级到专业版,系统蓝屏

    Log Name: SystemSource: Microsoft-Windows-DistributedCOMDate: 9/9/2018 7:56:57 PMEvent ID: 10016Task ...

  6. [PHP]memcache安装

    1.memcached 安装sudo apt-get install memcached memcached 参数说明memcached -d -m 50 -p 11211 -u root-m 指定使 ...

  7. 自定义Qt组件-通讯模块(P3)

    1.   半双工模式实时检测串口 ComHalfDuplex类是为了解决上位机发送控制指令和下位机发送数据会在半双工RS485总线中产生冲突引起乱码而引入的(v0.010版本引入). 解决冲突的原理主 ...

  8. 14.C#/.NET编程中的常见异常(持续更新)

    1.Object reference not set to an instance of an object. 未将对象引用(引用)到对象的实例,说白了就是有个对象为null,但是你在用它点出来的各种 ...

  9. mysql存储过程中最后有commit和没有commit 是有所不同的。(为测试但是碰到过这个问题)

    如果存储过程中没有执行commit,那么spring容器一旦发生了事务回滚,存储过程执行的操作也会回滚.如果存储过程执行了commit,那么数据库自身的事务此时已提交,这时即使在spring容器中托管 ...

  10. JSON语法格式

    一.JSON数据格式 名称/值对 二.JSON值对数据类型 数字    字符串   逻辑值    数组(在方括号中)     对象 (在花括号中)     null eg: { "staff ...