public void TestSTBuffer() { using (var db = new PostGisTestDataConnection(TestDatabaseConnectionString)) { var point1 = db.Select(() => GeometryInput.STGeomFromText("POINT(100 90)")); var buffer1 = db.Select(() => GeometryProcessing.STBuffer(point1, 50, "quad_segs=8").STGeometryType()); Assert.AreEqual("ST_Polygon", buffer1); var buffer2 = db.Select(() => GeometryProcessing.STBuffer(point1, 50).STNPoints()); Assert.AreEqual(33, buffer2); var buffer3 = db.Select(() => GeometryProcessing.STBuffer(point1, 50, 2).STNPoints()); Assert.AreEqual(9, buffer3); Assert.IsNull(db.Select(() => GeometryProcessing.STBuffer(null, 0))); Assert.IsNull(db.Select(() => GeometryProcessing.STBuffer(null, 0, null))); db.TestGeographies .Value(g => g.Id, 1) .Value(g => g.Geography, () => GeometryInput.STGeogFromText("POINT(0 0)")) .Insert(); var geographyPointBufferArea = db.TestGeographies .Where(g => g.Id == 1) .Select(g => g.Geography.STBuffer(50.0).STArea()) .Single(); Assert.AreEqual(7788.324, geographyPointBufferArea.Value, 1.0E-3); } }
public void TestSTGeographyFromText() { using (var db = new PostGisTestDataConnection(TestDatabaseConnectionString)) { const string Wkt1 = "POINT(177.0092 38.889588)"; var geography11 = db.Select(() => GeometryInput.STGeographyFromText(Wkt1)); Assert.IsNotNull(geography11); Assert.AreEqual(SRID4326, geography11.SRID); Assert.AreEqual("Point", geography11.GeometryType); Assert.AreEqual(177.0092, geography11.Coordinates[0].X, 1.0E-4); Assert.AreEqual(38.889588, geography11.Coordinates[0].Y, 1.0E-6); db.TestGeographies .Value(g => g.Id, 1) .Value(g => g.Geography, () => GeometryInput.STGeographyFromText(Wkt1)) .Insert(); var geography12 = db.TestGeographies .Where(g => g.Id == 1) .Select(g => g.Geography) .Single(); Assert.IsNotNull(geography12); Assert.AreEqual(SRID4326, geography12.SRID); Assert.AreEqual("Point", geography12.GeometryType); Assert.AreEqual(177.0092, geography12.Coordinates[0].X, 1.0E-4); Assert.AreEqual(38.889588, geography12.Coordinates[0].Y, 1.0E-6); const string Wkt2 = "SRID=4267;POINT(-77.0092 38.889588)"; var geography21 = db.Select(() => GeometryInput.STGeographyFromText(Wkt2)); Assert.IsNotNull(geography21); Assert.AreEqual(4267, geography21.SRID); Assert.AreEqual("Point", geography21.GeometryType); Assert.AreEqual(-77.0092, geography21.Coordinates[0].X, 1.0E-4); Assert.AreEqual(38.889588, geography21.Coordinates[0].Y, 1.0E-6); // Test for alias ST_GeogFromText = ST_GeographyFromText Assert.AreEqual( db.Select(() => GeometryInput.STGeographyFromText(Wkt2).STAsEWKT()), db.Select(() => GeometryInput.STGeogFromText(Wkt2).STAsEWKT())); Assert.IsNull(db.Select(() => GeometryInput.STGeographyFromText(null))); Assert.IsNull(db.Select(() => GeometryInput.STGeogFromText(null))); } }
public void TestSTAsBinary() { using (var db = new PostGisTestDataConnection(TestDatabaseConnectionString)) { const string Wkt1 = "POINT(2.0 4.0)"; db.TestGeometries.Value(g => g.Id, 1).Value(g => g.Geometry, () => GeometryInput.STGeomFromText(Wkt1)).Insert(); var wkb = db.TestGeometries.Select(g => g.Geometry.STAsBinary()).Single(); Assert.AreEqual(21, wkb.Length); Assert.AreEqual(1, wkb[0]); // TODO: depends on environment endianness Assert.AreEqual(1, BitConverter.ToUInt32(wkb, 1)); Assert.AreEqual(2, BitConverter.ToDouble(wkb, 5)); Assert.AreEqual(4, BitConverter.ToDouble(wkb, 13)); const string Wkt2 = "POLYGON((0 0,0 1,1 1,1 0,0 0))"; var wkbLittleEndian = db.Select(() => GeometryInput.STGeometryFromText(Wkt2).STAsBinary(EndiannessEncoding.LittleEndian)); Assert.AreEqual(1, wkbLittleEndian[0]); Assert.AreEqual(3, wkbLittleEndian[1]); var wkbBigEndian = db.Select(() => GeometryInput.STGeometryFromText(Wkt2).STAsBinary(EndiannessEncoding.BigEndian)); Assert.AreEqual(0, wkbBigEndian[0]); Assert.AreEqual(3, wkbBigEndian[4]); Assert.IsNull(db.Select(() => GeometryOutput.STAsBinary(null, EndiannessEncoding.BigEndian))); // geography db.TestGeographies .Value(g => g.Id, 1) .Value(g => g.Geography, () => GeometryInput.STGeogFromText(Wkt1)) .Insert(); var wkbGeographyPoint = db.TestGeographies .Where(g => g.Id == 1) .Select(g => g.Geography.STAsBinary()) .Single(); Assert.AreEqual(21, wkbGeographyPoint.Length); Assert.AreEqual(1, wkbGeographyPoint[0]); // TODO: depends on environment endianness Assert.AreEqual(1, BitConverter.ToUInt32(wkbGeographyPoint, 1)); Assert.AreEqual(2, BitConverter.ToDouble(wkbGeographyPoint, 5)); Assert.AreEqual(4, BitConverter.ToDouble(wkbGeographyPoint, 13)); } }
public void TestSTCentroid() { using (var db = new PostGisTestDataConnection(TestDatabaseConnectionString)) { const string Wkt1 = "MULTIPOINT ( -1 0, -1 2, -1 3, -1 4, -1 7, 0 1, 0 3, 1 1, 2 0, 6 0, 7 8, 9 8, 10 6 )"; db.TestGeometries .Value(g => g.Id, 1) .Value(g => g.Geometry, () => GeometryInput.STGeomFromText(Wkt1)) .Insert(); var centroid1 = db.TestGeometries .Where(g => g.Id == 1) .Select(g => g.Geometry.STCentroid()) .Single() as NTSGS.Point; Assert.AreEqual(2.30769230769231, centroid1.X, 1.0E-12); Assert.AreEqual(3.30769230769231, centroid1.Y, 1.0E-12); const string Wkt2 = "LINESTRING(0 30,120 30)"; db.TestGeographies .Value(g => g.Id, 1) .Value(g => g.Geography, () => GeometryInput.STGeogFromText(Wkt2)) .Insert(); var centroid2 = db.TestGeographies .Where(g => g.Id == 1) .Select(g => g.Geography.STCentroid()) .Single() as NTSGS.Point; Assert.AreEqual(4326, centroid2.SRID); Assert.AreEqual("Point", centroid2.GeometryType); Assert.AreEqual(60.0, centroid2.X, 1.0E-9); Assert.AreEqual(49.1066, centroid2.Y, 1.0E-4); } }
public void TestSTAsText() { using (var db = new PostGisTestDataConnection(TestDatabaseConnectionString)) { var g1 = db.Select(() => GeometryConstructors.STMakePoint(-71.064544, 42.28787)); Assert.AreEqual("POINT(-71.064544 42.28787)", db.Select(() => GeometryOutput.STAsText(g1))); Assert.AreEqual("POINT(-71.065 42.288)", db.Select(() => GeometryOutput.STAsText(g1, 3))); Assert.AreEqual("POINT(-71 42)", db.Select(() => GeometryOutput.STAsText(g1, 0))); Assert.AreEqual( "POLYGON((0 0,0 1,1 1,1 0,0 0))", db.Select(() => GeometryOutput.STAsText("01030000000100000005000000000000000000000000000000000000000000000000000000000000000000F03F000000000000F03F000000000000F03F000000000000F03F000000000000000000000000000000000000000000000000"))); Assert.AreEqual( "POINT(111.11 1.11)", db.Select(() => GeometryOutput.STAsText(GeometryInput.STGeomFromEWKT("SRID=4326;POINT(111.1111111 1.1111111)"), 2))); Assert.IsNull(db.Select(() => GeometryOutput.STAsText((NTSG)null))); const string Wkt2 = "LINESTRING(0 30,120 30)"; db.TestGeographies .Value(g => g.Id, 1) .Value(g => g.Geography, () => GeometryInput.STGeogFromText(Wkt2)) .Insert(); var geographyText = db.TestGeographies .Where(g => g.Id == 1) .Select(g => g.Geography.STAsText()) .Single(); Assert.AreEqual(Wkt2, geographyText); } }
public void TestSTContainsSTCoversSTExteriorRing() { using (var db = new PostGisTestDataConnection(TestDatabaseConnectionString)) { const string Wkt1 = "POINT(1 2)"; db.TestGeometries.Value(g => g.Id, 1).Value(g => g.Geometry, () => GeometryInput.STGeomFromText(Wkt1).STBuffer(10)).Insert(); var smallc = db.TestGeometries.Single(g => g.Id == 1).Geometry; const string Wkt2 = "POINT(1 2)"; db.TestGeometries.Value(g => g.Id, 2).Value(g => g.Geometry, () => GeometryInput.STGeomFromText(Wkt2).STBuffer(20)).Insert(); var bigc = db.TestGeometries.Single(g => g.Id == 2).Geometry; db.TestGeometries.Value(g => g.Id, 3).Value(g => g.Geometry, () => GeometryInput.STGeomFromText(Wkt1)).Insert(); Assert.IsTrue(db.TestGeometries.Where(g => g.Id == 1).Select(g => g.Geometry.STCovers(smallc)).Single()); Assert.IsFalse(db.TestGeometries.Where(g => g.Id == 1).Select(g => g.Geometry.STCovers(bigc)).Single()); Assert.IsTrue(db.TestGeometries.Where(g => g.Id == 2).Select(g => g.Geometry.STCovers(bigc.STExteriorRing())).Single()); Assert.IsFalse(db.TestGeometries.Where(g => g.Id == 2).Select(g => g.Geometry.STContains(bigc.STExteriorRing())).Single()); Assert.IsTrue(db.TestGeometries.Where(g => g.Id == 1).Select(g => g.Geometry.STCoveredBy(smallc)).Single()); Assert.IsTrue(db.TestGeometries.Where(g => g.Id == 1).Select(g => g.Geometry.STCoveredBy(bigc)).Single()); Assert.IsTrue(db.TestGeometries.Where(g => g.Id == 2).Select(g => g.Geometry.STExteriorRing().STCoveredBy(bigc)).Single()); Assert.IsFalse(db.TestGeometries.Where(g => g.Id == 2).Select(g => g.Geometry.STExteriorRing().STWithin(bigc)).Single()); Assert.IsNull(db.TestGeometries.Where(g => g.Id == 1).Select(g => g.Geometry.STContains(null)).Single()); Assert.IsNull(db.TestGeometries.Where(g => g.Id == 1).Select(g => g.Geometry.STCovers(null)).Single()); Assert.IsNull(db.TestGeometries.Where(g => g.Id == 1).Select(g => g.Geometry.STCoveredBy(null)).Single()); Assert.IsNull(db.TestGeometries.Where(g => g.Id == 3).Select(g => g.Geometry.STExteriorRing()).Single()); Assert.IsNull(db.TestGeometries.Where(g => g.Id == 2).Select(g => g.Geometry.STExteriorRing().STWithin(null)).Single()); Assert.IsTrue(db.Select(() => SpatialRelationships.STCovers( "POLYGON((0 0,1 0,1 1,0 1, 0 0))", "LINESTRING(0.2 0.2, 0.8 0.8)"))); Assert.IsFalse(db.Select(() => SpatialRelationships.STCovers( "POLYGON((0 0,1 0,1 1,0 1, 0 0))", "LINESTRING(0.2 0.2, 1.2 1.2)"))); Assert.IsTrue(db.Select(() => SpatialRelationships.STCoveredBy( "LINESTRING(0.2 0.2, 0.8 0.8)", "POLYGON((0 0,1 0,1 1,0 1, 0 0))"))); Assert.IsFalse(db.Select(() => SpatialRelationships.STCoveredBy( "LINESTRING(0.2 0.2, 1.2 1.2)", "POLYGON((0 0,1 0,1 1,0 1, 0 0))"))); db.TestGeographies .Value(g => g.Id, 1) .Value(g => g.Geography, () => GeometryInput.STGeogFromText("SRID=4326;POINT(-99.327 31.4821)")) .Insert(); db.TestGeographies .Value(g => g.Id, 2) .Value(g => g.Geography, () => GeometryInput.STGeogFromText("SRID=4326;POINT(-99.33 31.483)")) .Insert(); var polyCoversPoint = db.TestGeographies .Where(g => g.Id == 1) .Select(g => g.Geography .STBuffer(300) .STCovers(db.TestGeographies.Where(g0 => g0.Id == 2).Single().Geography)) .Single(); Assert.IsFalse(polyCoversPoint); var buffer10mCoversPoint = db.TestGeographies .Where(g => g.Id == 2) .Select(g => g.Geography .STBuffer(10) .STCovers(db.TestGeographies.Where(g0 => g0.Id == 2).Single().Geography)) .Single(); Assert.IsTrue(buffer10mCoversPoint); } }