Exemple #1
0
        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)));
            }
        }
Exemple #2
0
        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)));
            }
        }
Exemple #3
0
        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);
                ////}
            }
        }