[geos-devel] how to know if two linestrings "really" cross each other

Sandro Santilli strk at keybit.net
Wed May 30 03:58:52 PDT 2012

On Wed, May 30, 2012 at 12:40:19PM +0200, Jasmin FORMONT wrote:
> Hi everyone
> I can't find a way to tell if two linestrings "really" cross each other.
> For instance if I have this linestring :
> Line1 : LINESTRING(0 0, 1 1, 2 0)
> How can I differentiate the relation of line 1 with one of the following :
> Line2 : LINESTRING(0 2, 1 1, 2 2)    -> no "real" cross, just a contact point
> Line3 : LINESTRING(0 2, 1 1, 1 0)    -> lines "really" cross each other
> I can't find a good combination of crosses, touches, etc... to differentiate these cases.

I can't think of an easy way to do that.

I'd note that for the "split" case there's no way to walk on all segments
of your first geometry w/out stepping over segments of the second.
You can in the "no real cross" case.

You could then look at the planargraph. Not available trough the C API.
Hard trough the C++ one. I guess you could do it with a nice SQL query
with PostGIS 2.0 topology ;)


More information about the geos-devel mailing list