private MultiPolygon runPolygonClipping(final Polygon subject, final BiFunction<Geometry, Geometry, Geometry> application) { MultiPolygon result = new MultiPolygon(new MultiMap<>()); for (final com.vividsolutions.jts.geom.Polygon jtsClipping : this.jtsClippings) { result = result.merge(processMultiPolygon( application.apply(PolygonClipper.getJts(subject), jtsClipping))); } return result; }
private MultiPolygon runMultiPolygonClipping(final MultiPolygon subject, final BiFunction<Geometry, Geometry, Geometry> application) { MultiPolygon result = new MultiPolygon(new MultiMap<>()); final Set<com.vividsolutions.jts.geom.Polygon> jtsSubjects = new JtsMultiPolygonConverter() .convert(subject); for (final com.vividsolutions.jts.geom.Polygon jtsClipping : this.jtsClippings) { for (final com.vividsolutions.jts.geom.Polygon jtsSubject : jtsSubjects) { result = result .merge(processMultiPolygon(application.apply(jtsSubject, jtsClipping))); } } return result; }
private MultiPolygon processMultiPolygon(final Geometry intersections) { MultiPolygon result = new MultiPolygon(new MultiMap<>()); if (intersections instanceof GeometryCollection) { final GeometryCollection collection = (GeometryCollection) intersections; final int numGeometries = collection.getNumGeometries(); for (int n = 0; n < numGeometries; n++) { final Geometry geometry = collection.getGeometryN(n); result = result.merge(processMultiPolygon(geometry)); } } else if (intersections instanceof com.vividsolutions.jts.geom.Polygon) { final Set<com.vividsolutions.jts.geom.Polygon> set = new HashSet<>(); set.add((com.vividsolutions.jts.geom.Polygon) intersections); result = result.merge(new JtsMultiPolygonConverter().backwardConvert(set)); } return result; }