public void TestSTUnaryUnion() { using (var db = new PostGisTestDataConnection(TestDatabaseConnectionString)) { const string Wkt1 = "POLYGON((0 1, 0 3, 2 3, 2 1, 0 1))"; const string Wkt2 = "POLYGON((1 0, 1 2, 3 2, 3 0, 1 0))"; db.TestGeometries .Value(g => g.Id, 1) .Value(g => g.Geometry, () => GeometryInput.STGeomFromText(Wkt1, SRID4326)) .Insert(); db.TestGeometries .Value(g => g.Id, 2) .Value(g => g.Geometry, () => GeometryInput.STGeomFromText(Wkt2, SRID4326)) .Insert(); var result1 = db.TestGeometries .Select(g => GeometryConstructors.STCollect( db.TestGeometries.Where(g1 => g1.Id == 1).Single().Geometry, db.TestGeometries.Where(g2 => g2.Id == 2).Single().Geometry) .STUnaryUnion()) .First() as NTSGS.Polygon; // "POLYGON((1 0,1 1,0 1,0 3,2 3,2 2,3 2,3 0,1 0))" Assert.IsNotNull(result1); Assert.AreEqual(9, result1.Coordinates.Length); var result2 = db.Select(() => OverlayFunctions.STUnaryUnion("MULTIPOLYGON(((0 1,0 3,2 3,2 1,0 1)),((1 0,1 2,3 2,3 0,1 0)))")) as NTSGS.Polygon; Assert.IsNotNull(result2); Assert.AreEqual(9, result2.Coordinates.Length); Assert.IsNull(db.Select(() => OverlayFunctions.STUnaryUnion((NTSG)null))); } }
public void TestSTClipByBox2D() { using (var db = new PostGisTestDataConnection(TestDatabaseConnectionString)) { var geom1 = db.Select(() => GeometryInput.STGeomFromText("LINESTRING(0 0, 20 20)")); var box1 = db.Select(() => GeometryConstructors.STMakeEnvelope(0, 0, 10, 10)); var clipped1 = db.Select(() => OverlayFunctions.STClipByBox2D(geom1, box1).STAsText()); Assert.AreEqual("LINESTRING(0 0,10 10)", clipped1); Assert.IsNull(db.Select(() => OverlayFunctions.STClipByBox2D(null, null))); } }
public void TestSTTransformText() { using (var db = new PostGisTestDataConnection(TestDatabaseConnectionString)) { const string Gnom = "+proj=gnom +ellps=WGS84 +lat_0=70 +lon_0=-160 +no_defs"; const string Wkt1 = "POLYGON((170 50,170 72,-130 72,-130 50,170 50))"; const string Wkt2 = "POLYGON((-170 68,-170 90,-141 90,-141 68,-170 68))"; db.TestGeometries .Value(g => g.Id, 1) .Value(g => g.Geometry, () => GeometryInput.STGeomFromText(Wkt1, SRID4326)) .Insert(); db.TestGeometries .Value(g => g.Id, 2) .Value(g => g.Geometry, () => GeometryInput.STGeomFromText(Wkt2, SRID4326)) .Insert(); var result = db.TestGeometries .Select(g => OverlayFunctions .STIntersection( db.TestGeometries.Where(g1 => g1.Id == 1).Single().Geometry.STTransform(Gnom), db.TestGeometries.Where(g2 => g2.Id == 2).Single().Geometry.STTransform(Gnom)) .STTransform(Gnom, SRID4326)) .First() as NTSGS.Polygon; var expected = new double[][] { new[] { -170, 74.053793645338 }, new[] { -141, 73.4268621378904 }, new[] { -141, 68.0 }, new[] { -170, 68.0 }, new[] { -170, 74.053793645338 }, }; Assert.AreEqual(expected.Length, result.Coordinates.Length); // TODO: order of vertices depends on PostGIS version ////for (var i = 0; i < expected.Length; i++) ////{ //// Assert.AreEqual(expected[i][0], result.Coordinates[i].X, 1.0E-12); //// Assert.AreEqual(expected[i][1], result.Coordinates[i].Y, 1.0E-12); ////} } }