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

Ben Jubb benjubb at refractions.net
Fri Jan 25 12:07:35 EST 2008


This bug has been noted before, see message from [2007-07-23 17:06] 
"[geos-devel] GEOS SVN Geometry::contains bug!?" in the this list.

Somehow this fix didn't get into code the first time around. 

b

Martin Davis wrote:
> 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
>>>
>>>   
>>
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: benjubb.vcf
Type: text/x-vcard
Size: 255 bytes
Desc: not available
Url : http://lists.osgeo.org/pipermail/geos-devel/attachments/20080125/959929ee/benjubb.vcf


More information about the geos-devel mailing list