Skip to content

Commit b7a304b

Browse files
committed
Fixed return type for STIsValid method; implemented STIsValidReason method
1 parent a98af30 commit b7a304b

File tree

3 files changed

+35
-18
lines changed

3 files changed

+35
-18
lines changed

LinqToDBPostGisNetTopologySuite.Tests/GeometryAccessorsTests.cs

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -202,21 +202,6 @@ public void TestSTIsSimple()
202202
}
203203
}
204204

205-
[Test]
206-
public void TestSTIsValid()
207-
{
208-
using (var db = new PostGisTestDataConnection(TestDatabaseConnectionString))
209-
{
210-
const string wkt1 = "LINESTRING(0 0, 1 1)";
211-
db.TestGeometries.Value(g => g.Id, 1).Value(p => p.Geometry, () => GeometryInput.STGeomFromText(wkt1)).Insert();
212-
const string wkt2 = "POLYGON((0 0, 1 1, 1 2, 1 1, 0 0))";
213-
db.TestGeometries.Value(g => g.Id, 2).Value(p => p.Geometry, () => GeometryInput.STGeomFromText(wkt2)).Insert();
214-
215-
Assert.IsTrue(db.TestGeometries.Where(g => g.Id == 1).Select(g => g.Geometry.STIsValid()).Single());
216-
Assert.IsFalse(db.TestGeometries.Where(g => g.Id == 2).Select(g => g.Geometry.STIsValid()).Single());
217-
}
218-
}
219-
220205
[Test]
221206
public void TestSTNPoints()
222207
{

LinqToDBPostGisNetTopologySuite.Tests/GeometryValidationTests.cs

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,30 @@ public void TestSTIsValid()
2424
{
2525
const string wkt1 = "LINESTRING(0 0, 1 1)";
2626
db.TestGeometries.Value(g => g.Id, 1).Value(p => p.Geometry, () => GeometryInput.STGeomFromText(wkt1)).Insert();
27-
2827
const string wkt2 = "POLYGON((0 0, 1 1, 1 2, 1 1, 0 0))";
2928
db.TestGeometries.Value(g => g.Id, 2).Value(p => p.Geometry, () => GeometryInput.STGeomFromText(wkt2)).Insert();
29+
db.TestGeometries.Value(g => g.Id, 3).Value(p => p.Geometry, () => null).Insert();
3030

3131
Assert.IsTrue(db.TestGeometries.Where(g => g.Id == 1).Select(g => g.Geometry.STIsValid()).Single());
3232
Assert.IsFalse(db.TestGeometries.Where(g => g.Id == 2).Select(g => g.Geometry.STIsValid()).Single());
33+
Assert.IsNull(db.TestGeometries.Where(g => g.Id == 3).Select(g => g.Geometry.STIsValid()).Single());
34+
}
35+
}
36+
37+
[Test]
38+
public void TestSTIsValidReason()
39+
{
40+
using (var db = new PostGisTestDataConnection(TestDatabaseConnectionString))
41+
{
42+
const string wkt1 = "LINESTRING(0 0, 1 1)";
43+
db.TestGeometries.Value(g => g.Id, 1).Value(p => p.Geometry, () => GeometryInput.STGeomFromText(wkt1)).Insert();
44+
const string wkt2 = "POLYGON((0 0, 1 1, 1 2, 1 1, 0 0))";
45+
db.TestGeometries.Value(g => g.Id, 2).Value(p => p.Geometry, () => GeometryInput.STGeomFromText(wkt2)).Insert();
46+
db.TestGeometries.Value(g => g.Id, 3).Value(p => p.Geometry, () => null).Insert();
47+
48+
Assert.AreEqual("Valid Geometry", db.TestGeometries.Where(g => g.Id == 1).Select(g => g.Geometry.STIsValidReason()).Single());
49+
Assert.AreEqual("Self-intersection[0 0]", db.TestGeometries.Where(g => g.Id == 2).Select(g => g.Geometry.STIsValidReason()).Single());
50+
Assert.IsNull(db.TestGeometries.Where(g => g.Id == 3).Select(g => g.Geometry.STIsValidReason()).Single());
3351
}
3452
}
3553
}

LinqToDBPostGisNetTopologySuite/GeometryValidation.cs

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,29 @@ namespace LinqToDBPostGisNetTopologySuite
1515
public static class GeometryValidation
1616
{
1717
/// <summary>
18-
/// Returns true if geometry value is well-formed in 2D according to the OGC rules.
18+
/// Returns true if geometry value is well-formed in 2D according to the OGC rules.
1919
/// </summary>
2020
/// <remarks>
2121
/// See https://postgis.net/docs/manual-3.0/ST_IsValid.html
2222
/// </remarks>
2323
/// <param name="geometry">Input geometry</param>
2424
/// <returns>Is valid</returns>
2525
[Sql.Function("ST_IsValid", ServerSideOnly = true)]
26-
public static bool STIsValid(this NTSG geometry)
26+
public static bool? STIsValid(this NTSG geometry) // TODO: flags version
27+
{
28+
throw new InvalidOperationException();
29+
}
30+
31+
/// <summary>
32+
/// Returns text stating if a geometry is valid or not an if not valid, a reason why.
33+
/// </summary>
34+
/// <remarks>
35+
/// See https://postgis.net/docs/manual-3.0/ST_IsValidReason.html
36+
/// </remarks>
37+
/// <param name="geometry">Input geometry</param>
38+
/// <returns>Valid reason</returns>
39+
[Sql.Function("ST_IsValidReason", ServerSideOnly = true)]
40+
public static string STIsValidReason(this NTSG geometry) // TODO: flags version
2741
{
2842
throw new InvalidOperationException();
2943
}

0 commit comments

Comments
 (0)