Exemple #1
0
        public void Test(int number, string wkt1, string wkt2)
        {
            const double scaleFactor = 1e10;

            var reader = new WKTReader();
            var geom1  = reader.Read(wkt1);
            var ve1    = new IsValidOp(geom1).ValidationError;

            if (ve1 != null)
            {
                Debug.WriteLine(string.Format("geom1 is not valid:\n{0} at {1}", ve1.Message, ve1.Coordinate));
                Debug.WriteLine("Attempt to make geom1 a valid geometry");
                Debug.WriteLine(geom1.AsText());
                geom1 = geom1.Buffer(0);
                Debug.WriteLine(geom1.AsText());
            }
            var geom2 = reader.Read(wkt2);
            var ve2   = new IsValidOp(geom1).ValidationError;

            if (ve2 != null)
            {
                Debug.WriteLine(string.Format("geom2 is not valid:\n{0} at {1}", ve2.Message, ve2.Coordinate));
                Debug.WriteLine("Attempt to make geom2 a valid geometry");
                Debug.WriteLine(geom2.AsText());
                geom2 = geom2.Buffer(0);
                Debug.WriteLine(geom2.AsText());
            }

            IGeometry result = null;

            try
            {
                result = geom1.Intersection(geom2);
            }
            catch (TopologyException)
            {
                Debug.WriteLine("Probing with SnapRoundOverlayFunctions");
                Assert.DoesNotThrow(() => result = SnapRoundOverlayFunctions.Intersection(geom1, geom2, scaleFactor));
            }

            ToImage(number, geom1, geom2, result);
        }
Exemple #2
0
        public void TestIssue177()
        {
            var reader = new WKTReader();
            var g1     = reader.Read("MULTIPOLYGON (((30 20, 45 40, 10 40, 30 20)),((15 5, 40 10, 10 20, 5 10, 15 5)))");
            var g2     = reader.Read("MULTIPOLYGON (((40 40, 20 45, 45 30, 40 40)),((20 35, 10 30, 10 10, 30 5, 45 20, 20 35),(30 20, 20 15, 20 25, 30 20)))");

            IGeometry res = null;

            //                                                                                     |
            //                                                             Some cruel scale factor V
            Assert.DoesNotThrow(() => res = SnapRoundOverlayFunctions.SnappedIntersection(g1, g2, 0.1));
            Assert.That(res, Is.Not.Null);
            Assert.That(res.IsValid, Is.True);

            ToImage(0, g1, g2, res);

            // To show that the result is correct:
            var r1 = new GeometryPrecisionReducer(new PrecisionModel(0.1)).Reduce(g1);
            var r2 = new GeometryPrecisionReducer(new PrecisionModel(0.1)).Reduce(g2);

            ToImage(0, r1, r2, res);
        }