I have a table of polygons covering most of the world. I posted a question before about finding which of them are adjacent: http://postgis.refractions.net/pipermail/postgis-users/2012-January/031992.html Now I also have a set of great-circle lines (LINESTRINGs with only 2 points) and I need to figure out which of them cross the border between two given polygons (in the right direction).

As before, there is often no precise "border" between the polygons - sometimes they overlap a little and sometimes there is a slight gap. So it's not just a matter of calling ST_Intersects(border_line, crossing_line). I tried 2 ways of doing this:

1) Buffer each polygon a bit to fill in the gaps, get the intersections and check if the line crosses that, ie. ST_Intersects(ST_Intersection(ST_Buffer(polygon1, 100), ST_Buffer(polygon2, 100)), crossing_line)

2) Find ST_Intersection(polygon, crossing_line) for each polygon, which is a LINESTRING with 2 points. Where the end point of one of these LINESTRINGs is the start point of another that means crossing_line went from polygon1 to polygon2.

Both of these approaches seem to basically work - except when the shapes span the dateline. Doing the calculations on geometry doesn't return the right results, because the coordinates differ between shapes (eg. 190 vs. -170). Doing them on geography fails with this error:

ERROR: Error performing intersection: TopologyException: found non-noded intersection between LINESTRING ...

I'm guessing that's because ST_Buffer and ST_Intersection on geography really work on geometry internally anyway.

Any ideas on how I can do this? Thanks in advance for any help!

Evan
_______________________________________________
postgis-users mailing list
postgis-users@postgis.refractions.net
http://postgis.refractions.net/mailman/listinfo/postgis-users

Reply via email to