public void TestSTLength() { using (var db = new PostGisTestDataConnection(TestDatabaseConnectionString)) { const string Ewkt1 = "SRID=2249;LINESTRING(743238 2967416,743238 2967450,743265 2967450, 743265.625 2967416,743238 2967416)"; db.TestGeometries .Value(g => g.Id, 1) .Value(g => g.Geometry, () => GeometryInput.STGeomFromEWKT(Ewkt1)) .Insert(); const string Ewkt2 = "SRID=2249;POINT(0 0)"; db.TestGeometries .Value(g => g.Id, 2) .Value(g => g.Geometry, () => GeometryInput.STGeomFromEWKT(Ewkt2)) .Insert(); db.TestGeometries .Value(g => g.Id, 3) .Value(g => g.Geometry, () => null) .Insert(); var length1 = db.TestGeometries .Where(g => g.Id == 1) .Select(g => g.Geometry.STLength()) .Single(); Assert.AreEqual(122.630744000095, length1.Value, 0.000000000001); var length2 = db.TestGeometries .Where(g => g.Id == 1) .Select(g => g.Geometry.STLength2D()) .Single(); Assert.AreEqual(122.630744000095, length2.Value, 0.000000000001); Assert.AreEqual(0.0, db.TestGeometries .Where(g => g.Id == 2) .Select(g => g.Geometry.STLength()) .Single()); Assert.IsNull( db.TestGeometries.Where(g => g.Id == 3) .Select(g => g.Geometry.STLength()) .Single()); Assert.AreEqual( 122.630744000095, db.Select(() => MeasurementFunctions.STLength(Ewkt1)).Value, 0.000000000001); Assert.AreEqual( 122.630744000095, db.Select(() => MeasurementFunctions.STLength2D(Ewkt1)).Value, 0.000000000001); Assert.IsNull(db.Select(() => MeasurementFunctions.STLength((NTSG)null))); var PolygonGeographyWkt = "SRID=4326;LINESTRING(-72.1260 42.45, -72.1240 42.45666, -72.123 42.1546)"; db.TestGeographies .Value(g => g.Id, 1) .Value(g => g.Geography, () => GeometryInput.STGeographyFromText(PolygonGeographyWkt)) .Insert(); var perimeter1 = db.TestGeographies .Where(g => g.Id == 1) .Select(g => g.Geography.STLength()) .Single(); Assert.AreEqual(34310.57036, perimeter1.Value, 1.0E-5); var perimeter2 = db.TestGeographies .Where(g => g.Id == 1) .Select(g => g.Geography.STLength(false)) .Single(); Assert.AreEqual(34346.20609, perimeter2.Value, 1.0E-5); } }