@@ -21,12 +21,94 @@ public void Setup()
2121 }
2222
2323 [ Test ]
24- public void TestSTArea ( )
24+ public void TestGeometryType ( )
2525 {
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+ }
2737
38+ [ Test ]
39+ public void TestSTBoundary ( )
40+ {
2841 using ( var db = new PostGisTestDataConnection ( TestDatabaseConnectionString ) )
2942 {
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
30112 const string wkt = "LINESTRING(0 0, 1 3)" ;
31113 db . Insert ( new TestGeometryEntity ( 1 , null ) ) ;
32114 var geometry = db . TestGeometries . Select ( g => GeometryInput . STGeomFromText ( wkt ) ) . Single ( ) ;
@@ -39,5 +121,125 @@ public void TestSTArea()
39121 Assert . AreEqual ( "POLYGON((0 0,0 3,1 3,1 0,0 0))" , envelope ) ;
40122 }
41123 }
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+ }
42244 }
43245}
0 commit comments