public IGeometry Buffer(IGeometry g, double distance) { IPrecisionModel precisionModel = _workingPrecisionModel; if (precisionModel == null) { precisionModel = g.PrecisionModel; } // factory must be the same as the one used by the input _geomFact = g.Factory; OffsetCurveBuilder curveBuilder = new OffsetCurveBuilder(precisionModel, _bufParams); OffsetCurveSetBuilder curveSetBuilder = new OffsetCurveSetBuilder(g, distance, curveBuilder); var bufferSegStrList = curveSetBuilder.GetCurves(); // short-circuit test if (bufferSegStrList.Count <= 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(new OverlayNodeFactory()); _graph.AddEdges(_edgeList.Edges); IEnumerable <BufferSubgraph> subgraphList = CreateSubgraphs(_graph); PolygonBuilder polyBuilder = new PolygonBuilder(_geomFact); BuildSubgraphs(subgraphList, polyBuilder); var resultPolyList = polyBuilder.Polygons; // just in case... if (resultPolyList.Count <= 0) { return(CreateEmptyResultGeometry()); } IGeometry resultGeom = _geomFact.BuildGeometry(resultPolyList); return(resultGeom); }
public IGeometry Buffer(IGeometry g, double distance) { IPrecisionModel precisionModel = _workingPrecisionModel; if (precisionModel == null) precisionModel = g.PrecisionModel; // factory must be the same as the one used by the input _geomFact = g.Factory; OffsetCurveBuilder curveBuilder = new OffsetCurveBuilder(precisionModel, _bufParams); OffsetCurveSetBuilder curveSetBuilder = new OffsetCurveSetBuilder(g, distance, curveBuilder); var bufferSegStrList = curveSetBuilder.GetCurves(); // short-circuit test if (bufferSegStrList.Count <= 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(new OverlayNodeFactory()); _graph.AddEdges(_edgeList.Edges); IEnumerable<BufferSubgraph> subgraphList = CreateSubgraphs(_graph); PolygonBuilder polyBuilder = new PolygonBuilder(_geomFact); BuildSubgraphs(subgraphList, polyBuilder); var resultPolyList = polyBuilder.Polygons; // just in case... if (resultPolyList.Count <= 0) { return CreateEmptyResultGeometry(); } IGeometry resultGeom = _geomFact.BuildGeometry(resultPolyList); return resultGeom; }
private static IGeometry BuildCurveSet(IGeometry g, double dist, IBufferParameters bufParams) { // --- now construct curve var ocb = new OffsetCurveBuilder(g.Factory.PrecisionModel, bufParams); var ocsb = new OffsetCurveSetBuilder(g, dist, ocb); var curves = ocsb.GetCurves(); var lines = new List<IGeometry>(); foreach (var ss in curves) { var pts = ss.Coordinates; lines.Add(g.Factory.CreateLineString(pts)); } IGeometry curve = g.Factory.BuildGeometry(lines); return curve; }
public IGeometry Buffer(IGeometry g, double distance) { IPrecisionModel precisionModel = _workingPrecisionModel; if (precisionModel == null) { precisionModel = g.PrecisionModel; } // factory must be the same as the one used by the input _geomFact = g.Factory; OffsetCurveBuilder curveBuilder = new OffsetCurveBuilder(precisionModel, _bufParams); OffsetCurveSetBuilder curveSetBuilder = new OffsetCurveSetBuilder(g, distance, curveBuilder); var bufferSegStrList = curveSetBuilder.GetCurves(); // short-circuit test if (bufferSegStrList.Count <= 0) { return(CreateEmptyResultGeometry()); } ComputeNodedEdges(bufferSegStrList, precisionModel); _graph = new PlanarGraph(new OverlayNodeFactory()); _graph.AddEdges(_edgeList.Edges); IEnumerable <BufferSubgraph> subgraphList = CreateSubgraphs(_graph); PolygonBuilder polyBuilder = new PolygonBuilder(_geomFact); BuildSubgraphs(subgraphList, polyBuilder); var resultPolyList = polyBuilder.Polygons; // just in case... if (resultPolyList.Count <= 0) { return(CreateEmptyResultGeometry()); } IGeometry resultGeom = _geomFact.BuildGeometry(resultPolyList); return(resultGeom); }
public void Buffer3() { var geometry = reader.Read( @"LINESTRING(1250.7665 446.9385,1137.8786 170.4488,1136.3666106287267 166.74557327980631,1139.485009866369 125.36515638486206,1137.8786 121.7019)"); Assert.IsNotNull(geometry); Assert.IsTrue(geometry.IsValid); BufferParameters parameters = new BufferParameters() {EndCapStyle = EndCapStyle.Round}; var curveBuilder = new OffsetCurveBuilder( geometry.PrecisionModel, parameters); var curveSetBuilder = new OffsetCurveSetBuilder(geometry, 5, curveBuilder); var bufferSegStrList = curveSetBuilder.GetCurves(); Assert.AreEqual(1, bufferSegStrList.Count); var segmentString = (NodedSegmentString) bufferSegStrList[0]; Assert.AreEqual(45, segmentString.Count); for (var i = 0; i < segmentString.Coordinates.Length; i++) { var coord = segmentString.Coordinates[i]; Debug.WriteLine(String.Format("{1:R} {2:R}", i, coord.X, coord.Y)); } }
/// <summary> /// /// </summary> /// <param name="inputGeom"></param> /// <param name="distance"></param> /// <param name="curveBuilder"></param> public OffsetCurveSetBuilder(IGeometry inputGeom, double distance, OffsetCurveBuilder curveBuilder) { _inputGeom = inputGeom; _distance = distance; _curveBuilder = curveBuilder; }
public static IGeometry SingleSidedBufferCurve(IGeometry geom, double distance) { var bufParam = new BufferParameters(); bufParam.IsSingleSided = true; var ocb = new OffsetCurveBuilder( geom.Factory.PrecisionModel, bufParam ); var pts = ocb.GetLineCurve(geom.Coordinates, distance); var curve = geom.Factory.CreateLineString(pts); return curve; }
public IGeometry Buffer(IGeometry g, double distance) { IPrecisionModel precisionModel = _workingPrecisionModel; if (precisionModel == null) precisionModel = g.PrecisionModel; // factory must be the same as the one used by the input _geomFact = g.Factory; OffsetCurveBuilder curveBuilder = new OffsetCurveBuilder(precisionModel, _bufParams); OffsetCurveSetBuilder curveSetBuilder = new OffsetCurveSetBuilder(g, distance, curveBuilder); var bufferSegStrList = curveSetBuilder.GetCurves(); // short-circuit test if (bufferSegStrList.Count <= 0) { return CreateEmptyResultGeometry(); } ComputeNodedEdges(bufferSegStrList, precisionModel); _graph = new PlanarGraph(new OverlayNodeFactory()); _graph.AddEdges(_edgeList.Edges); IEnumerable<BufferSubgraph> subgraphList = CreateSubgraphs(_graph); PolygonBuilder polyBuilder = new PolygonBuilder(_geomFact); BuildSubgraphs(subgraphList, polyBuilder); var resultPolyList = polyBuilder.Polygons; // just in case... if (resultPolyList.Count <= 0) { return CreateEmptyResultGeometry(); } IGeometry resultGeom = _geomFact.BuildGeometry(resultPolyList); return resultGeom; }