Skip to Main Content

Database Software

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Missing geometries when using SDO_FILTER and SDO_RELATE

MacinPMar 24 2017 — edited Mar 27 2017

I am trying to find out why for some cases SDO_FILTER and SDO_RELATE does not returns bigger geometries.

Here is my table with two geometries:

DROP table foo;

CREATE table foo(

state\_code VARCHAR2(2 Char)  

,shape MDSYS.SDO_GEOMETRY

,PRIMARY KEY(state_code)

);

INSERT INTO foo

SELECT 'T1',MDSYS.SDO_GEOMETRY(2003,4326,NULL,MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,1),MDSYS.SDO_ORDINATE_ARRAY(-170,40,-120,20,-120,40,-170,40)) FROM dual UNION ALL

SELECT 'B1',MDSYS.SDO_GEOMETRY(2003,4326,NULL,MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,1),MDSYS.SDO_ORDINATE_ARRAY(-163,37,-162,37,-162,37.5,-163,37.5,-163,37)) FROM dual;

COMMIT;

DELETE FROM user_sdo_geom_metadata WHERE table_name = 'FOO';

INSERT INTO user_sdo_geom_metadata VALUES(

'FOO'    

,'SHAPE'

,MDSYS.SDO_DIM_ARRAY(MDSYS.SDO_DIM_ELEMENT('X',-180,180,0.05),MDSYS.SDO_DIM_ELEMENT('Y',-90,90,0.05))

,4326

);

COMMIT;

CREATE INDEX foo_spx ON foo(shape)

INDEXTYPE IS MDSYS.SPATIAL_INDEX;

this is how it looks like on visualization:

pastedImage_2.png

Now when I run following queries:

SELECT STATE_CODE, SHAPE FROM FOO

WHERE SDO_RELATE(SHAPE, MDSYS.SDO_GEOMETRY(2003,4326,NULL,MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,3),MDSYS.SDO_ORDINATE_ARRAY(-163.00,37.00,-162.00,37.5)), 'mask=ANYINTERACT querytype=WINDOW') = 'TRUE' ;

SELECT STATE_CODE, SHAPE FROM FOO

WHERE SDO_FILTER(SHAPE, MDSYS.SDO_GEOMETRY(2003,4326,NULL,MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,3),MDSYS.SDO_ORDINATE_ARRAY(-163.00,37.00,-162.00,37.5))) = 'TRUE' ;

Both queries does not finds bigger geometry T1 only smaller box B1.

But query window is equal to B1 so it should return both.

What is interesting when I ask with bigger box like:

SELECT STATE_CODE, SHAPE FROM FOO

WHERE SDO_RELATE(SHAPE, MDSYS.SDO_GEOMETRY(2003,4326,NULL,MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,3),MDSYS.SDO_ORDINATE_ARRAY(-163.00,37.00,-162.00,38.00)), 'mask=ANYINTERACT querytype=WINDOW') = 'TRUE' ;

SELECT STATE_CODE, SHAPE FROM FOO

WHERE SDO_FILTER(SHAPE, MDSYS.SDO_GEOMETRY(2003,4326,NULL,MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,3),MDSYS.SDO_ORDINATE_ARRAY(-163.00,37.00,-162.00,38.00))) = 'TRUE' ;

then SDO_RELATE finds only B1,

but SDO_FILTER find B1 and T1.

I think in all above cases bot B1 and T1 should be returned.

Can anybody have similar problems?

I am on 'Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production'

Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Apr 24 2017
Added on Mar 24 2017
4 comments
590 views