@@ -22,12 +22,21 @@ public void TestGeometryType()
2222 {
2323 using ( var db = new PostGisTestDataConnection ( TestDatabaseConnectionString ) )
2424 {
25- const string wkt = "LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)" ;
26- db . TestGeometries . Value ( g => g . Id , 1 ) . Value ( p => p . Geometry , ( ) => GeometryInput . STGeomFromText ( wkt ) ) . Insert ( ) ;
25+ const string wkt1 = "LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)" ;
26+ db . TestGeometries . Value ( g => g . Id , 1 ) . Value ( p => p . Geometry , ( ) => GeometryInput . STGeomFromText ( wkt1 ) ) . Insert ( ) ;
27+ db . TestGeometries . Value ( g => g . Id , 2 ) . Value ( p => p . Geometry , ( ) => null ) . Insert ( ) ;
2728
28- var geometryType = db . TestGeometries . Select ( g => g . Geometry . GeometryType ( ) ) . Single ( ) ;
29+ var geometryType1 = db . TestGeometries . Where ( g => g . Id == 1 ) . Select ( g => g . Geometry . GeometryType ( ) ) . Single ( ) ;
30+ Assert . AreEqual ( "LINESTRING" , geometryType1 ) ;
2931
30- Assert . AreEqual ( "LINESTRING" , geometryType ) ;
32+ var stGeometryType1 = db . TestGeometries . Where ( g => g . Id == 1 ) . Select ( g => g . Geometry . STGeometryType ( ) ) . Single ( ) ;
33+ Assert . AreEqual ( "ST_LineString" , stGeometryType1 ) ;
34+
35+ var geometryType2 = db . TestGeometries . Where ( g => g . Id == 2 ) . Select ( g => g . Geometry . GeometryType ( ) ) . Single ( ) ;
36+ Assert . IsNull ( geometryType2 ) ;
37+
38+ var stGeometryType2 = db . TestGeometries . Where ( g => g . Id == 2 ) . Select ( g => g . Geometry . STGeometryType ( ) ) . Single ( ) ;
39+ Assert . IsNull ( stGeometryType2 ) ;
3140 }
3241 }
3342
@@ -40,26 +49,56 @@ public void TestSTBoundary()
4049 db . TestGeometries . Value ( g => g . Id , 1 ) . Value ( p => p . Geometry , ( ) => GeometryInput . STGeomFromText ( wkt1 ) ) . Insert ( ) ;
4150 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))" ;
4251 db . TestGeometries . Value ( g => g . Id , 2 ) . Value ( p => p . Geometry , ( ) => GeometryInput . STGeomFromText ( wkt2 ) ) . Insert ( ) ;
52+ const string wkt3 = "MULTILINESTRING((1 1 1,0 0 0.5, -1 1 1),(1 1 0.5,0 0 0.5, -1 1 0.5, 1 1 0.5) )" ;
53+ db . TestGeometries . Value ( g => g . Id , 3 ) . Value ( p => p . Geometry , ( ) => GeometryInput . STGeomFromText ( wkt3 ) ) . Insert ( ) ;
4354
4455 var boundary1 = db . TestGeometries . Where ( g => g . Id == 1 ) . Select ( g => g . Geometry . STBoundary ( ) . STAsText ( ) ) . Single ( ) ;
4556 Assert . AreEqual ( "MULTIPOINT(100 150,160 170)" , boundary1 ) ;
4657
4758 var boundary2 = db . TestGeometries . Where ( g => g . Id == 2 ) . Select ( g => g . Geometry . STBoundary ( ) . STAsText ( ) ) . Single ( ) ;
4859 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 ) ;
60+
61+ var boundary3 = db . TestGeometries . Where ( g => g . Id == 3 ) . Select ( g => g . Geometry . STBoundary ( ) . STAsText ( ) ) . Single ( ) ;
62+ Assert . AreEqual ( "MULTIPOINT Z (-1 1 1,1 1 0.75)" , boundary3 ) ;
4963 }
5064 }
5165
5266 [ Test ]
53- public void TestSTDimension ( )
67+ public void TestSTCoordDim ( )
5468 {
5569 using ( var db = new PostGisTestDataConnection ( TestDatabaseConnectionString ) )
5670 {
57- const string wkt = "GEOMETRYCOLLECTION(LINESTRING(1 1,0 0),POINT(0 0) )" ;
71+ const string wkt = "CIRCULARSTRING(1 2 3, 1 3 4, 5 6 7, 8 9 10, 11 12 13 )" ;
5872 db . TestGeometries . Value ( g => g . Id , 1 ) . Value ( p => p . Geometry , ( ) => GeometryInput . STGeomFromText ( wkt ) ) . Insert ( ) ;
73+ db . TestGeometries . Value ( g => g . Id , 2 ) . Value ( p => p . Geometry , ( ) => null ) . Insert ( ) ;
5974
60- var dimension = db . TestGeometries . Select ( g => g . Geometry . STDimension ( ) ) . Single ( ) ;
75+ var dimension1 = db . TestGeometries . Where ( g => g . Id == 1 ) . Select ( g => g . Geometry . STCoordDim ( ) ) . Single ( ) ;
76+ Assert . AreEqual ( 3 , dimension1 ) ;
6177
62- Assert . AreEqual ( 1 , dimension ) ;
78+ var dimension2 = db . TestGeometries . Where ( g => g . Id == 2 ) . Select ( g => g . Geometry . STCoordDim ( ) ) . Single ( ) ;
79+ Assert . IsNull ( dimension2 ) ;
80+ }
81+ }
82+
83+ [ Test ]
84+ public void TestSTDimension ( )
85+ {
86+ using ( var db = new PostGisTestDataConnection ( TestDatabaseConnectionString ) )
87+ {
88+ const string wkt1 = "GEOMETRYCOLLECTION(LINESTRING(1 1,0 0),POINT(0 0))" ;
89+ db . TestGeometries . Value ( g => g . Id , 1 ) . Value ( p => p . Geometry , ( ) => GeometryInput . STGeomFromText ( wkt1 ) ) . Insert ( ) ;
90+ const string wkt2 = "POINT(0 0)" ;
91+ db . TestGeometries . Value ( g => g . Id , 2 ) . Value ( p => p . Geometry , ( ) => GeometryInput . STGeomFromText ( wkt2 ) ) . Insert ( ) ;
92+ db . TestGeometries . Value ( g => g . Id , 3 ) . Value ( p => p . Geometry , ( ) => null ) . Insert ( ) ;
93+
94+ var dimension1 = db . TestGeometries . Where ( g => g . Id == 1 ) . Select ( g => g . Geometry . STDimension ( ) ) . Single ( ) ;
95+ Assert . AreEqual ( 1 , dimension1 ) ;
96+
97+ var dimension2 = db . TestGeometries . Where ( g => g . Id == 2 ) . Select ( g => g . Geometry . STDimension ( ) ) . Single ( ) ;
98+ Assert . AreEqual ( 0 , dimension2 ) ;
99+
100+ var dimension3 = db . TestGeometries . Where ( g => g . Id == 3 ) . Select ( g => g . Geometry . STDimension ( ) ) . Single ( ) ;
101+ Assert . IsNull ( dimension3 ) ;
63102 }
64103 }
65104
@@ -68,12 +107,16 @@ public void TestSTEndPoint()
68107 {
69108 using ( var db = new PostGisTestDataConnection ( TestDatabaseConnectionString ) )
70109 {
71- const string wkt = "LINESTRING(1 1, 2 2, 3 3)" ;
72- db . TestGeometries . Value ( g => g . Id , 1 ) . Value ( p => p . Geometry , ( ) => GeometryInput . STGeomFromText ( wkt ) ) . Insert ( ) ;
110+ const string wkt1 = "LINESTRING(1 1, 2 2, 3 3)" ;
111+ db . TestGeometries . Value ( g => g . Id , 1 ) . Value ( p => p . Geometry , ( ) => GeometryInput . STGeomFromText ( wkt1 ) ) . Insert ( ) ;
112+ const string wkt2 = "POINT(1 1)" ;
113+ db . TestGeometries . Value ( g => g . Id , 2 ) . Value ( p => p . Geometry , ( ) => GeometryInput . STGeomFromText ( wkt2 ) ) . Insert ( ) ;
73114
74- var endPoint = db . TestGeometries . Select ( g => g . Geometry . STEndPoint ( ) . STAsText ( ) ) . Single ( ) ;
115+ var endPoint1 = db . TestGeometries . Where ( g => g . Id == 1 ) . Select ( g => g . Geometry . STEndPoint ( ) . STAsText ( ) ) . Single ( ) ;
116+ Assert . AreEqual ( "POINT(3 3)" , endPoint1 ) ;
75117
76- Assert . AreEqual ( "POINT(3 3)" , endPoint ) ;
118+ var endPoint2 = db . TestGeometries . Where ( g => g . Id == 2 ) . Select ( g => g . Geometry . STEndPoint ( ) ) . Single ( ) ;
119+ Assert . IsNull ( endPoint2 ) ;
77120 }
78121 }
79122
@@ -91,6 +134,23 @@ public void TestSTEnvelope()
91134 }
92135 }
93136
137+ [ Test ]
138+ public void TestSTIsClosed ( )
139+ {
140+ using ( var db = new PostGisTestDataConnection ( TestDatabaseConnectionString ) )
141+ {
142+ const string wkt1 = "LINESTRING(0 0, 1 1)" ;
143+ db . TestGeometries . Value ( g => g . Id , 1 ) . Value ( p => p . Geometry , ( ) => GeometryInput . STGeomFromText ( wkt1 ) ) . Insert ( ) ;
144+ const string wkt2 = "LINESTRING(0 0, 0 1, 1 1, 0 0)" ;
145+ db . TestGeometries . Value ( g => g . Id , 2 ) . Value ( p => p . Geometry , ( ) => GeometryInput . STGeomFromText ( wkt2 ) ) . Insert ( ) ;
146+ db . TestGeometries . Value ( g => g . Id , 3 ) . Value ( p => p . Geometry , ( ) => null ) . Insert ( ) ;
147+
148+ Assert . IsFalse ( db . TestGeometries . Where ( g => g . Id == 1 ) . Select ( g => g . Geometry . STIsClosed ( ) ) . Single ( ) ) ;
149+ Assert . IsTrue ( db . TestGeometries . Where ( g => g . Id == 2 ) . Select ( g => g . Geometry . STIsClosed ( ) ) . Single ( ) ) ;
150+ Assert . IsNull ( db . TestGeometries . Where ( g => g . Id == 3 ) . Select ( g => g . Geometry . STIsClosed ( ) ) . Single ( ) ) ;
151+ }
152+ }
153+
94154 [ Test ]
95155 public void TestSTIsEmpty ( )
96156 {
@@ -108,6 +168,40 @@ public void TestSTIsEmpty()
108168 }
109169 }
110170
171+ [ Test ]
172+ public void TestSTIsRing ( )
173+ {
174+ using ( var db = new PostGisTestDataConnection ( TestDatabaseConnectionString ) )
175+ {
176+ const string wkt1 = "LINESTRING(0 0, 0 1, 1 1, 1 0, 0 0)" ;
177+ db . TestGeometries . Value ( g => g . Id , 1 ) . Value ( p => p . Geometry , ( ) => GeometryInput . STGeomFromText ( wkt1 ) ) . Insert ( ) ;
178+ const string wkt2 = "LINESTRING(0 0, 0 1, 1 0, 1 1, 0 0)" ;
179+ db . TestGeometries . Value ( g => g . Id , 2 ) . Value ( p => p . Geometry , ( ) => GeometryInput . STGeomFromText ( wkt2 ) ) . Insert ( ) ;
180+ db . TestGeometries . Value ( g => g . Id , 3 ) . Value ( p => p . Geometry , ( ) => null ) . Insert ( ) ;
181+
182+ Assert . IsTrue ( db . TestGeometries . Where ( g => g . Id == 1 ) . Select ( g => g . Geometry . STIsRing ( ) ) . Single ( ) ) ;
183+ Assert . IsFalse ( db . TestGeometries . Where ( g => g . Id == 2 ) . Select ( g => g . Geometry . STIsRing ( ) ) . Single ( ) ) ;
184+ Assert . IsNull ( db . TestGeometries . Where ( g => g . Id == 3 ) . Select ( g => g . Geometry . STIsRing ( ) ) . Single ( ) ) ;
185+ }
186+ }
187+
188+ [ Test ]
189+ public void TestSTIsSimple ( )
190+ {
191+ using ( var db = new PostGisTestDataConnection ( TestDatabaseConnectionString ) )
192+ {
193+ const string wkt1 = "POLYGON((1 1, 2 1, 2 2, 1 1))" ;
194+ db . TestGeometries . Value ( g => g . Id , 1 ) . Value ( p => p . Geometry , ( ) => GeometryInput . STGeomFromText ( wkt1 ) ) . Insert ( ) ;
195+ const string wkt2 = "LINESTRING(1 1,2 2,2 3.5,1 3,1 2,2 1)" ;
196+ db . TestGeometries . Value ( g => g . Id , 2 ) . Value ( p => p . Geometry , ( ) => GeometryInput . STGeomFromText ( wkt2 ) ) . Insert ( ) ;
197+ db . TestGeometries . Value ( g => g . Id , 3 ) . Value ( p => p . Geometry , ( ) => null ) . Insert ( ) ;
198+
199+ Assert . IsTrue ( db . TestGeometries . Where ( g => g . Id == 1 ) . Select ( g => g . Geometry . STIsSimple ( ) ) . Single ( ) ) ;
200+ Assert . IsFalse ( db . TestGeometries . Where ( g => g . Id == 2 ) . Select ( g => g . Geometry . STIsSimple ( ) ) . Single ( ) ) ;
201+ Assert . IsNull ( db . TestGeometries . Where ( g => g . Id == 3 ) . Select ( g => g . Geometry . STIsSimple ( ) ) . Single ( ) ) ;
202+ }
203+ }
204+
111205 [ Test ]
112206 public void TestSTIsValid ( )
113207 {
@@ -123,6 +217,33 @@ public void TestSTIsValid()
123217 }
124218 }
125219
220+ [ Test ]
221+ public void TestSTNPoints ( )
222+ {
223+ using ( var db = new PostGisTestDataConnection ( TestDatabaseConnectionString ) )
224+ {
225+ const string wkt1 = "POINT(77.29 29.07)" ;
226+ db . TestGeometries . Value ( g => g . Id , 1 ) . Value ( p => p . Geometry , ( ) => GeometryInput . STGeomFromText ( wkt1 ) ) . Insert ( ) ;
227+ const string wkt2 = "LINESTRING(77.29 29.07 1,77.42 29.26 0,77.27 29.31 -1,77.29 29.07 3)" ;
228+ db . TestGeometries . Value ( g => g . Id , 2 ) . Value ( p => p . Geometry , ( ) => GeometryInput . STGeomFromText ( wkt2 ) ) . Insert ( ) ;
229+ const string wkt3 = "LINESTRING EMPTY" ;
230+ db . TestGeometries . Value ( g => g . Id , 3 ) . Value ( p => p . Geometry , ( ) => GeometryInput . STGeomFromText ( wkt3 ) ) . Insert ( ) ;
231+ db . TestGeometries . Value ( g => g . Id , 4 ) . Value ( p => p . Geometry , ( ) => null ) . Insert ( ) ;
232+
233+ var nPoints1 = db . TestGeometries . Where ( g => g . Id == 1 ) . Select ( g => g . Geometry . STNPoints ( ) ) . Single ( ) ;
234+ Assert . AreEqual ( 1 , nPoints1 ) ;
235+
236+ var nPoints2 = db . TestGeometries . Where ( g => g . Id == 2 ) . Select ( g => g . Geometry . STNPoints ( ) ) . Single ( ) ;
237+ Assert . AreEqual ( 4 , nPoints2 ) ;
238+
239+ var nPoints3 = db . TestGeometries . Where ( g => g . Id == 3 ) . Select ( g => g . Geometry . STNPoints ( ) ) . Single ( ) ;
240+ Assert . AreEqual ( 0 , nPoints3 ) ;
241+
242+ var nPoints4 = db . TestGeometries . Where ( g => g . Id == 4 ) . Select ( g => g . Geometry . STNPoints ( ) ) . Single ( ) ;
243+ Assert . IsNull ( nPoints4 ) ;
244+ }
245+ }
246+
126247 [ Test ]
127248 public void TestSTNumGeometries ( )
128249 {
@@ -132,12 +253,21 @@ public void TestSTNumGeometries()
132253 db . TestGeometries . Value ( g => g . Id , 1 ) . Value ( p => p . Geometry , ( ) => GeometryInput . STGeomFromText ( wkt1 ) ) . Insert ( ) ;
133254 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)))" ;
134255 db . TestGeometries . Value ( g => g . Id , 2 ) . Value ( p => p . Geometry , ( ) => GeometryInput . STGeomFromText ( wkt2 ) ) . Insert ( ) ;
256+ const string wkt3 = "POINT EMPTY" ;
257+ db . TestGeometries . Value ( g => g . Id , 3 ) . Value ( p => p . Geometry , ( ) => GeometryInput . STGeomFromText ( wkt3 ) ) . Insert ( ) ;
258+ db . TestGeometries . Value ( g => g . Id , 4 ) . Value ( p => p . Geometry , ( ) => null ) . Insert ( ) ;
135259
136260 var numGeometries1 = db . TestGeometries . Where ( g => g . Id == 1 ) . Select ( g => g . Geometry . STNumGeometries ( ) ) . Single ( ) ;
137261 Assert . AreEqual ( 1 , numGeometries1 ) ;
138262
139263 var numGeometries2 = db . TestGeometries . Where ( g => g . Id == 2 ) . Select ( g => g . Geometry . STNumGeometries ( ) ) . Single ( ) ;
140264 Assert . AreEqual ( 3 , numGeometries2 ) ;
265+
266+ var numGeometries3 = db . TestGeometries . Where ( g => g . Id == 3 ) . Select ( g => g . Geometry . STNumGeometries ( ) ) . Single ( ) ;
267+ Assert . AreEqual ( 0 , numGeometries3 ) ;
268+
269+ var numGeometries4 = db . TestGeometries . Where ( g => g . Id == 4 ) . Select ( g => g . Geometry . STNumGeometries ( ) ) . Single ( ) ;
270+ Assert . IsNull ( numGeometries4 ) ;
141271 }
142272 }
143273
@@ -146,12 +276,34 @@ public void TestSTNumPoints()
146276 {
147277 using ( var db = new PostGisTestDataConnection ( TestDatabaseConnectionString ) )
148278 {
149- const string wkt = "LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)" ;
150- db . TestGeometries . Value ( g => g . Id , 1 ) . Value ( p => p . Geometry , ( ) => GeometryInput . STGeomFromText ( wkt ) ) . Insert ( ) ;
279+ const string wkt1 = "LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)" ;
280+ db . TestGeometries . Value ( g => g . Id , 1 ) . Value ( p => p . Geometry , ( ) => GeometryInput . STGeomFromText ( wkt1 ) ) . Insert ( ) ;
281+ const string wkt2 = "POINT(77.29 29.07)" ;
282+ db . TestGeometries . Value ( g => g . Id , 2 ) . Value ( p => p . Geometry , ( ) => GeometryInput . STGeomFromText ( wkt2 ) ) . Insert ( ) ;
283+
284+ var numPoints1 = db . TestGeometries . Where ( g => g . Id == 1 ) . Select ( g => g . Geometry . STNumPoints ( ) ) . Single ( ) ;
285+ Assert . AreEqual ( 4 , numPoints1 ) ;
286+
287+ var numPoints2 = db . TestGeometries . Where ( g => g . Id == 2 ) . Select ( g => g . Geometry . STNumPoints ( ) ) . Single ( ) ;
288+ Assert . IsNull ( numPoints2 ) ;
289+ }
290+ }
151291
152- var numPoints = db . TestGeometries . Select ( g => g . Geometry . STNumPoints ( ) ) . Single ( ) ;
292+ [ Test ]
293+ public void TestSTStartPoint ( )
294+ {
295+ using ( var db = new PostGisTestDataConnection ( TestDatabaseConnectionString ) )
296+ {
297+ const string wkt1 = "LINESTRING(0 1, 0 2)" ;
298+ db . TestGeometries . Value ( g => g . Id , 1 ) . Value ( p => p . Geometry , ( ) => GeometryInput . STGeomFromText ( wkt1 ) ) . Insert ( ) ;
299+ const string wkt2 = "POINT(0 1)" ;
300+ db . TestGeometries . Value ( g => g . Id , 2 ) . Value ( p => p . Geometry , ( ) => GeometryInput . STGeomFromText ( wkt2 ) ) . Insert ( ) ;
301+
302+ var startPoint1 = db . TestGeometries . Where ( g => g . Id == 1 ) . Select ( g => g . Geometry . STStartPoint ( ) . STAsText ( ) ) . Single ( ) ;
303+ Assert . AreEqual ( "POINT(0 1)" , startPoint1 ) ;
153304
154- Assert . AreEqual ( 4 , numPoints ) ;
305+ var startPoint2 = db . TestGeometries . Where ( g => g . Id == 2 ) . Select ( g => g . Geometry . STStartPoint ( ) ) . Single ( ) ;
306+ Assert . IsNull ( startPoint2 ) ;
155307 }
156308 }
157309
@@ -164,6 +316,8 @@ public void TestSTXYZM()
164316 db . TestGeometries . Value ( g => g . Id , 1 ) . Value ( p => p . Geometry , ( ) => GeometryInput . STGeomFromText ( wkt1 ) ) . Insert ( ) ;
165317 const string wkt2 = "POINT(1 2)" ;
166318 db . TestGeometries . Value ( g => g . Id , 2 ) . Value ( p => p . Geometry , ( ) => GeometryInput . STGeomFromText ( wkt2 ) ) . Insert ( ) ;
319+ const string wkt3 = "POINT EMPTY" ;
320+ db . TestGeometries . Value ( g => g . Id , 3 ) . Value ( p => p . Geometry , ( ) => GeometryInput . STGeomFromText ( wkt3 ) ) . Insert ( ) ;
167321
168322 var query1 = db . TestGeometries . Where ( g => g . Id == 1 ) ;
169323 Assert . AreEqual ( 1 , query1 . Select ( g => g . Geometry . STX ( ) ) . Single ( ) ) ;
@@ -176,6 +330,12 @@ public void TestSTXYZM()
176330 Assert . AreEqual ( 2 , query2 . Select ( g => g . Geometry . STY ( ) ) . Single ( ) ) ;
177331 Assert . IsNull ( query2 . Select ( g => g . Geometry . STZ ( ) ) . Single ( ) ) ;
178332 Assert . IsNull ( query2 . Select ( g => g . Geometry . STM ( ) ) . Single ( ) ) ;
333+
334+ var query3 = db . TestGeometries . Where ( g => g . Id == 3 ) ;
335+ Assert . IsNull ( query3 . Select ( g => g . Geometry . STX ( ) ) . Single ( ) ) ;
336+ Assert . IsNull ( query3 . Select ( g => g . Geometry . STY ( ) ) . Single ( ) ) ;
337+ Assert . IsNull ( query2 . Select ( g => g . Geometry . STZ ( ) ) . Single ( ) ) ;
338+ Assert . IsNull ( query2 . Select ( g => g . Geometry . STM ( ) ) . Single ( ) ) ;
179339 }
180340 }
181341 }
0 commit comments