On Thu, Sep 29, 2011 at 01:22:11PM +0200, Szymon Guz wrote: > On 29 September 2011 11:37, Sandro Santilli <s...@keybit.net> wrote: > > > On Thu, Sep 29, 2011 at 11:29:51AM +0200, Szymon Guz wrote: > > > On 29 September 2011 11:20, Sandro Santilli <s...@keybit.net> wrote: > > > > On Thu, Sep 29, 2011 at 11:14:52AM +0200, Szymon Guz wrote: > > > > > > > > > > this works OK, returns something: > > > > > > > > > > SELECT ... FROM ... WHERE > > > > > st_intersects( > > > > > geometry, > > > > > st_geomfromtext('POINT(3 50)', 4326) > > > > > ); > > > > > > > > > > but this returns nothing: > > > > > > > > > > SELECT ... FROM ... WHERE > > > > > st_intersects( > > > > > geometry, > > > > > st_geomfromtext('POINT(3 50, 3 50 )', 4326) > > > > > ); > > > > > > > > The second should raise an exception due to malformed WKT being used. > > > > Doesn't it ? > > > > > > The second raises exception only if there is exactly one point. When > > there > > > are more points it works OK: > > > > > > SELECT st_geomfromtext('LINESTRING(3 50)', 4326) > > > ERROR: geometry requires more points > > > HINT: "LINESTRING(3 50)" <-- parse error at position 17 within geometry > > > > > > SELECT st_astext(st_geomfromtext('LINESTRING(3 50, 3 50)', 4326)) > > > > > > 'LINESTRING(3 50,3 50)' > > > > Yes, but you wrote 'POINT(3 50, 3 50)' in your first mail :) > > > > Anyway, you're now saying that while POINT(3 50) is reported > > to intersect something, LINESTRING(3 50, 3 50) isn't. Correct ? > > Can you provide literal data showing this discrepance ? > > That is, a query where both operands are in WKT form ? > > > > --strk; > > > > Oh yes, sorry, I meant 'LINESTRING( 3 50, 3 50)' :) > > I managed to replicate the error like this:
... > > CREATE TABLE g2(geometry geometry); > > insert into g2(geometry) > SELECT ST_Buffer( > ST_GeomFromText('POINT(3 50)', 4326), > 50, 'quad_segs=8' > ); // TRUE: select st_intersects(geometry, st_centroid(geometry)) from g2; // FALSE: select st_intersects(geometry, st_makeline( st_centroid(geometry), st_centroid(geometry) )) from g2; // TRUE: select st_intersects(geometry, st_makeline( st_centroid(geometry), st_translate(st_centroid(geometry), 1e-6, 0) )) from g2; Interesting. This is against GEOS 3.3.1. True, the linestring is invalid, but doesn't give wrong answer when compared to a point. ST_MakeValid will fix that line for you, turning into a point. --strk; () Free GIS & Flash consultant/developer /\ http://strk.keybit.net/services.html _______________________________________________ postgis-users mailing list postgis-users@postgis.refractions.net http://postgis.refractions.net/mailman/listinfo/postgis-users