/** See {@link #unwrapDateline(Geometry)}. */ private static int unwrapDateline(Polygon poly) { LineString exteriorRing = poly.getExteriorRing(); int cross = unwrapDateline(exteriorRing); if (cross > 0) { //TODO TEST THIS! Maybe bug if doesn't cross but is in another page? for(int i = 0; i < poly.getNumInteriorRing(); i++) { LineString innerLineString = poly.getInteriorRingN(i); unwrapDateline(innerLineString); for(int shiftCount = 0; ! exteriorRing.contains(innerLineString); shiftCount++) { if (shiftCount > cross) throw new IllegalArgumentException("The inner ring doesn't appear to be within the exterior: " +exteriorRing+" inner: "+innerLineString); shiftGeomByX(innerLineString, 360); } } } return cross; }
geom = unwrapDateline(geom);//returns same or new geom
for (int n = 0; n < gc.getNumGeometries(); n++) { Geometry geometryN = gc.getGeometryN(n); Geometry geometryUnwrapped = unwrapDateline(geometryN); // recursion list.add(geometryUnwrapped); didUnwrap |= (geometryUnwrapped != geometryN);