/// <summary> /// Self-snaps a geometry by running a union operation with it as the only input. /// This helps to remove narrow spike/gore artifacts to simplify the geometry, /// which improves robustness. /// Collapsed artifacts are removed from the result to allow using /// it in further overlay operations. /// </summary> /// <param name="geom">Geometry to self-snap</param> /// <param name="snapTol">Snap tolerance</param> /// <returns>The snapped geometry (homogenous)</returns> private static Geometry SnapSelf(Geometry geom, double snapTol) { var ov = new OverlayNG(geom, null); var snapNoder = new SnappingNoder(snapTol); ov.Noder = snapNoder; /* * Ensure the result is not mixed-dimension, * since it will be used in further overlay computation. * It may however be lower dimension, if it collapses completely due to snapping. */ ov.StrictMode = true; return(ov.GetResult()); }
void CheckRounding(string wkt1, string wkt2, double snapDist, string expectedWKT) { var geom1 = Read(wkt1); Geometry geom2 = null; if (wkt2 != null) { geom2 = Read(wkt2); } var noder = new SnappingNoder(snapDist); var result = NodingTestUtility.NodeValidated(geom1, geom2, noder); // only check if expected was provided if (expectedWKT == null) { return; } var expected = Read(expectedWKT); CheckEqual(expected, result); }
private static Geometry OverlaySnapTol(Geometry geom0, Geometry geom1, SpatialFunction opCode, double snapTol) { var snapNoder = new SnappingNoder(snapTol); return(OverlayNG.Overlay(geom0, geom1, opCode, snapNoder)); }
private static INoder GetNoder(double tolerance) { var snapNoder = new SnappingNoder(tolerance); return(new ValidatingNoder(snapNoder)); }