buffer method
Implementation
Geometry buffer(Geometry g, double distance) {
PrecisionModel? precisionModel = workingPrecisionModel;
if (precisionModel == null)
precisionModel = g.getPrecisionModel();
// factory must be the same as the one used by the input
geomFact = g.getFactory();
BufferCurveSetBuilder curveSetBuilder = BufferCurveSetBuilder(g, distance, precisionModel, bufParams);
curveSetBuilder.setInvertOrientation(isInvertOrientation);
List bufferSegStrList = curveSetBuilder.getCurves();
// short-circuit test
if (bufferSegStrList.length <= 0) {
return createEmptyResultGeometry();
}
//BufferDebug.runCount++;
//String filename = "run" + BufferDebug.runCount + "_curves";
//System.out.println("saving " + filename);
//BufferDebug.saveEdges(bufferEdgeList, filename);
// DEBUGGING ONLY
//WKTWriter wktWriter = new WKTWriter();
//Debug.println("Rings: " + wktWriter.write(convertSegStrings(bufferSegStrList.iterator())));
//wktWriter.setMaxCoordinatesPerLine(10);
//System.out.println(wktWriter.writeFormatted(convertSegStrings(bufferSegStrList.iterator())));
computeNodedEdges(bufferSegStrList, precisionModel);
graph = new PlanarGraph.withFactory(OverlayNodeFactory());
graph!.addEdges(edgeList.getEdges());
List subgraphList = createSubgraphs(graph!);
PolygonBuilder polyBuilder = new PolygonBuilder(geomFact!);
buildSubgraphs(subgraphList, polyBuilder);
List<Polygon> resultPolyList = polyBuilder.getPolygons();
// just in case...
if (resultPolyList.isEmpty) {
return createEmptyResultGeometry();
}
Geometry resultGeom = geomFact!.buildGeometry(resultPolyList);
return resultGeom;
}