[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/SharpMap/SharpMap/main/Examples/ExampleCodeSnippets/NtsTests.cs [Back]  [Original]

using System.Data.OleDb;
using SharpMap.Data.Providers;

namespace ExampleCodeSnippets
{
    [NUnit.Framework.TestFixture]
    public class NtsTests
    {
        [NUnit.Framework.OneTimeSetUp]
        public void OneTimeSetUp()
        {
            GeoAPI.GeometryServiceProvider.Instance =
                NetTopologySuite.NtsGeometryServices.Instance;
        }

        [NUnit.Framework.Test]
        public void TestDiscussionNtsAndBaffeled()
        {
            var reader = new NetTopologySuite.IO.WKTReader();
            var poly = reader.Read(
                @"POLYGON ((428999.76819468878 360451.93329044303, 428998.25517286535 360420.80827007542,
429023.1119599645 360406.75878171506, 429004.52340613387 360451.71714446822, 
429004.52340613387 360451.71714446822, 428999.76819468878 360451.93329044303))");

            var points = new System.Collections.Generic.List(new []
                {
                    reader.Factory.CreatePoint(new GeoAPI.Geometries.Coordinate(429012.5, 360443.18)),
                    reader.Factory.CreatePoint(new GeoAPI.Geometries.Coordinate(429001.59, 360446.98)),
                    reader.Factory.CreatePoint(new GeoAPI.Geometries.Coordinate(429003.31, 360425.45)),
                    reader.Factory.CreatePoint(new GeoAPI.Geometries.Coordinate(429016.9, 360413.04))
                });

            var inside = new System.Collections.Generic.List(new[] {false, true, true, true});

            for (var i = 0; i < points.Count; i++)
            {
                NUnit.Framework.Assert.AreEqual(inside[i], poly.Intersects(points[i]));
            }

            var prepPoly = NetTopologySuite.Geometries.Prepared.PreparedGeometryFactory.Prepare(poly);
            for (var i = 0; i < points.Count; i++)
            {
                NUnit.Framework.Assert.AreEqual(inside[i], prepPoly.Intersects(points[i]));
            }
        }

        [NUnit.Framework.Test]
        public void TestDiscussionNtsAndBaffeledOleDb()
        {
            var reader = new NetTopologySuite.IO.WKTReader();
            var poly = reader.Read(
                @"POLYGON ((428999.76819468878 360451.93329044303, 428998.25517286535 360420.80827007542,
429023.1119599645 360406.75878171506, 429004.52340613387 360451.71714446822, 
429004.52340613387 360451.71714446822, 428999.76819468878 360451.93329044303))");

            var table = WriteCsv();

            var p = new DbPoint(OleDbFactory.Instance, 
                "Provider=" + Properties.Settings.Default.OleDbProvider + ";Data Source=\"" + System.IO.Path.GetTempPath() + "\";" +
                "Extended Properties=\"text;HDR=Yes;FMT=Delimited\"", table, "ID", "X", "Y");

            var extents = p.GetExtents();
            NUnit.Framework.Assert.AreEqual(4, p.GetFeatureCount());
            p.DefinitionQuery = "Name='One'";
            NUnit.Framework.Assert.AreEqual(1, p.GetFeatureCount());
            var fdr = p.GetFeature(1);
            NUnit.Framework.Assert.AreEqual(1, (int)fdr[0]);
            p.DefinitionQuery = string.Empty;

            var fds = new SharpMap.Data.FeatureDataSet();
            p.ExecuteIntersectionQuery(extents, fds);
            NUnit.Framework.Assert.AreEqual(1, fds.Tables.Count);
            NUnit.Framework.Assert.AreEqual(4, fds.Tables[0].Rows.Count);
            fds.Tables.Clear();

            p.ExecuteIntersectionQuery(poly, fds);
            NUnit.Framework.Assert.AreEqual(1, fds.Tables.Count);
            NUnit.Framework.Assert.AreEqual(3, fds.Tables[0].Rows.Count);

            var inside = new System.Collections.Generic.List(new[] { false, true, true, true });
            NUnit.Framework.Assert.AreEqual(System.Linq.Enumerable.Count(inside, (b) => b == true), fds.Tables[0].Rows.Count);

            var ext = p.GetExtents();
            var oids = p.GetObjectIDsInView(ext);
            NUnit.Framework.Assert.AreEqual(4, oids.Count);
            
            System.IO.File.Delete(System.IO.Path.Combine(System.IO.Path.GetTempPath(), table));
        }

        private static string WriteCsv()
        {
            var filename = System.IO.Path.GetTempFileName();
            filename = System.IO.Path.ChangeExtension(filename, ".csv");

            var schemaFile = System.IO.Path.Combine(System.IO.Path.GetTempPath(), "schema.ini");
            if (System.IO.File.Exists(schemaFile)) System.IO.File.Delete(schemaFile);
            using (var sr = new System.IO.StreamWriter(System.IO.File.OpenWrite(schemaFile)))
            {
                sr.WriteLine("[{0}]", System.IO.Path.GetFileName(filename));
                sr.WriteLine("Format=Delimited(;)");
            }

            using (var sr = new System.IO.StreamWriter(System.IO.File.OpenWrite(filename)))
            {
                sr.WriteLine("ID;Name;X;Y");
                sr.WriteLine("1;One;{0};{1}", 429012.5,360443.18);
                sr.WriteLine("2;Two;{0};{1}",429001.59,360446.98);
                sr.WriteLine("3;Three;{0};{1}",429003.31,360425.45);
                sr.WriteLine("4;Four;{0};{1}",429016.9,360413.04);
            }

            return System.IO.Path.GetFileName(filename);
        }
    }
}

Web Proxy Viewer  |  New URL  |  Original Page