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