# [postgis-users] Find polygon border crossings over dateline

Evan Martin postgresql at realityexists.net
Mon Feb 6 18:31:22 PST 2012

```I have a table of polygons covering most of the world. I posted a
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

```