/// <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());
        }
Example #2
0
        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));
        }
Example #4
0
        private static INoder GetNoder(double tolerance)
        {
            var snapNoder = new SnappingNoder(tolerance);

            return(new ValidatingNoder(snapNoder));
        }