[postgis-users] ST_within bug?
Paul Ramsey
pramsey at refractions.net
Wed Feb 13 08:54:05 PST 2008
I think your geometries have slightly different topology than your
text representations admit. I cannot reproduce your result, but then I
started from your text representations.
Do this:
update test set geometry = ST_GeomFromText('POLYGON((4506577.35665529
5381992.48407281,4506597.92548351 5381745.65813424,4506999.01763368
5381784.22468715, 4506834.46700796 5382069.61717861,4506615.92320819
5382085.04379977,4506577.35665529 5381992.48407281))', 31468) where
t_id = 3;
And then see what happens.
On Feb 13, 2008, at 3:44 AM, Johannes Sommer wrote:
> Hi,
>
> I ve got a problem with the ST_Within() function. It does not always
> return correct answers.
>
> SELECT AsText(geometry) FROM test WHERE t_id=3;
> -->result:
> "POLYGON((
> 4506577.35665529 5381992.48407281,
> 4506597.92548351 5381745.65813424,
> 4506999.01763368 5381784.22468715,
> 4506834.46700796 5382069.61717861,
> 4506615.92320819 5382085.04379977,
> 4506577.35665529 5381992.48407281))"
>
> -- (WKT/WKB):
> SELECT ST_Within(ST_GeomFromText('POLYGON((
> 4506577.35665529 5381992.48407281,
> 4506597.92548351 5381745.65813424,
> 4506999.01763368 5381784.22468715,
> 4506834.46700796 5382069.61717861,
> 4506615.92320819 5382085.04379977,
> 4506577.35665529 5381992.48407281))', 31468), a.geometry) FROM test
> a WHERE t_id=3;
>
> -->result: false (but obviously it should be true)
>
> -- (WKT/WKT):
>
> SELECT ST_Within(ST_GeomFromText('POLYGON((
> 4506577.35665529 5381992.48407281,
> 4506597.92548351 5381745.65813424,
> 4506999.01763368 5381784.22468715,
> 4506834.46700796 5382069.61717861,
> 4506615.92320819 5382085.04379977,
> 4506577.35665529 5381992.48407281))', 31468), (SELECT
> AsText(geometry) FROM test WHERE t_id=3));
>
> --> result:
> ERROR: Operation on two geometries with different SRIDs
> KONTEXT: SQL function "st_within" statement 1
>
> Ok - I understand this reaction, because AsText returns no SRID.
>
> -- (WKT/WKT):
> SELECT ST_Within((select st_astext(geometry) FROM test WHERE
> t_id=3), (SELECTst_astext(geometry) FROM test WHERE t_id=3));
>
> -->result: true (as it should be)
>
> -- (WKB/WKB):
> select st_within((SELECT geometry FROM test WHERE t_id=3), (SELECT
> geometry FROM test WHERE t_id=3));
> -->result: true (correct)
>
> SELECT ST_Within((select st_astext(geometry) FROM test WHERE
> t_id=3), (SELECTst_astext(geometry) FROM test WHERE t_id=3));
>
> So the problem is that the Desktop Client tries to insert a geometry
> object as GeometryFromText / ST_GeomFromText / GeomFromText
> and I have to compare this new geometry object with an existing
> Polygon.
>
> It makes no difference if I use _st_within / st_within / within,
> geometryfromtext / st_geomfromtext / geomfromtext or astext /
> st_astext.
>
> I used:
> -Windows XP, "POSTGIS="1.3.1" GEOS="3.0.0rc4-CAPI-1.3.3" PROJ="Rel.
> 4.5.0, 22 Oct 2006" USE_STATS",
> "PostgreSQL 8.2.5 on i686-pc-mingw32, compiled by GCC gcc.exe (GCC)
> 3.4.2 (mingw-special)"
>
> -Linux, "POSTGIS="1.3.2" GEOS="3.0.0rc5-CAPI-1.4.0" PROJ="Rel.
> 4.6.0, 21 Dec 2007" USE_STATS",
> "PostgreSQL 8.2.6 on i686-pc-linux-gnu, compiled by GCC gcc (GCC)
> 4.2.1 (SUSE Linux)"
>
> Where am I going wrong?
>
> regards,
> Johannes
>
>
> _______________________________________________
> postgis-users mailing list
> postgis-users at postgis.refractions.net
> http://postgis.refractions.net/mailman/listinfo/postgis-users
More information about the postgis-users
mailing list