首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

Oracle Spatial的简略应用

2012-08-31 
Oracle Spatial的简单应用05年的时候就用过这个东西,不过当时完成了项目就了事,没把一些操作记录下来,这两

Oracle Spatial的简单应用
05年的时候就用过这个东西,不过当时完成了项目就了事,没把一些操作记录下来,这两天又用了一下,记录一下一个简单应用的操作步骤吧。

--建立测试表create table test_geo (id number primary key, name varchar2(32), shape mdsys.sdo_geometry);--插入metadatainsert into user_sdo_geom_metadata  (table_name, COLUMN_NAME, DIMINFO, SRID)values  ('test_geo',   'SHAPE',   MDSYS.SDO_DIM_ARRAY(MDSYS.SDO_DIM_ELEMENT('X',                                             -180.000000000,                                             180.000000000,                                             0.500000000),                       MDSYS.SDO_DIM_ELEMENT('Y',                                             -90.000000000,                                             90.000000000,                                             0.500000000)),   8307);--建立索引CREATE INDEX test_geo_shape_idx ON test_geo(shape)INDEXTYPE IS MDSYS.SPATIAL_INDEX;--插入数据--这是一个矩形insert into test_geo  (id, name, shape)values  (2,   'test_area_2',   mdsys.sdo_geometry(2003,                       8307,                       null,                      mdsys.sdo_elem_info_array(1, 1003, 1),                      mdsys.SDO_ORDINATE_array(118, 32, 119, 32, 119,33, 118,33, 118,32)));--这是一个不规则多边形insert into test_geo  (id, name, shape)values  (3,   'test_area_3',   mdsys.sdo_geometry(2003,                       8307,                       null,                      mdsys.sdo_elem_info_array(1, 1003, 1),                      mdsys.SDO_ORDINATE_array(1,3, 2,2, 3,3, 4,2, 3,1, 2,1, 0,2, 1,3)));--执行查询--这个能查询到test_area_2select *  from test_geo t where SDO_RELATE(t.shape,                  MDSYS.Sdo_Geometry(2001,                                     8307,                                     MDSYS.Sdo_Point_Type(118.5, 32.5, null),                                     null,                                     null),                  'mask=ANYINTERACT querytype=WINDOW') = 'TRUE';--这个能查询到test_area_3,说明落在地图边界上的点也是可以查询的--替换查询条件为2,2可查到,2,1.5可查到,2,2.5查不到select *  from test_geo t where SDO_RELATE(t.shape,                  MDSYS.Sdo_Geometry(2001,                                     8307,                                     MDSYS.Sdo_Point_Type(1.5, 2.5, null),                                     null,                                     null),                  'mask=ANYINTERACT querytype=WINDOW') = 'TRUE';


还有一点疑惑写在下面
我最早接触到spatial的时候,地图数据是通过oracle的shp2sdo这个工具,从shp格式的地图里导入的,那时候做查询的时候,查询条件可以用MDSYS.Sdo_Geometry(2003, 8307,
   MDSYS.Sdo_Point_Type(1.5, 2.5, null),  null, null), 但是现在自己插入的数据,如果第一个参数还用2003就会报一个ora-13031异常,必须改成2001才能正常查询,不知道是为什么。

热点排行