public void check_difference_results_with_fixed_precision() { GeometryFactory precisionModel = new GeometryFactory(new PrecisionModel(100)); WKTReader reader = new WKTReader(precisionModel); IGeometry p1 = reader.Read(@"POLYGON ((504927.9 6228865.64, 504969.88 6228833.89, 504980.82 6228861.76, 504927.9 6228865.64))"); IGeometry p2 = reader.Read(@"POLYGON ((504927.9 6228865.64, 504951.14 6228848.06, 504957.42 6228863.47, 504927.9 6228865.64))"); IGeometry test = p1.Difference(p2); Assert.That(test, Is.Not.Null); Assert.That(test.IsEmpty, Is.False); const string expected = @"POLYGON ((504927.9 6228865.64, 504980.82 6228861.76, 504969.88 6228833.89, 504951.14 6228848.06, 504957.42 6228863.47, 504927.9 6228865.64))"; var res = reader.Read(expected); res.Normalize(); test.Normalize(); Console.WriteLine(test.AsText()); Console.WriteLine(res.AsText()); var hd = new HausdorffSimilarityMeasure(); var resD = hd.Measure(test, res); Assert.That(1-resD, Is.LessThan(1e7)); }
private static void DoTest(IGeometryCollection geomsWrite, Ordinates ordinates, bool testGetOrdinate = true) { string fileName = string.Empty; try { fileName = Path.GetTempFileName(); fileName = Path.ChangeExtension(fileName, "shp"); ShapefileWriter.WriteGeometryCollection(fileName, geomsWrite); var reader = new ShapefileReader(fileName, ShapeFileShapeFactory.FactoryRead); var geomsRead = reader.ReadAll(); // This tests x- and y- values if (!geomsWrite.EqualsExact(geomsRead)) { Assert.AreEqual(geomsWrite.NumGeometries, geomsRead.NumGeometries); // // This akward test is necessary since EqualsTopologically throws currently exceptions var equal = true; for (var i = 0; i < geomsRead.NumGeometries; i++) { var gw = geomsWrite.GetGeometryN(i); var gr = geomsRead.GetGeometryN(i); if (gw.IsEmpty && gr.IsEmpty) { if ((gw is ILineal && gr is ILineal) || (gw is IPolygonal && gr is IPolygonal)) { // suppose these are equal } else { Console.WriteLine(string.Format("Geometries don't match at index {0}", i)); Console.WriteLine(string.Format(" written: {0}", gw.AsText())); Console.WriteLine(string.Format(" read : {0}", gr.AsText())); equal = false; Assert.IsTrue(equal, "Differenced found in geometries written and read!"); } } else if (!gw.EqualsExact(gr)) { var hsm = new HausdorffSimilarityMeasure().Measure(gw, gr); var asm = new AreaSimilarityMeasure().Measure(gw, gr); var smc = SimilarityMeasureCombiner.Combine(hsm, asm); if (!gw.EqualsNormalized(gr) || (1d - smc) > 1e-7) { Console.WriteLine(string.Format("Geometries don't match at index {0}", i)); Console.WriteLine(string.Format(" written: {0}", gw.AsText())); Console.WriteLine(string.Format(" read : {0}", gr.AsText())); equal = false; Assert.IsTrue(equal, "Differenced found in geometries written and read!"); } } } //For polygons this has a tendency to fail, since the polygonhandler might rearrange the whole thing if (testGetOrdinate) { if ((ordinates & Ordinates.Z) == Ordinates.Z) { var writeZ = geomsWrite.GetOrdinates(Ordinate.Z); var readZ = geomsRead.GetOrdinates(Ordinate.Z); Assert.IsTrue(ArraysEqual(writeZ, readZ)); } if ((ordinates & Ordinates.M) == Ordinates.M) { var writeM = geomsWrite.GetOrdinates(Ordinate.M); var readM = geomsRead.GetOrdinates(Ordinate.M); Assert.IsTrue(ArraysEqual(writeM, readM)); } } } // delete sample files File.Delete(fileName); File.Delete(Path.ChangeExtension(fileName, "shx")); File.Delete(Path.ChangeExtension(fileName, "dbf")); } catch (AssertionException ex) { Console.WriteLine("Failed test with {0}", ordinates); Console.WriteLine(ex.Message); Console.WriteLine(" Testfile '{0}' not deleted!", fileName); throw; } }