@@ -21,12 +21,94 @@ public void Setup()
21
21
}
22
22
23
23
[ Test ]
24
- public void TestSTArea ( )
24
+ public void TestGeometryType ( )
25
25
{
26
- // https://postgis.net/docs/manual-3.0/ST_Envelope.html
26
+ using ( var db = new PostGisTestDataConnection ( TestDatabaseConnectionString ) )
27
+ {
28
+ // TODO: shared method
29
+ const string wkt = "LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)" ;
30
+ db . Insert ( new TestGeometryEntity ( 1 , null ) ) ;
31
+ var geometry = db . TestGeometries . Select ( g => GeometryInput . STGeomFromText ( wkt ) ) . Single ( ) ;
32
+ db . Update ( new TestGeometryEntity ( 1 , geometry ) ) ;
33
+
34
+ Assert . AreEqual ( "LINESTRING" , db . TestGeometries . Select ( g => g . Geometry . GeometryType ( ) ) . Single ( ) ) ;
35
+ }
36
+ }
27
37
38
+ [ Test ]
39
+ public void TestSTBoundary ( )
40
+ {
28
41
using ( var db = new PostGisTestDataConnection ( TestDatabaseConnectionString ) )
29
42
{
43
+ // TODO: shared method
44
+ const string wkt1 = "LINESTRING(100 150,50 60, 70 80, 160 170)" ;
45
+ db . Insert ( new TestGeometryEntity ( 1 , null ) ) ;
46
+ var geometry1 = db . TestGeometries . Where ( g => g . Id == 1 ) . Select ( g => GeometryInput . STGeomFromText ( wkt1 ) ) . Single ( ) ;
47
+ db . Update ( new TestGeometryEntity ( 1 , geometry1 ) ) ;
48
+
49
+ const string wkt2 = "POLYGON (( 10 130, 50 190, 110 190, 140 150, 150 80, 100 10, 20 40, 10 130), (70 40, 100 50, 120 80, 80 110, 50 90, 70 40))" ;
50
+ db . Insert ( new TestGeometryEntity ( 2 , null ) ) ;
51
+ var geometry2 = db . TestGeometries . Where ( g => g . Id == 2 ) . Select ( g => GeometryInput . STGeomFromText ( wkt2 ) ) . Single ( ) ;
52
+ db . Update ( new TestGeometryEntity ( 2 , geometry2 ) ) ;
53
+
54
+ var boundary1 = db . TestGeometries
55
+ . Where ( g => g . Id == 1 )
56
+ . Select ( g => g . Geometry . STBoundary ( ) . STAsText ( ) )
57
+ . Single ( ) ;
58
+ Assert . AreEqual ( "MULTIPOINT(100 150,160 170)" , boundary1 ) ;
59
+
60
+ var boundary2 = db . TestGeometries
61
+ . Where ( g => g . Id == 2 )
62
+ . Select ( g => g . Geometry . STBoundary ( ) . STAsText ( ) )
63
+ . Single ( ) ;
64
+ Assert . AreEqual ( "MULTILINESTRING((10 130,50 190,110 190,140 150,150 80,100 10,20 40,10 130),(70 40,100 50,120 80,80 110,50 90,70 40))" , boundary2 ) ;
65
+ }
66
+ }
67
+
68
+ [ Test ]
69
+ public void TestSTDimension ( )
70
+ {
71
+ using ( var db = new PostGisTestDataConnection ( TestDatabaseConnectionString ) )
72
+ {
73
+ // TODO: shared method
74
+ const string wkt = "GEOMETRYCOLLECTION(LINESTRING(1 1,0 0),POINT(0 0))" ;
75
+ db . Insert ( new TestGeometryEntity ( 1 , null ) ) ;
76
+ var geometry = db . TestGeometries . Select ( g => GeometryInput . STGeomFromText ( wkt ) ) . Single ( ) ;
77
+ db . Update ( new TestGeometryEntity ( 1 , geometry ) ) ;
78
+
79
+ var dimension = db . TestGeometries
80
+ . Select ( g => g . Geometry . STDimension ( ) )
81
+ . Single ( ) ;
82
+
83
+ Assert . AreEqual ( 1 , dimension ) ;
84
+ }
85
+ }
86
+
87
+ [ Test ]
88
+ public void TestSTEndPoint ( )
89
+ {
90
+ using ( var db = new PostGisTestDataConnection ( TestDatabaseConnectionString ) )
91
+ {
92
+ // TODO: shared method
93
+ const string wkt = "LINESTRING(1 1, 2 2, 3 3)" ;
94
+ db . Insert ( new TestGeometryEntity ( 1 , null ) ) ;
95
+ var geometry = db . TestGeometries . Select ( g => GeometryInput . STGeomFromText ( wkt ) ) . Single ( ) ;
96
+ db . Update ( new TestGeometryEntity ( 1 , geometry ) ) ;
97
+
98
+ var endPoint = db . TestGeometries
99
+ . Select ( g => g . Geometry . STEndPoint ( ) . STAsText ( ) )
100
+ . Single ( ) ;
101
+
102
+ Assert . AreEqual ( "POINT(3 3)" , endPoint ) ;
103
+ }
104
+ }
105
+
106
+ [ Test ]
107
+ public void TestSTEnvelope ( )
108
+ {
109
+ using ( var db = new PostGisTestDataConnection ( TestDatabaseConnectionString ) )
110
+ {
111
+ // TODO: shared method
30
112
const string wkt = "LINESTRING(0 0, 1 3)" ;
31
113
db . Insert ( new TestGeometryEntity ( 1 , null ) ) ;
32
114
var geometry = db . TestGeometries . Select ( g => GeometryInput . STGeomFromText ( wkt ) ) . Single ( ) ;
@@ -39,5 +121,125 @@ public void TestSTArea()
39
121
Assert . AreEqual ( "POLYGON((0 0,0 3,1 3,1 0,0 0))" , envelope ) ;
40
122
}
41
123
}
124
+
125
+ [ Test ]
126
+ public void TestSTIsEmpty ( )
127
+ {
128
+ using ( var db = new PostGisTestDataConnection ( TestDatabaseConnectionString ) )
129
+ {
130
+ // TODO: shared method
131
+ const string wkt1 = "GEOMETRYCOLLECTION EMPTY" ;
132
+ db . Insert ( new TestGeometryEntity ( 1 , null ) ) ;
133
+ var geometry1 = db . TestGeometries . Where ( g => g . Id == 1 ) . Select ( g => GeometryInput . STGeomFromText ( wkt1 ) ) . Single ( ) ;
134
+ db . Update ( new TestGeometryEntity ( 1 , geometry1 ) ) ;
135
+
136
+ const string wkt2 = "POLYGON((1 2, 3 4, 5 6, 1 2))" ;
137
+ db . Insert ( new TestGeometryEntity ( 2 , null ) ) ;
138
+ var geometry2 = db . TestGeometries . Where ( g => g . Id == 2 ) . Select ( g => GeometryInput . STGeomFromText ( wkt2 ) ) . Single ( ) ;
139
+ db . Update ( new TestGeometryEntity ( 2 , geometry2 ) ) ;
140
+
141
+ db . Insert ( new TestGeometryEntity ( 3 , null ) ) ;
142
+
143
+ Assert . IsTrue ( db . TestGeometries . Where ( g => g . Id == 1 ) . Select ( g => g . Geometry . STIsEmpty ( ) ) . Single ( ) ) ;
144
+ Assert . IsFalse ( db . TestGeometries . Where ( g => g . Id == 2 ) . Select ( g => g . Geometry . STIsEmpty ( ) ) . Single ( ) ) ;
145
+ Assert . IsNull ( db . TestGeometries . Where ( g => g . Id == 3 ) . Select ( g => g . Geometry . STIsEmpty ( ) ) . Single ( ) ) ;
146
+ }
147
+ }
148
+
149
+ [ Test ]
150
+ public void TestSTIsValid ( )
151
+ {
152
+ using ( var db = new PostGisTestDataConnection ( TestDatabaseConnectionString ) )
153
+ {
154
+ // TODO: shared method
155
+ const string wkt1 = "LINESTRING(0 0, 1 1)" ;
156
+ db . Insert ( new TestGeometryEntity ( 1 , null ) ) ;
157
+ var geometry1 = db . TestGeometries . Where ( g => g . Id == 1 ) . Select ( g => GeometryInput . STGeomFromText ( wkt1 ) ) . Single ( ) ;
158
+ db . Update ( new TestGeometryEntity ( 1 , geometry1 ) ) ;
159
+
160
+ const string wkt2 = "POLYGON((0 0, 1 1, 1 2, 1 1, 0 0))" ;
161
+ db . Insert ( new TestGeometryEntity ( 2 , null ) ) ;
162
+ var geometry2 = db . TestGeometries . Where ( g => g . Id == 2 ) . Select ( g => GeometryInput . STGeomFromText ( wkt2 ) ) . Single ( ) ;
163
+ db . Update ( new TestGeometryEntity ( 2 , geometry2 ) ) ;
164
+
165
+ Assert . IsTrue ( db . TestGeometries . Where ( g => g . Id == 1 ) . Select ( g => g . Geometry . STIsValid ( ) ) . Single ( ) ) ;
166
+ Assert . IsFalse ( db . TestGeometries . Where ( g => g . Id == 2 ) . Select ( g => g . Geometry . STIsValid ( ) ) . Single ( ) ) ;
167
+ }
168
+ }
169
+
170
+ [ Test ]
171
+ public void TestSTNumGeometries ( )
172
+ {
173
+ using ( var db = new PostGisTestDataConnection ( TestDatabaseConnectionString ) )
174
+ {
175
+ // TODO: shared method
176
+ const string wkt1 = "LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)" ;
177
+ db . Insert ( new TestGeometryEntity ( 1 , null ) ) ;
178
+ var geometry1 = db . TestGeometries . Where ( g => g . Id == 1 ) . Select ( g => GeometryInput . STGeomFromText ( wkt1 ) ) . Single ( ) ;
179
+ db . Update ( new TestGeometryEntity ( 1 , geometry1 ) ) ;
180
+
181
+ const string wkt2 = "GEOMETRYCOLLECTION(MULTIPOINT(-2 3 , -2 2), LINESTRING(5 5, 10 10), POLYGON((-7 4.2, -7.1 5, -7.1 4.3, -7 4.2)))" ;
182
+ db . Insert ( new TestGeometryEntity ( 2 , null ) ) ;
183
+ var geometry2 = db . TestGeometries . Where ( g => g . Id == 2 ) . Select ( g => GeometryInput . STGeomFromText ( wkt2 ) ) . Single ( ) ;
184
+ db . Update ( new TestGeometryEntity ( 2 , geometry2 ) ) ;
185
+
186
+ var num1 = db . TestGeometries
187
+ . Where ( g => g . Id == 1 )
188
+ . Select ( g => g . Geometry . STNumGeometries ( ) )
189
+ . Single ( ) ;
190
+ Assert . AreEqual ( 1 , num1 ) ;
191
+
192
+ var num2 = db . TestGeometries
193
+ . Where ( g => g . Id == 2 )
194
+ . Select ( g => g . Geometry . STNumGeometries ( ) )
195
+ . Single ( ) ;
196
+ Assert . AreEqual ( 3 , num2 ) ;
197
+ }
198
+ }
199
+
200
+ [ Test ]
201
+ public void TestSTNumPoints ( )
202
+ {
203
+ using ( var db = new PostGisTestDataConnection ( TestDatabaseConnectionString ) )
204
+ {
205
+ // TODO: shared method
206
+ const string wkt = "LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)" ;
207
+ db . Insert ( new TestGeometryEntity ( 1 , null ) ) ;
208
+ var geometry = db . TestGeometries . Select ( g => GeometryInput . STGeomFromText ( wkt ) ) . Single ( ) ;
209
+ db . Update ( new TestGeometryEntity ( 1 , geometry ) ) ;
210
+
211
+ Assert . AreEqual ( 4 , db . TestGeometries . Select ( g => g . Geometry . STNumPoints ( ) ) . Single ( ) ) ;
212
+ }
213
+ }
214
+
215
+ [ Test ]
216
+ public void TestSTXYZM ( )
217
+ {
218
+ using ( var db = new PostGisTestDataConnection ( TestDatabaseConnectionString ) )
219
+ {
220
+ // TODO: shared method
221
+ const string wkt1 = "POINT(1 2 3 4)" ;
222
+ db . Insert ( new TestGeometryEntity ( 1 , null ) ) ;
223
+ var geometry1 = db . TestGeometries . Where ( g => g . Id == 1 ) . Select ( g => GeometryInput . STGeomFromText ( wkt1 ) ) . Single ( ) ;
224
+ db . Update ( new TestGeometryEntity ( 1 , geometry1 ) ) ;
225
+
226
+ const string wkt2 = "POINT(1 2)" ;
227
+ db . Insert ( new TestGeometryEntity ( 2 , null ) ) ;
228
+ var geometry2 = db . TestGeometries . Where ( g => g . Id == 2 ) . Select ( g => GeometryInput . STGeomFromText ( wkt2 ) ) . Single ( ) ;
229
+ db . Update ( new TestGeometryEntity ( 2 , geometry2 ) ) ;
230
+
231
+ var query1 = db . TestGeometries . Where ( g => g . Id == 1 ) ;
232
+ Assert . AreEqual ( 1 , query1 . Select ( g => g . Geometry . STX ( ) ) . Single ( ) ) ;
233
+ Assert . AreEqual ( 2 , query1 . Select ( g => g . Geometry . STY ( ) ) . Single ( ) ) ;
234
+ Assert . AreEqual ( 3 , query1 . Select ( g => g . Geometry . STZ ( ) ) . Single ( ) ) ;
235
+ Assert . AreEqual ( 4 , query1 . Select ( g => g . Geometry . STM ( ) ) . Single ( ) ) ;
236
+
237
+ var query2 = db . TestGeometries . Where ( g => g . Id == 2 ) ;
238
+ Assert . AreEqual ( 1 , query2 . Select ( g => g . Geometry . STX ( ) ) . Single ( ) ) ;
239
+ Assert . AreEqual ( 2 , query2 . Select ( g => g . Geometry . STY ( ) ) . Single ( ) ) ;
240
+ Assert . IsNull ( query2 . Select ( g => g . Geometry . STZ ( ) ) . Single ( ) ) ;
241
+ Assert . IsNull ( query2 . Select ( g => g . Geometry . STM ( ) ) . Single ( ) ) ;
242
+ }
243
+ }
42
244
}
43
245
}
0 commit comments