1
+ using System . Linq ;
2
+
3
+ using LinqToDB ;
4
+ using NUnit . Framework ;
5
+
6
+ namespace LinqToDBPostGisNetTopologySuite . Tests
7
+ {
8
+ [ TestFixture ]
9
+ class GeometryConstructorsTests : TestsBase
10
+ {
11
+ [ SetUp ]
12
+ public void Setup ( )
13
+ {
14
+ using ( var db = new PostGisTestDataConnection ( TestDatabaseConnectionString ) )
15
+ {
16
+ db . TestGeometries . Delete ( ) ;
17
+ }
18
+ }
19
+
20
+ [ Test ]
21
+ public void TestSTCollect ( )
22
+ {
23
+ using ( var db = new PostGisTestDataConnection ( TestDatabaseConnectionString ) )
24
+ {
25
+ db . TestGeometries
26
+ . Value ( g => g . Id , 1 )
27
+ . Value ( p => p . Geometry , ( ) => GeometryConstructors . STCollect (
28
+ GeometryInput . STGeomFromText ( "POINT(1 2)" ) ,
29
+ GeometryInput . STGeomFromText ( "POINT(-2 3)" ) ) )
30
+ . Insert ( ) ;
31
+
32
+ db . TestGeometries
33
+ . Value ( g => g . Id , 2 )
34
+ . Value ( p => p . Geometry , ( ) => GeometryConstructors . STCollect (
35
+ GeometryInput . STGeomFromText ( "POINT(1 2)" ) ,
36
+ GeometryInput . STGeomFromText ( "LINESTRING(0 0, 0 1, 1 0, 1 1, 0 0)" ) ) )
37
+ . Insert ( ) ;
38
+
39
+ var collected1 = db . TestGeometries . Where ( g => g . Id == 1 ) . Select ( g => g . Geometry . STAsText ( ) ) . Single ( ) ;
40
+ Assert . AreEqual ( "MULTIPOINT(1 2,-2 3)" , collected1 ) ;
41
+
42
+ var collected2 = db . TestGeometries . Where ( g => g . Id == 2 ) . Select ( g => g . Geometry . STAsText ( ) ) . Single ( ) ;
43
+ Assert . AreEqual ( "GEOMETRYCOLLECTION(POINT(1 2),LINESTRING(0 0,0 1,1 0,1 1,0 0))" , collected2 ) ;
44
+ }
45
+ }
46
+
47
+ [ Test ]
48
+ public void TestSTLineFromMultiPoint ( )
49
+ {
50
+ using ( var db = new PostGisTestDataConnection ( TestDatabaseConnectionString ) )
51
+ {
52
+ db . TestGeometries
53
+ . Value ( g => g . Id , 1 )
54
+ . Value ( p => p . Geometry , ( ) => GeometryConstructors . STLineFromMultiPoint (
55
+ GeometryInput . STGeomFromText ( "MULTIPOINT(1 2 3, 4 5 6, 7 8 9)" ) ) )
56
+ . Insert ( ) ;
57
+
58
+ var line1 = db . TestGeometries . Where ( g => g . Id == 1 ) . Select ( g => g . Geometry . STAsEWKT ( ) ) . Single ( ) ;
59
+ Assert . AreEqual ( "LINESTRING(1 2 3,4 5 6,7 8 9)" , line1 ) ;
60
+ }
61
+ }
62
+
63
+ [ Test ]
64
+ public void TestSTMakeEnvelope ( )
65
+ {
66
+ using ( var db = new PostGisTestDataConnection ( TestDatabaseConnectionString ) )
67
+ {
68
+ db . TestGeometries . Value ( g => g . Id , 1 ) . Value ( p => p . Geometry , ( ) => GeometryConstructors . STMakeEnvelope ( 10 , 10 , 11 , 11 , SRID4326 ) ) . Insert ( ) ;
69
+ var envelope1 = db . TestGeometries . Where ( g => g . Id == 1 ) . Select ( g => g . Geometry . STAsEWKT ( ) ) . Single ( ) ;
70
+ Assert . AreEqual ( "SRID=4326;POLYGON((10 10,10 11,11 11,11 10,10 10))" , envelope1 ) ;
71
+
72
+ db . TestGeometries . Value ( g => g . Id , 2 ) . Value ( p => p . Geometry , ( ) => GeometryConstructors . STMakeEnvelope ( 10 , 10 , 11 , 11 ) ) . Insert ( ) ;
73
+ var envelope2 = db . TestGeometries . Where ( g => g . Id == 2 ) . Select ( g => g . Geometry . STAsEWKT ( ) ) . Single ( ) ;
74
+ Assert . AreEqual ( "POLYGON((10 10,10 11,11 11,11 10,10 10))" , envelope2 ) ;
75
+ }
76
+ }
77
+
78
+
79
+ [ Test ]
80
+ public void TestSTMakeLine ( )
81
+ {
82
+ using ( var db = new PostGisTestDataConnection ( TestDatabaseConnectionString ) )
83
+ {
84
+ db . TestGeometries
85
+ . Value ( g => g . Id , 1 )
86
+ . Value ( p => p . Geometry , ( ) => GeometryConstructors . STMakeLine (
87
+ GeometryInput . STGeomFromText ( "POINT(1 2)" ) ,
88
+ GeometryInput . STGeomFromText ( "POINT(3 4)" ) ) )
89
+ . Insert ( ) ;
90
+
91
+ db . TestGeometries
92
+ . Value ( g => g . Id , 2 )
93
+ . Value ( p => p . Geometry , ( ) => GeometryConstructors . STMakeLine (
94
+ GeometryInput . STGeomFromText ( "LINESTRING(0 0, 1 1)" ) ,
95
+ GeometryInput . STGeomFromText ( "LINESTRING(2 2, 3 3)" ) ) )
96
+ . Insert ( ) ;
97
+
98
+ var line1 = db . TestGeometries . Where ( g => g . Id == 1 ) . Select ( g => g . Geometry . STAsText ( ) ) . Single ( ) ;
99
+ Assert . AreEqual ( "LINESTRING(1 2,3 4)" , line1 ) ;
100
+
101
+ var line2 = db . TestGeometries . Where ( g => g . Id == 2 ) . Select ( g => g . Geometry . STAsText ( ) ) . Single ( ) ;
102
+ Assert . AreEqual ( "LINESTRING(0 0,1 1,2 2,3 3)" , line2 ) ;
103
+ }
104
+ }
105
+
106
+ [ Test ]
107
+ public void TestSTMakePoint ( )
108
+ {
109
+ using ( var db = new PostGisTestDataConnection ( TestDatabaseConnectionString ) )
110
+ {
111
+ db . TestGeometries . Value ( g => g . Id , 1 ) . Value ( p => p . Geometry , ( ) => GeometryConstructors . STMakePoint ( - 71.1043443253471 , 42.3150676015829 ) ) . Insert ( ) ;
112
+ db . TestGeometries . Value ( g => g . Id , 2 ) . Value ( p => p . Geometry , ( ) => GeometryConstructors . STMakePoint ( 1 , 2 , 1.5 ) ) . Insert ( ) ;
113
+ db . TestGeometries . Value ( g => g . Id , 3 ) . Value ( p => p . Geometry , ( ) => GeometryConstructors . STMakePoint ( 10 , 20 , 30 , - 999 ) ) . Insert ( ) ;
114
+
115
+ var point1 = db . TestGeometries . Where ( g => g . Id == 1 ) ;
116
+ Assert . AreEqual ( - 71.1043443253471 , point1 . Select ( g => g . Geometry . STX ( ) ) . Single ( ) , 0.0000000000001 ) ;
117
+ Assert . AreEqual ( 42.3150676015829 , point1 . Select ( g => g . Geometry . STY ( ) ) . Single ( ) , 0.0000000000001 ) ;
118
+
119
+ var point2 = db . TestGeometries . Where ( g => g . Id == 2 ) ;
120
+ Assert . AreEqual ( 1 , point2 . Select ( g => g . Geometry . STX ( ) ) . Single ( ) , 0.1 ) ;
121
+ Assert . AreEqual ( 2 , point2 . Select ( g => g . Geometry . STY ( ) ) . Single ( ) , 0.1 ) ;
122
+ Assert . AreEqual ( 1.5 , point2 . Select ( g => g . Geometry . STZ ( ) ) . Single ( ) , 0.1 ) ;
123
+
124
+ var point3 = db . TestGeometries . Where ( g => g . Id == 3 ) ;
125
+ Assert . AreEqual ( 10 , point3 . Select ( g => g . Geometry . STX ( ) ) . Single ( ) , 0.1 ) ;
126
+ Assert . AreEqual ( 20 , point3 . Select ( g => g . Geometry . STY ( ) ) . Single ( ) , 0.1 ) ;
127
+ Assert . AreEqual ( 30 , point3 . Select ( g => g . Geometry . STZ ( ) ) . Single ( ) , 0.1 ) ;
128
+ Assert . AreEqual ( - 999 , point3 . Select ( g => g . Geometry . STM ( ) ) . Single ( ) , 0.1 ) ;
129
+ }
130
+ }
131
+
132
+ [ Test ]
133
+ public void TestSTMakePointM ( )
134
+ {
135
+ using ( var db = new PostGisTestDataConnection ( TestDatabaseConnectionString ) )
136
+ {
137
+ db . TestGeometries . Value ( g => g . Id , 1 ) . Value ( p => p . Geometry , ( ) => GeometryConstructors . STMakePointM ( 10 , 20 , - 999 ) ) . Insert ( ) ;
138
+
139
+ var point1 = db . TestGeometries . Where ( g => g . Id == 1 ) ;
140
+ Assert . AreEqual ( 10 , point1 . Select ( g => g . Geometry . STX ( ) ) . Single ( ) , 0.1 ) ;
141
+ Assert . AreEqual ( 20 , point1 . Select ( g => g . Geometry . STY ( ) ) . Single ( ) , 0.1 ) ;
142
+ Assert . AreEqual ( - 999 , point1 . Select ( g => g . Geometry . STM ( ) ) . Single ( ) , 0.1 ) ;
143
+ }
144
+ }
145
+ }
146
+ }
0 commit comments