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); }
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); }