Consider the following WKT Polygon, crossing the international dateline (antimeridian):
POLYGON((176 49,-65 49,-65 11,176 11,176 49))
And the following points:
POINT(-140 32) # Inside the polygon POINT(0 32) # Outside the polygon
Shapely considers this polygon to span on the other side of the planet - covering Asia and the Atlantic, rather than the US and the Pacific. Therefore, it fails to calculate its centroid and tell whether points are inside or outside it:
from shapely import wkt polygon_wkt = 'POLYGON((176 49,-65 49,-65 11,176 11,176 49))' point_in_polygon_wkt = 'POINT(-140 32)' point_outside_polygon_wkt = 'POINT(0 32)' polygon = wkt.loads(polygon_wkt) point_in_polygon = wkt.loads(point_in_polygon_wkt) point_outside_polygon = wkt.loads(point_outside_polygon_wkt) print(polygon.centroid) # POINT (55.5 30) - Wrong! print(polygon.contains(point_in_polygon)) # False - Wrong! print(polygon.contains(point_outside_polygon)) # True - Wrong!
What have I tried
- Using PostGIS - I get the same erroneous results.
- Playing with Shapely arguments - couldn't manage to "wrap" the polygon to the other side of the planet.
- Reading The International Date Line wrap around. To be frank, there does not seem to be an answer there (Except for splitting the polygon).
How can I calculate the centroid, bounding box, and inside/outside predicate for a WGS84 polygon optionally crossing the international dateline (longitude