[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