Polygons across international dateline [-180..+180 longitude]
You can build a custom mercator projection centered approximately on the center of the swath. For example, use for swath 25:
+proj=merc +lon_0=-140 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs
In this projection, the swath is not broken by the dateline. You can create the polygon from the line.
Then create a cut polygon between -179.95°E and 179.95°E in EPSG:4326:
Nr;WKT
1;POLYGON ((-179.95 89, 179.95 89, 179.95 -89, -179.95 -89, -179.95 89))
Reproject it to your custom CRS too, and subtract it from the swath polygon.
After reprojecting back to EPSG:4326, the swath is correctly divided by the dateline:
Continue with all swaths that cross the dateline.
Thanks to @AndreJ for this idea, using Django GEOS API here is a simple solution that avoids needing to re-project anything:
1) Create a MultiPolygon that borders on the dateline:
from django.contrib.gis.geos.collections import MultiPolygon, LinearRing, Polygon
box1 = ((180.0, 89), (179.95, 89), (179.95, -89), (180.0, -89), (180.0, 89))
box2 = ((-180.0, 89), (-179.95, 89), (-179.95, -89), (-180.0, -89), (-180.0, 89))
poly1 = Polygon(LinearRing(box1))
poly2 = Polygon(LinearRing(box2))
poly = MultiPolygon(poly1, poly2)
2) If the offending geometry intersects, return the difference:
from django.contrib.gis.geos.geometry import GEOSGeometry
geometry = GEOSGeometry(WKT) # WKT is your polygon in WKT string format
if geometry.intersects(poly):
print("Geometry crosses dateline... splitting")
geometry = geometry.difference(poly) # clip with dateline polygon
Result is shown as follows: