package com.revolsys.geometry.test.function;
import java.util.List;
import com.revolsys.geometry.model.Geometry;
import com.revolsys.geometry.model.GeometryFactory;
import com.revolsys.geometry.model.LineString;
import com.revolsys.geometry.model.Polygon;
import com.revolsys.geometry.noding.snapround.GeometryNoder;
import com.revolsys.geometry.operation.polygonize.Polygonizer;
public class PolygonOverlayFunctions {
public static Geometry overlaySnapRounded(final Geometry g1, final Geometry g2,
final double precisionTol) {
final GeometryFactory geometryFactory = g1.getGeometryFactory();
final List<LineString> lines = g1.getGeometries(LineString.class);
// add second input's linework, if any
if (g2 != null) {
lines.addAll(g2.getGeometries(LineString.class));
}
final List nodedLinework = new GeometryNoder(precisionTol).node(lines);
// union the noded linework to remove duplicates
final Geometry nodedDedupedLinework = geometryFactory.buildGeometry(nodedLinework).union();
// polygonize the result
final Polygonizer polygonizer = new Polygonizer();
polygonizer.add(nodedDedupedLinework);
final List<Polygon> polys = polygonizer.getPolygons();
// convert to collection for return
return geometryFactory.polygonal(polys);
}
}