sunfruit[请访问http://www.fruitres.cn]

--我相信JAVA能走得更远 QQ:316228067

Oracle Spatial建立过程

--sunfruit

空间数据库Oracle Spatial的建立过程如下:

-- 创建最基本的个人兴趣点表结构
drop table poi;
create table poi (gid INTEGER,
  opid INTEGER,
  gname VARCHAR2(256),
  gshape MDSYS.SDO_GEOMETRY);

-- 更新用户空间数据对象视图(建立索引依赖她)
delete from USER_SDO_GEOM_METADATA where TABLE_NAME='POI' and COLUMN_NAME='GSHAPE';
insert into USER_SDO_GEOM_METADATA values ('poi',
     'gshape',
     MDSYS.SDO_DIM_ARRAY(MDSYS.SDO_DIM_ELEMENT('lon', -- lontitude
          -64800000, -- min(china 26430867 73.41907434101486)
          64800000, -- max(china 49679991 137.99997381765377)
          1),  -- scale (china abs 23249124)
       MDSYS.SDO_DIM_ELEMENT('lat',  -- latitude
          -32400000, -- min(china -1677502 -4.6597267116858045)
          32400000, -- max(china 21571819 59.92171939467364)
          1)),  -- scale (china abs 23249321)
     NULL);

-- 插入一个个人兴趣点的SQL语句,使用标准点地物空间数据类型
delete from POI;
insert into POI values (20010001,
   1,
   '我的家',
   MDSYS.SDO_GEOMETRY(2001, -- SDO_GTYPE
     NULL,  -- SDO_SRID
     SDO_POINT_TYPE(41884696, 14377039, NULL), NULL, NULL));

-- 插入一个个人兴趣点的SQL语句,使用另一种点地物空间数据组织结构
delete from POI;
insert into POI values (20010001,
   1,
   '我的家',
   MDSYS.SDO_GEOMETRY(2001, -- SDO_GTYPE
     NULL,  -- SDO_SRID
     NULL,  -- SDO_POINT
     MDSYS.SDO_ELEM_INFO_ARRAY (1, -- SDO_STARTING_OFFSET
        1, -- SDO_ETYPE
        1), -- SDO_INTERPRETATION
     MDSYS.SDO_ORDINATE_ARRAY (41884696,14377039)));

-- 创建缺省的R-tree空间索引
drop index POI_IDX;
CREATE INDEX POI_IDX on poi(gshape)
 INDEXTYPE is MDSYS.SPATIAL_INDEX;
-- PARAMETERS('SDO_LEVEL=10000'); -- 180*60*60*1000*2/100/100*90*60*60*1000*2/100/100 = 8398080000

-- 索引粗滤矩形窗口选择SQL语句(对于点地物对象,索引粗滤的结果是精确的)
SELECT * FROM POI P
 WHERE sdo_filter(P.gshape,
  mdsys.sdo_geometry(2003,NULL,NULL,
    mdsys.sdo_elem_info_array(1,1003,3),
    mdsys.sdo_ordinate_array(41883696,14376039, 41885696,14378039)),
  'querytype=window') = 'TRUE';

-- 精确匹配矩形窗口选择SQL语句(计算非常耗时)
SELECT * FROM POI P
 WHERE sdo_relate(P.gshape,
  mdsys.sdo_geometry(2003,NULL,NULL,
    mdsys.sdo_elem_info_array(1,1003,3),
    mdsys.sdo_ordinate_array(41883696,14376039, 41885696,14378039)),
  'mask=INSIDE querytype=window') = 'TRUE';

 

posted on 2006-07-25 10:31 sunfruit 阅读(373) 评论(0)  编辑  收藏 所属分类: 数据库


只有注册用户登录后才能发表评论。


网站导航: