[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