日期:2014-05-16 浏览次数:20417 次
--建立测试表 create table test_geo (id number primary key, name varchar2(32), shape mdsys.sdo_geometry); --插入metadata insert 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_2 select * 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';