Skip to content

Commit df9c868

Browse files
committed
Fixed Measurement Functions return type (nullable double)
1 parent b7a304b commit df9c868

File tree

2 files changed

+45
-21
lines changed

2 files changed

+45
-21
lines changed

LinqToDBPostGisNetTopologySuite.Tests/MeasurementFunctionsTests.cs

Lines changed: 41 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,20 @@ public void TestSTArea()
2525
{
2626
using (var db = new PostGisTestDataConnection(TestDatabaseConnectionString))
2727
{
28-
const string ewkt = "SRID=2249;POLYGON((743238 2967416,743238 2967450, 743265 2967450,743265.625 2967416,743238 2967416))";
29-
db.TestGeometries.Value(g => g.Id, 1).Value(p => p.Geometry, () => GeometryInput.STGeomFromEWKT(ewkt)).Insert();
28+
const string ewkt1 = "SRID=2249;POLYGON((743238 2967416,743238 2967450, 743265 2967450,743265.625 2967416,743238 2967416))";
29+
db.TestGeometries.Value(g => g.Id, 1).Value(p => p.Geometry, () => GeometryInput.STGeomFromEWKT(ewkt1)).Insert();
30+
const string wkt2 = "LINESTRING(0 0, 1 1)";
31+
db.TestGeometries.Value(g => g.Id, 2).Value(p => p.Geometry, () => GeometryInput.STGeomFromText(wkt2)).Insert();
32+
db.TestGeometries.Value(g => g.Id, 3).Value(p => p.Geometry, () => null).Insert();
33+
34+
var area1 = db.TestGeometries.Where(g => g.Id == 1).Select(g => g.Geometry.STArea()).Single();
35+
Assert.AreEqual(928.625, area1);
36+
37+
var area2 = db.TestGeometries.Where(g => g.Id == 2).Select(g => g.Geometry.STArea()).Single();
38+
Assert.AreEqual(0.0, area2);
3039

31-
var area = db.TestGeometries.Select(g => g.Geometry.STArea()).Single();
32-
Assert.AreEqual(928.625, area);
40+
var area3 = db.TestGeometries.Where(g => g.Id == 3).Select(g => g.Geometry.STArea()).Single();
41+
Assert.IsNull(area3);
3342
}
3443
}
3544

@@ -39,8 +48,8 @@ public void TestSTDistance()
3948
using (var db = new PostGisTestDataConnection(TestDatabaseConnectionString))
4049
{
4150
var point = new NTSG.Point(new NTSG.Coordinate(-72.1235, 42.3521)) { SRID = SRID4326 };
42-
var lineString = new NTSG.LineString(new[] { new NTSG.Coordinate(-72.1260, 42.45), new NTSG.Coordinate(-72.123, 42.1546) }) { SRID = SRID4326 };
4351
db.Insert(new TestGeometryEntity(1, point));
52+
var lineString = new NTSG.LineString(new[] { new NTSG.Coordinate(-72.1260, 42.45), new NTSG.Coordinate(-72.123, 42.1546) }) { SRID = SRID4326 };
4453
db.Insert(new TestGeometryEntity(2, lineString));
4554

4655
// Geometry example - units in planar degrees 4326 is WGS 84 long lat, units are degrees.
@@ -56,6 +65,9 @@ public void TestSTDistance()
5665
Assert.AreEqual(2, distances3857.Count);
5766
Assert.AreEqual(0.0, distances3857[0]);
5867
Assert.AreEqual(167.441410065196, distances3857[1], 1.0E9);
68+
69+
var nullDistance = db.TestGeometries.Where(g => g.Id == 1).Select(g => g.Geometry.STDistance(null)).Single();
70+
Assert.IsNull(nullDistance);
5971
}
6072
}
6173

@@ -64,12 +76,20 @@ public void TestSTLength()
6476
{
6577
using (var db = new PostGisTestDataConnection(TestDatabaseConnectionString))
6678
{
67-
const string ewkt = "SRID=2249;LINESTRING(743238 2967416,743238 2967450,743265 2967450, 743265.625 2967416,743238 2967416)";
68-
db.TestGeometries.Value(g => g.Id, 1).Value(p => p.Geometry, () => GeometryInput.STGeomFromEWKT(ewkt)).Insert();
79+
const string ewkt1 = "SRID=2249;LINESTRING(743238 2967416,743238 2967450,743265 2967450, 743265.625 2967416,743238 2967416)";
80+
db.TestGeometries.Value(g => g.Id, 1).Value(p => p.Geometry, () => GeometryInput.STGeomFromEWKT(ewkt1)).Insert();
81+
const string ewkt2 = "SRID=2249;POINT(0 0)";
82+
db.TestGeometries.Value(g => g.Id, 2).Value(p => p.Geometry, () => GeometryInput.STGeomFromEWKT(ewkt2)).Insert();
83+
db.TestGeometries.Value(g => g.Id, 3).Value(p => p.Geometry, () => null).Insert();
84+
85+
var length1 = db.TestGeometries.Where(g => g.Id == 1).Select(g => g.Geometry.STLength()).Single();
86+
Assert.AreEqual(122.630744000095, length1, 0.000000000001);
6987

70-
var length = db.TestGeometries.Select(g => g.Geometry.STLength()).Single();
88+
var length2 = db.TestGeometries.Where(g => g.Id == 2).Select(g => g.Geometry.STLength()).Single();
89+
Assert.AreEqual(0.0, length2);
7190

72-
Assert.AreEqual(122.630744000095, length, 0.000000000001);
91+
var length3 = db.TestGeometries.Where(g => g.Id == 3).Select(g => g.Geometry.STLength()).Single();
92+
Assert.IsNull(length3);
7393
}
7494
}
7595

@@ -95,17 +115,21 @@ public void TestSTPerimeter()
95115
763104.471273676 2949418.44119003)))";
96116
db.TestGeometries.Value(g => g.Id, 2).Value(p => p.Geometry, () => GeometryInput.STGeomFromEWKT(ewkt2)).Insert();
97117

98-
var perimeter1 = db.TestGeometries
99-
.Where(g => g.Id == 1)
100-
.Select(g => g.Geometry.STPerimeter())
101-
.Single();
118+
const string ewkt3 = "SRID=2249;POINT(0 0)";
119+
db.TestGeometries.Value(g => g.Id, 3).Value(p => p.Geometry, () => GeometryInput.STGeomFromEWKT(ewkt3)).Insert();
120+
db.TestGeometries.Value(g => g.Id, 4).Value(p => p.Geometry, () => null).Insert();
121+
122+
var perimeter1 = db.TestGeometries.Where(g => g.Id == 1).Select(g => g.Geometry.STPerimeter()).Single();
102123
Assert.AreEqual(122.630744000095, perimeter1, 0.000000000001);
103124

104-
var perimeter2 = db.TestGeometries
105-
.Where(g => g.Id == 2)
106-
.Select(g => g.Geometry.STPerimeter())
107-
.Single();
125+
var perimeter2 = db.TestGeometries.Where(g => g.Id == 2).Select(g => g.Geometry.STPerimeter()).Single();
108126
Assert.AreEqual(845.227713366825, perimeter2, 0.000000000001);
127+
128+
var perimeter3 = db.TestGeometries.Where(g => g.Id == 3).Select(g => g.Geometry.STPerimeter()).Single();
129+
Assert.AreEqual(0.0, perimeter3);
130+
131+
var perimeter4 = db.TestGeometries.Where(g => g.Id == 4).Select(g => g.Geometry.STPerimeter()).Single();
132+
Assert.IsNull(perimeter4);
109133
}
110134
}
111135
}

LinqToDBPostGisNetTopologySuite/MeasurementFunctions.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public static class MeasurementFunctions
2323
/// <param name="geometry">Input geometry</param>
2424
/// <returns>Area</returns>
2525
[Sql.Function("ST_Area", ServerSideOnly = true)]
26-
public static double STArea(this NTSG geometry)
26+
public static double? STArea(this NTSG geometry)
2727
{
2828
throw new InvalidOperationException();
2929
}
@@ -38,7 +38,7 @@ public static double STArea(this NTSG geometry)
3838
/// <param name="other">Input geometry 2</param>
3939
/// <returns>Distance between two geometries</returns>
4040
[Sql.Function("ST_Distance", ServerSideOnly = true)]
41-
public static double STDistance(this NTSG geometry, NTSG other)
41+
public static double? STDistance(this NTSG geometry, NTSG other)
4242
{
4343
throw new InvalidOperationException();
4444
}
@@ -52,7 +52,7 @@ public static double STDistance(this NTSG geometry, NTSG other)
5252
/// <param name="geometry">Input geometry</param>
5353
/// <returns>Length</returns>
5454
[Sql.Function("ST_Length", ServerSideOnly = true)]
55-
public static double STLength(this NTSG geometry)
55+
public static double? STLength(this NTSG geometry)
5656
{
5757
throw new InvalidOperationException();
5858
}
@@ -66,7 +66,7 @@ public static double STLength(this NTSG geometry)
6666
/// <param name="geometry">Input geometry</param>
6767
/// <returns>Perimeter</returns>
6868
[Sql.Function("ST_Perimeter", ServerSideOnly = true)]
69-
public static double STPerimeter(this NTSG geometry)
69+
public static double? STPerimeter(this NTSG geometry)
7070
{
7171
throw new InvalidOperationException();
7272
}

0 commit comments

Comments
 (0)