private void TestBugMultipolygonHShuntao() { IGeometryCollection gc1 = null; IGeometryCollection gc2 = null; string file = "BJmultipolygon.shp"; if (!File.Exists(file)) throw new FileNotFoundException(); // Test with Default ShapefileReader try { ShapefileReader sfr = new ShapefileReader(file); gc1 = sfr.ReadAll(); } catch (Exception ex) { throw ex; } //// Test with MyShapefileReader (only for debug purpose!) //try //{ // MyShapeFileReader reader = new MyShapeFileReader(); // gc2 = reader.Read(file); //} //catch (Exception ex) //{ // throw ex; //} //// Check for equality //if (!gc1.EqualsExact(gc2)) // throw new TopologyException("Both geometries must be equals!"); }
public void CascadedUnionError2() { var sf = new ShapefileReader(@"..\..\..\NetTopologySuite.Samples.Shapefiles\error_union.shp"); var geoms = sf.ReadAll(); //var i = 0; //using (var f = new StreamWriter(new FileStream(@"..\..\..\NetTopologySuite.Samples.Shapefiles\error_union.txt", FileMode.Create))) //{ // foreach (var geom in geoms) // { // if (i++ == 0) continue; // f.WriteLine(geom.AsText()); // } //} var u1 = geoms.Union(); var sw = new System.Diagnostics.Stopwatch(); sw.Start(); var u2 = geoms.Union(); sw.Stop(); Console.WriteLine("Unioning {0} geometries in {1}ms", geoms.Count, sw.ElapsedMilliseconds); Assert.IsNotNull(u2); //These number are from JTS-TestBuilder Assert.AreEqual(320, u2.NumGeometries); Assert.AreEqual(37699, u2.NumPoints); }
private static IGeometryCollection ReadShape(string shapepath) { if (!File.Exists(shapepath)) throw new ArgumentException("File " + shapepath + " not found!"); var reader = new ShapefileReader(shapepath); var geometries = reader.ReadAll(); return geometries; }
public void PerformCascadedPolygonUnion() { var reader = new ShapefileReader("tnp_pol.shp"); var collection = reader.ReadAll().Where(e => e is IPolygon).ToList(); var u1 = collection[0]; for (var i = 1; i < collection.Count; i++) u1 = SnapIfNeededOverlayOp.Overlay(u1, collection[i], SpatialFunction.Union); var u2 = CascadedPolygonUnion.Union(collection); if (!u1.Equals(u2)) Assert.Fail("failure"); }
private IGeometry LoadGraphResult() { var path = "graphresult.shp"; Assert.IsTrue(Path.GetExtension(path) == shp); var reader = new ShapefileReader(path); var coll = reader.ReadAll(); Assert.AreEqual(1, coll.Count); var geom = coll.GetGeometryN(0); Assert.IsInstanceOf(typeof(IMultiLineString), geom); var str = geom.GetGeometryN(0); Assert.IsInstanceOf(typeof(ILineString), str); return str; }
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; } }
/// <summary> /// Loads the shapefile as a graph allowing SP analysis to be carried out /// </summary> /// <param name="fileName">The name of the shape file we want to load</param> /// <param name="src"></param> /// <param name="dst"></param> public ILineString TestGraphBuilder2WithSampleGeometries(string fileName, Coordinate src, Coordinate dst) { var reader = new ShapefileReader(fileName); var edges = reader.ReadAll(); return TestGraphBuilder2WithSampleGeometries(edges, src, dst); }
public void BuildGraphFromStradeShapefile() { var shapepath = "strade_fixed.shp"; var count = 703; Assert.IsTrue(File.Exists(shapepath)); var reader = new ShapefileReader(shapepath); var edges = reader.ReadAll(); Assert.IsNotNull(edges); Assert.IsInstanceOf(typeof (GeometryCollection), edges); Assert.AreEqual(count, edges.NumGeometries); Coordinate startCoord = new Coordinate(2317300d, 4843961d); Coordinate endCoord = new Coordinate(2322739d, 4844539d); var startFound = false; var endFound = false; var builder = new GraphBuilder2(true); foreach (IMultiLineString mlstr in edges.Geometries) { Assert.AreEqual(1, mlstr.NumGeometries); var str = mlstr.GetGeometryN(0) as ILineString; Assert.IsNotNull(str); Assert.IsTrue(builder.Add(str)); if (!startFound) { var coords = new List<Coordinate>(str.Coordinates); if (coords.Contains(startCoord)) startFound = true; } if (!endFound) { var coords = new List<Coordinate>(str.Coordinates); if (coords.Contains(endCoord)) endFound = true; } } builder.Initialize(); Assert.IsTrue(startFound); Assert.IsTrue(endFound); var path = builder.Perform(startCoord, endCoord); Assert.IsNotNull(path); SaveGraphResult(path); var reverse = builder.Perform(startCoord, endCoord); Assert.IsNotNull(reverse); Assert.AreEqual(path, reverse.Reverse()); }
public void BuildGraphFromMinimalGraphShapefile() { const string shapepath = "minimalgraph.shp"; const int count = 15; Assert.IsTrue(File.Exists(shapepath)); var reader = new ShapefileReader(shapepath); var edges = reader.ReadAll(); Assert.IsNotNull(edges); Assert.IsInstanceOf(typeof (GeometryCollection), edges); Assert.AreEqual(count, edges.NumGeometries); var startls = edges.GetGeometryN(0).GetGeometryN(0) as ILineString; Assert.IsNotNull(startls); var endls = edges.GetGeometryN(5).GetGeometryN(0) as ILineString; ; Assert.IsNotNull(endls); var builder = new GraphBuilder2(true); foreach (IMultiLineString mlstr in edges.Geometries) { Assert.AreEqual(1, mlstr.NumGeometries); var str = mlstr.GetGeometryN(0) as ILineString; Assert.IsNotNull(str); Assert.IsTrue(builder.Add(str)); } builder.Initialize(); var path = builder.Perform(startls.StartPoint, endls.EndPoint); Assert.IsNotNull(path); }
public void BuildGraphFromCompleteGraphShapefile() { const string shapepath = "graph.shp"; const int count = 1179; Assert.IsTrue(File.Exists(shapepath)); var reader = new ShapefileReader(shapepath); var edges = reader.ReadAll(); Assert.IsNotNull(edges); Assert.IsInstanceOf(typeof (GeometryCollection), edges); Assert.AreEqual(count, edges.NumGeometries); var startls = edges.GetGeometryN(515).GetGeometryN(0) as ILineString; Assert.IsNotNull(startls); var startPoint = startls.EndPoint; Assert.AreEqual(2317300d, startPoint.X); Assert.AreEqual(4843961d, startPoint.Y); var endls = edges.GetGeometryN(141).GetGeometryN(0) as ILineString; ; Assert.IsNotNull(endls); var endPoint = endls.StartPoint; Assert.AreEqual(2322739d, endPoint.X); Assert.AreEqual(4844539d, endPoint.Y); var builder = new GraphBuilder2(true); foreach (IMultiLineString mlstr in edges.Geometries) { Assert.AreEqual(1, mlstr.NumGeometries); var str = mlstr.GetGeometryN(0) as ILineString; Assert.IsNotNull(str); Assert.IsTrue(builder.Add(str)); } builder.Initialize(); var path = builder.Perform(startPoint, endPoint); Assert.IsNotNull(path); SaveGraphResult(path); var reverse = builder.Perform(endPoint, startPoint); Assert.IsNotNull(reverse); Assert.AreEqual(path, reverse.Reverse()); }
public void BuildGraphFromCompleteGraphShapefile() { var shapepath = "graph.shp"; var count = 1179; Assert.IsTrue(File.Exists(shapepath), string.Format("File not found: '{0}'", shapepath)); var reader = new ShapefileReader(shapepath); var edges = reader.ReadAll(); Assert.IsNotNull(edges); Assert.IsInstanceOf(typeof(GeometryCollection), edges); Assert.AreEqual(count, edges.NumGeometries); // Insert arbitrary userdata for (var i = 0; i < count; i++) { var g = edges.GetGeometryN(i) as IMultiLineString; Assert.IsNotNull(g); var ls = g.GetGeometryN(0) as ILineString; Assert.IsNotNull(ls); Assert.IsNull(ls.UserData); ls.UserData = i; Assert.IsNotNull(ls.UserData); } var startls = edges.GetGeometryN(515).GetGeometryN(0) as ILineString; Assert.IsNotNull(startls); var startPoint = startls.EndPoint; Assert.AreEqual(2317300d, startPoint.X); Assert.AreEqual(4843961d, startPoint.Y); var endls = edges.GetGeometryN(141).GetGeometryN(0) as ILineString; ; Assert.IsNotNull(endls); var endPoint = endls.StartPoint; Assert.AreEqual(2322739d, endPoint.X); Assert.AreEqual(4844539d, endPoint.Y); var finder = new PathFinder(true); foreach (IMultiLineString mlstr in edges.Geometries) { Assert.AreEqual(1, mlstr.NumGeometries); var str = mlstr.GetGeometryN(0) as ILineString; Assert.IsNotNull(str); Assert.IsNotNull(str.UserData); Assert.IsTrue(finder.Add(str)); } finder.Initialize(); var expectedResultCount = 8; var path = finder.Find(startPoint, endPoint); Assert.IsNotNull(path); Assert.IsInstanceOf(typeof (IMultiLineString), path); var strings = (IMultiLineString) path; Assert.AreEqual(expectedResultCount, strings.NumGeometries); foreach (var g in strings.Geometries) { Assert.IsNotNull(g.UserData); Console.WriteLine("{0} : {1}", g.UserData, g); } var reversedPath = finder.Find(endPoint, startPoint); Assert.IsNotNull(reversedPath); Assert.IsInstanceOf(typeof(IMultiLineString), reversedPath); var reversedStrings = (IMultiLineString) reversedPath; Assert.AreEqual(expectedResultCount, reversedStrings.NumGeometries); foreach (var g in reversedStrings.Geometries) { Assert.IsNotNull(g.UserData); Console.WriteLine("{0} : {1}", g.UserData, g); } for (var i = 0; i < expectedResultCount; i++) { var item = strings.GetGeometryN(i); var itemReversed = strings.GetGeometryN(expectedResultCount - 1 - i); Assert.AreNotEqual(item.UserData, itemReversed.UserData); Assert.AreNotEqual(item, itemReversed); } }
private void TestBugCimino() { try { string file = "countryCopy.shp"; if (!File.Exists(file)) throw new FileNotFoundException(); ShapefileReader sfr = new ShapefileReader(file); IGeometryCollection gc = sfr.ReadAll(); for (int i = 0; i < gc.NumGeometries; i++) Console.WriteLine(i + " " + gc.Geometries[i].Envelope); // IsValidOp.CheckShellsNotNested molto lento nell'analisi di J == 7 (Poligono con 11600 punti) var write = Path.Combine(Path.GetTempPath(), "copy_countryCopy"); var sfw = new ShapefileWriter(gc.Factory); sfw.Write(write, gc); Console.WriteLine("Write Complete!"); } catch (Exception ex) { throw ex; } }
private static IGeometry ReadGeometriesFromShapefile(String filename, IGeometryFactory geomFact) { var shpfile = new ShapefileReader(filename, geomFact); var result = shpfile.ReadAll(); return result; }