Example #1
0
        public void TestSTIsValid()
        {
            using (var db = new PostGisTestDataConnection(TestDatabaseConnectionString))
            {
                const string Wkt1 = "LINESTRING(0 0, 1 1)";
                db.TestGeometries
                .Value(g => g.Id, 1)
                .Value(g => g.Geometry, () => GeometryInput.STGeomFromText(Wkt1))
                .Insert();

                const string Wkt2 = "POLYGON((0 0, 1 1, 1 2, 1 1, 0 0))";
                db.TestGeometries.Value(g => g.Id, 2)
                .Value(g => g.Geometry, () => GeometryInput.STGeomFromText(Wkt2))
                .Insert();

                db.TestGeometries.Value(g => g.Id, 3)
                .Value(g => g.Geometry, () => null)
                .Insert();

                Assert.IsTrue(db.TestGeometries.Where(g => g.Id == 1).Select(g => g.Geometry.STIsValid()).Single());
                Assert.IsFalse(db.TestGeometries.Where(g => g.Id == 2).Select(g => g.Geometry.STIsValid()).Single());
                Assert.IsNull(db.TestGeometries.Where(g => g.Id == 3).Select(g => g.Geometry.STIsValid()).Single());

                Assert.IsTrue(db.Select(() => GeometryValidation.STIsValid(Wkt1)));
                Assert.IsFalse(db.Select(() => GeometryValidation.STIsValid(Wkt2)));
                Assert.IsNull(db.Select(() => GeometryValidation.STIsValid((string)null)));

                Assert.IsTrue(db.Select(() => GeometryValidation.STIsValid(Wkt1, 1)));
                Assert.IsFalse(db.Select(() => GeometryValidation.STIsValid(Wkt2, 1)));
                Assert.IsNull(db.Select(() => GeometryValidation.STIsValid((string)null, 1)));
            }
        }
Example #2
0
        public void TestSTIsValidDetail()
        {
            using (var db = new PostGisTestDataConnection(TestDatabaseConnectionString))
            {
                db.Connection.RegisterPostGisCompositeTypes();
                // or PostGisCompositeTypeMapper.RegisterPostGisCompositeTypesGlobally();

                const string Wkt1 = "LINESTRING(0 0, 1 1)";
                db.TestGeometries
                .Value(g => g.Id, 1)
                .Value(g => g.Geometry, () => GeometryInput.STGeomFromText(Wkt1))
                .Insert();

                const string Wkt2 = "POLYGON((0 0, 1 1, 1 2, 1 1, 0 0))";
                db.TestGeometries
                .Value(g => g.Id, 2)
                .Value(g => g.Geometry, () => GeometryInput.STGeomFromText(Wkt2))
                .Insert();

                db.TestGeometries.Value(g => g.Id, 3).Value(g => g.Geometry, () => null).Insert();

                var d1 = db.TestGeometries
                         .Where(g => g.Id == 1)
                         .Select(g => g.Geometry.STIsValidDetail())
                         .Single();

                Assert.IsTrue(d1.IsValid);
                Assert.IsNull(d1.Reason);
                Assert.IsNull(d1.Location);

                var d2 = db.TestGeometries
                         .Where(g => g.Id == 2)
                         .Select(g => g.Geometry.STIsValidDetail())
                         .Single();

                Assert.IsFalse(d2.IsValid);
                Assert.AreEqual("Self-intersection", d2.Reason);
                Assert.AreEqual("Point", d2.Location.GeometryType);

                Assert.IsNull(
                    db.TestGeometries
                    .Where(g => g.Id == 3)
                    .Select(g => g.Geometry.STIsValidDetail())
                    .Single());

                var d1s = db.Select(() => GeometryValidation.STIsValidDetail(Wkt1));
                Assert.IsTrue(d1s.IsValid);
                Assert.IsNull(d1s.Reason);
                Assert.IsNull(d1s.Location);

                var d2s = db.Select(() => GeometryValidation.STIsValidDetail(Wkt2));
                Assert.IsFalse(d2s.IsValid);
                Assert.AreEqual("Self-intersection", d2s.Reason);
                Assert.AreEqual("Point", d2s.Location.GeometryType);
            }
        }