[geos-devel] Re: [postgis-users] ST_Contains doesn't work?

Martin Davis mbdavis at refractions.net
Fri Jan 25 11:49:17 EST 2008


Whoops!  My mistake. I thought you were posting this as a solution to 
the point-in-rectangle-border bug.  I realize now that your patch is is 
a solution to

http://trac.osgeo.org/geos/ticket/171

And yes, your fix is correct - it matches what is in JTS.  As you point 
out, contains() is not commutative, so you can't just exchange the order 
of the parameters.


Martin Davis wrote:
> The original code is correct as it stands.   Your fix works because it 
> just removes a potential optimization.
>
> The fix that Ben posted is the correct one (and has been implemented 
> in JTS as well).
>
> KXK wrote:
>> Paul & Ben J.
>>
>>
>> I found a quick solution for this "Contains" problem.
>>
>> These 3 lines below should be deleted to fix this bug.
>>
>> source/geom/Geomtry.cpp
>>
>> bool
>> Geometry::contains(const Geometry *g) const
>> {
>> .
>> .
>> .
>>     if (isRectangle()) {
>>         return 
>> predicate::RectangleContains::contains((Polygon&)*this, *g);
>>     }
>> // Delete from here
>>     if (g->isRectangle()) {
>>         return predicate::RectangleContains::contains((const 
>> Polygon&)*g, *this);
>>     }
>> // Delete until here
>> .
>> .
>> }
>>
>>
>>
>> The reason why I thought of deleting these 3 lines was:
>>
>> The 1st argument should be passed as the 2nd argument,
>> and the 2nd argument should be passed as the 1st argument,
>> because it should varify if *this contains *g. Not the other way around.
>>
>> BUT, predicate::RectangleContains::contains method accepts the 1st
>> argument only being a rectangle.
>> So, passing *this as the 1st argument is not acceptable since *this is
>> not guaranteed as a rectangle; it is just a geometry.
>>
>>
>> I will put this info to the below site, too.
>> http://trac.osgeo.org/geos/
>>
>> What do you think about the solution? I need your feedbacks.
>>
>>
>> Good Day,
>>
>> KXK
>>
>>
>> 2008/1/18, KXK <vivahome2 at gmail.com>:
>>  
>>> Paul
>>>
>>>
>>> Thanx for a quick reply.
>>>
>>> At http://trac.osgeo.org/geos, I issued a ticket whose number is #171.
>>>
>>>
>>> KXK
>>>
>>> 2008/1/18, Paul Ramsey <pramsey at refractions.net>:
>>>    
>>>> I think this must be arising in the "I'm a box so I can short-circuit
>>>> full computation" code. The error displays with different combinations
>>>> of square and non-square arguments.
>>>>
>>>> On Jan 17, 2008, at 7:55 PM, Paul Ramsey wrote:
>>>>
>>>>      
>>>>> I just confirmed this behavior. true/true on geos 2.2 true/false on
>>>>> geos 3.0.
>>>>> Please file this at http://trac.osgeo.org/geos, it's real, and it's
>>>>> not right.
>>>>>
>>>>> P
>>>>>
>>>>> On Jan 17, 2008, at 7:35 PM, KXK wrote:
>>>>>
>>>>>        
>>>>>> SELECT
>>>>>> ST_Contains(
>>>>>> GeomFromText('POLYGON((0 0,0 10,10 10,10 0,0 0))', -1),
>>>>>> GeomFromText('POLYGON((5 5,5 6,6 6,6 5,5 5))', -1) );
>>>>>>
>>>>>> returns TRUE
>>>>>>
>>>>>>
>>>>>> But,
>>>>>>
>>>>>> SELECT
>>>>>> ST_Contains(
>>>>>> GeomFromText('POLYGON((0 0,0 11,11 10,10 0,0 0))', -1),
>>>>>> GeomFromText('POLYGON((5 5,5 6,6 6,6 5,5 5))', -1) );
>>>>>>
>>>>>> returns FALSE
>>>>>>
>>>>>> I thought the above would also return TRUE.
>>>>>>
>>>>>>
>>>>>> Is this behavior of ST_Contains correct?
>>>>>>
>>>>>> [VERSION INFORMATION]
>>>>>> OS: fc6
>>>>>> PostgreSQL: 8.2.4
>>>>>> PostGIS: 1.2
>>>>>> GEOS: 3.0.0
>>>>>> _______________________________________________
>>>>>> postgis-users mailing list
>>>>>> postgis-users at postgis.refractions.net
>>>>>> http://postgis.refractions.net/mailman/listinfo/postgis-users
>>>>>>           
>>>>> _______________________________________________
>>>>> geos-devel mailing list
>>>>> geos-devel at lists.osgeo.org
>>>>> http://lists.osgeo.org/mailman/listinfo/geos-devel
>>>>>         
>>>> _______________________________________________
>>>> geos-devel mailing list
>>>> geos-devel at lists.osgeo.org
>>>> http://lists.osgeo.org/mailman/listinfo/geos-devel
>>>>
>>>>       
>> _______________________________________________
>> geos-devel mailing list
>> geos-devel at lists.osgeo.org
>> http://lists.osgeo.org/mailman/listinfo/geos-devel
>>
>>   
>

-- 
Martin Davis
Senior Technical Architect
Refractions Research, Inc.
(250) 383-3022



More information about the geos-devel mailing list