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 <[EMAIL PROTECTED]>:
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 <[EMAIL PROTECTED]>:
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
[EMAIL PROTECTED]
http://postgis.refractions.net/mailman/listinfo/postgis-users
_______________________________________________
geos-devel mailing list
geos-devel@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/geos-devel
_______________________________________________
geos-devel mailing list
geos-devel@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/geos-devel

_______________________________________________
geos-devel mailing list
geos-devel@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/geos-devel



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

_______________________________________________
geos-devel mailing list
geos-devel@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/geos-devel

Reply via email to