4
4
using LinqToDB ;
5
5
using NUnit . Framework ;
6
6
7
+ using NTSG = NetTopologySuite . Geometries . Geometry ;
8
+
7
9
namespace LinqToDBPostGisNetTopologySuite . Tests
8
10
{
9
11
[ TestFixture ]
@@ -18,6 +20,23 @@ public void Setup()
18
20
}
19
21
}
20
22
23
+ [ Test ]
24
+ public void TestSTAsEWKT ( )
25
+ {
26
+ using ( var db = new PostGisTestDataConnection ( TestDatabaseConnectionString ) )
27
+ {
28
+ Assert . AreEqual (
29
+ "SRID=4326;POLYGON((0 0,0 1,1 1,1 0,0 0))" ,
30
+ db . Select ( ( ) => GeometryOutput . STAsEWKT ( "0103000020E61000000100000005000000000000000000000000000000000000000000000000000000000000000000F03F000000000000F03F000000000000F03F000000000000F03F000000000000000000000000000000000000000000000000" ) ) ) ;
31
+
32
+ Assert . AreEqual (
33
+ "CIRCULARSTRING(220268 150415 1,220227 150505 2,220227 150406 3)" ,
34
+ db . Select ( ( ) => GeometryOutput . STAsEWKT ( "0108000080030000000000000060E30A4100000000785C0241000000000000F03F0000000018E20A4100000000485F024100000000000000400000000018E20A4100000000305C02410000000000000840" ) ) ) ;
35
+
36
+ Assert . IsNull ( db . Select ( ( ) => GeometryOutput . STAsEWKT ( ( NTSG ) null ) ) ) ;
37
+ }
38
+ }
39
+
21
40
[ Test ]
22
41
public void TestSTAsText ( )
23
42
{
@@ -28,7 +47,16 @@ public void TestSTAsText()
28
47
Assert . AreEqual ( "POINT(-71.064544 42.28787)" , db . Select ( ( ) => GeometryOutput . STAsText ( g1 ) ) ) ;
29
48
Assert . AreEqual ( "POINT(-71.065 42.288)" , db . Select ( ( ) => GeometryOutput . STAsText ( g1 , 3 ) ) ) ;
30
49
Assert . AreEqual ( "POINT(-71 42)" , db . Select ( ( ) => GeometryOutput . STAsText ( g1 , 0 ) ) ) ;
31
- Assert . IsNull ( db . Select ( ( ) => GeometryOutput . STAsText ( null ) ) ) ;
50
+
51
+ Assert . AreEqual (
52
+ "POLYGON((0 0,0 1,1 1,1 0,0 0))" ,
53
+ db . Select ( ( ) => GeometryOutput . STAsText ( "01030000000100000005000000000000000000000000000000000000000000000000000000000000000000F03F000000000000F03F000000000000F03F000000000000F03F000000000000000000000000000000000000000000000000" ) ) ) ;
54
+
55
+ Assert . AreEqual (
56
+ "POINT(111.11 1.11)" ,
57
+ db . Select ( ( ) => GeometryOutput . STAsText ( GeometryInput . STGeomFromEWKT ( "SRID=4326;POINT(111.1111111 1.1111111)" ) , 2 ) ) ) ;
58
+
59
+ Assert . IsNull ( db . Select ( ( ) => GeometryOutput . STAsText ( ( NTSG ) null ) ) ) ;
32
60
}
33
61
}
34
62
@@ -37,8 +65,8 @@ public void TestSTAsBinary()
37
65
{
38
66
using ( var db = new PostGisTestDataConnection ( TestDatabaseConnectionString ) )
39
67
{
40
- const string wkt1 = "POINT(2.0 4.0)" ;
41
- db . TestGeometries . Value ( g => g . Id , 1 ) . Value ( p => p . Geometry , ( ) => GeometryInput . STGeomFromText ( wkt1 ) ) . Insert ( ) ;
68
+ const string Wkt1 = "POINT(2.0 4.0)" ;
69
+ db . TestGeometries . Value ( g => g . Id , 1 ) . Value ( p => p . Geometry , ( ) => GeometryInput . STGeomFromText ( Wkt1 ) ) . Insert ( ) ;
42
70
43
71
var wkb = db . TestGeometries . Select ( g => g . Geometry . STAsBinary ( ) ) . Single ( ) ;
44
72
@@ -48,13 +76,13 @@ public void TestSTAsBinary()
48
76
Assert . AreEqual ( 2 , BitConverter . ToDouble ( wkb , 5 ) ) ;
49
77
Assert . AreEqual ( 4 , BitConverter . ToDouble ( wkb , 13 ) ) ;
50
78
51
- const string wkt2 = "POLYGON((0 0,0 1,1 1,1 0,0 0))" ;
79
+ const string Wkt2 = "POLYGON((0 0,0 1,1 1,1 0,0 0))" ;
52
80
53
- var wkbLittleEndian = db . Select ( ( ) => GeometryInput . STGeometryFromText ( wkt2 ) . STAsBinary ( EndiannessEncoding . LittleEndian ) ) ;
81
+ var wkbLittleEndian = db . Select ( ( ) => GeometryInput . STGeometryFromText ( Wkt2 ) . STAsBinary ( EndiannessEncoding . LittleEndian ) ) ;
54
82
Assert . AreEqual ( 1 , wkbLittleEndian [ 0 ] ) ;
55
83
Assert . AreEqual ( 3 , wkbLittleEndian [ 1 ] ) ;
56
84
57
- var wkbBigEndian = db . Select ( ( ) => GeometryInput . STGeometryFromText ( wkt2 ) . STAsBinary ( EndiannessEncoding . BigEndian ) ) ;
85
+ var wkbBigEndian = db . Select ( ( ) => GeometryInput . STGeometryFromText ( Wkt2 ) . STAsBinary ( EndiannessEncoding . BigEndian ) ) ;
58
86
Assert . AreEqual ( 0 , wkbBigEndian [ 0 ] ) ;
59
87
Assert . AreEqual ( 3 , wkbBigEndian [ 4 ] ) ;
60
88
@@ -67,12 +95,24 @@ public void TestSTAsHEXEWKB()
67
95
{
68
96
using ( var db = new PostGisTestDataConnection ( TestDatabaseConnectionString ) )
69
97
{
70
- var g1 = db . Select ( ( ) => GeometryInput . STGeometryFromText ( "POLYGON((0 0,0 1,1 1,1 0,0 0))" , 4326 ) ) ;
98
+ const string Wkt = "POLYGON((0 0,0 1,1 1,1 0,0 0))" ;
99
+ const string HexEwkb = "0103000020E61000000100000005000000000000000000000000000000000000000000000000000000000000000000F03F000000000000F03F000000000000F03F000000000000F03F000000000000000000000000000000000000000000000000" ;
100
+ var g1 = db . Select ( ( ) => GeometryInput . STGeometryFromText ( Wkt , 4326 ) ) ;
71
101
72
102
var hexewkb = db . Select ( ( ) => GeometryOutput . STAsHEXEWKB ( g1 ) ) ;
73
- Assert . AreEqual ( "0103000020E61000000100000005000000000000000000000000000000000000000000000000000000000000000000F03F000000000000F03F000000000000F03F000000000000F03F000000000000000000000000000000000000000000000000" , hexewkb ) ;
103
+ Assert . AreEqual ( HexEwkb , hexewkb ) ;
74
104
75
- Assert . IsNull ( db . Select ( ( ) => GeometryOutput . STAsHEXEWKB ( null ) ) ) ;
105
+ Assert . AreEqual ( HexEwkb , db . Select ( ( ) => GeometryOutput . STAsHEXEWKB ( "SRID=4326;" + Wkt ) ) ) ;
106
+
107
+ Assert . AreEqual (
108
+ "000000000140000000000000004010000000000000" ,
109
+ db . Select ( ( ) => GeometryOutput . STAsHEXEWKB ( GeometryConstructors . STMakePoint ( 2 , 4 ) , EndiannessEncoding . BigEndian ) ) ) ;
110
+
111
+ Assert . AreEqual (
112
+ "000000000140000000000000004010000000000000" ,
113
+ db . Select ( ( ) => GeometryOutput . STAsHEXEWKB ( "POINT(2.0 4.0)" , EndiannessEncoding . BigEndian ) ) ) ;
114
+
115
+ Assert . IsNull ( db . Select ( ( ) => GeometryOutput . STAsHEXEWKB ( ( NTSG ) null ) ) ) ;
76
116
}
77
117
}
78
118
@@ -81,12 +121,16 @@ public void TestSTAsEncodedPolyline()
81
121
{
82
122
using ( var db = new PostGisTestDataConnection ( TestDatabaseConnectionString ) )
83
123
{
84
- var g1 = db . Select ( ( ) => GeometryInput . STGeomFromEWKT ( "SRID=4326;LINESTRING(-120.2 38.5,-120.95 40.7,-126.453 43.252)" ) ) ;
124
+ const string Ewkt = "SRID=4326;LINESTRING(-120.2 38.5,-120.95 40.7,-126.453 43.252)" ;
125
+ var g1 = db . Select ( ( ) => GeometryInput . STGeomFromEWKT ( Ewkt ) ) ;
126
+ var ep = db . Select ( ( ) => GeometryOutput . STAsEncodedPolyline ( g1 ) ) ;
127
+ Assert . AreEqual ( "_p~iF~ps|U_ulLnnqC_mqNvxq`@" , ep ) ;
85
128
86
- var hexewkb = db . Select ( ( ) => GeometryOutput . STAsEncodedPolyline ( g1 ) ) ;
87
- Assert . AreEqual ( "_p~iF~ps|U_ulLnnqC_mqNvxq`@" , hexewkb ) ;
129
+ Assert . AreEqual (
130
+ "_p~iF~ps|U_ulLnnqC_mqNvxq`@" ,
131
+ db . Select ( ( ) => GeometryOutput . STAsEncodedPolyline ( Ewkt ) ) ) ;
88
132
89
- Assert . IsNull ( db . Select ( ( ) => GeometryOutput . STAsEncodedPolyline ( null ) ) ) ;
133
+ Assert . IsNull ( db . Select ( ( ) => GeometryOutput . STAsEncodedPolyline ( ( NTSG ) null ) ) ) ;
90
134
}
91
135
}
92
136
@@ -95,8 +139,8 @@ public void TestSTAsGeoJSON()
95
139
{
96
140
using ( var db = new PostGisTestDataConnection ( TestDatabaseConnectionString ) )
97
141
{
98
- const string wkt1 = "POINT(2.48 4.75)" ;
99
- db . TestGeometries . Value ( g => g . Id , 1 ) . Value ( p => p . Geometry , ( ) => GeometryInput . STGeomFromText ( wkt1 ) ) . Insert ( ) ;
142
+ const string Wkt1 = "POINT(2.48 4.75)" ;
143
+ db . TestGeometries . Value ( g => g . Id , 1 ) . Value ( p => p . Geometry , ( ) => GeometryInput . STGeomFromText ( Wkt1 ) ) . Insert ( ) ;
100
144
101
145
var geojson1 = db . TestGeometries . Where ( g => g . Id == 1 ) . Select ( g => g . Geometry . STAsGeoJSON ( ) ) . Single ( ) ;
102
146
Assert . AreEqual ( "{\" type\" :\" Point\" ,\" coordinates\" :[2.48,4.75]}" , geojson1 ) ;
@@ -105,15 +149,15 @@ public void TestSTAsGeoJSON()
105
149
Assert . AreEqual ( "{\" type\" :\" Point\" ,\" coordinates\" :[2.5,4.8]}" , geojson1crs ) ;
106
150
107
151
108
- const string wkt2 = "LINESTRING(1 2 3, 4 5 6)" ;
109
- db . TestGeometries . Value ( g => g . Id , 2 ) . Value ( p => p . Geometry , ( ) => GeometryInput . STGeomFromText ( wkt2 ) ) . Insert ( ) ;
152
+ const string Wkt2 = "LINESTRING(1 2 3, 4 5 6)" ;
153
+ db . TestGeometries . Value ( g => g . Id , 2 ) . Value ( p => p . Geometry , ( ) => GeometryInput . STGeomFromText ( Wkt2 ) ) . Insert ( ) ;
110
154
111
155
var geojson2 = db . TestGeometries . Where ( g => g . Id == 2 ) . Select ( g => g . Geometry . STAsGeoJSON ( ) ) . Single ( ) ;
112
156
Assert . AreEqual ( "{\" type\" :\" LineString\" ,\" coordinates\" :[[1,2,3],[4,5,6]]}" , geojson2 ) ;
113
157
114
158
115
- const string ewkt3 = "SRID=3857;POINT(2.48 4.75)" ;
116
- db . TestGeometries . Value ( g => g . Id , 3 ) . Value ( p => p . Geometry , ( ) => GeometryInput . STGeomFromEWKT ( ewkt3 ) ) . Insert ( ) ;
159
+ const string Ewkt3 = "SRID=3857;POINT(2.48 4.75)" ;
160
+ db . TestGeometries . Value ( g => g . Id , 3 ) . Value ( p => p . Geometry , ( ) => GeometryInput . STGeomFromEWKT ( Ewkt3 ) ) . Insert ( ) ;
117
161
118
162
var geojson3 = db . TestGeometries . Where ( g => g . Id == 3 ) . Select ( g => g . Geometry . STAsGeoJSON ( ) ) . Single ( ) ;
119
163
Assert . AreEqual ( "{\" type\" :\" Point\" ,\" crs\" :{\" type\" :\" name\" ,\" properties\" :{\" name\" :\" EPSG:3857\" }},\" coordinates\" :[2.48,4.75]}" , geojson3 ) ;
@@ -143,6 +187,20 @@ public void TestSTAsGML()
143
187
}
144
188
}
145
189
190
+ [ Test ]
191
+ public void TestSTAsKML ( )
192
+ {
193
+ using ( var db = new PostGisTestDataConnection ( TestDatabaseConnectionString ) )
194
+ {
195
+ var g1 = db . Select ( ( ) => GeometryInput . STGeomFromText ( "POLYGON((0 0,0 1,1 1,1 0,0 0))" , 4326 ) ) ;
196
+
197
+ var kml1 = db . Select ( ( ) => GeometryOutput . STAsKML ( g1 ) ) ;
198
+ Assert . AreEqual ( "<Polygon><outerBoundaryIs><LinearRing><coordinates>0,0 0,1 1,1 1,0 0,0</coordinates></LinearRing></outerBoundaryIs></Polygon>" , kml1 ) ;
199
+
200
+ Assert . IsNull ( db . Select ( ( ) => GeometryOutput . STAsKML ( null ) ) ) ;
201
+ }
202
+ }
203
+
146
204
[ Test ]
147
205
public void TestSTAsLatLonText ( )
148
206
{
@@ -161,20 +219,25 @@ public void TestSTAsLatLonText()
161
219
}
162
220
163
221
[ Test ]
164
- public void TestSTAsKML ( )
222
+ public void TestSTAsMVTGeom ( )
165
223
{
166
224
using ( var db = new PostGisTestDataConnection ( TestDatabaseConnectionString ) )
167
225
{
168
- var g1 = db . Select ( ( ) => GeometryInput . STGeomFromText ( "POLYGON((0 0,0 1,1 1,1 0,0 0))" , 4326 ) ) ;
226
+ const string ExpectedWkt = "MULTIPOLYGON(((5 4096,10 4091,10 4096,5 4096)),((5 4096,0 4101,0 4096,5 4096)))" ;
227
+ const string BoxWkt = "BOX(0 0,4096 4096)" ;
169
228
170
- var kml1 = db . Select ( ( ) => GeometryOutput . STAsKML ( g1 ) ) ;
171
- Assert . AreEqual ( "<Polygon><outerBoundaryIs><LinearRing><coordinates>0,0 0,1 1,1 1,0 0,0</coordinates></LinearRing></outerBoundaryIs></Polygon>" , kml1 ) ;
229
+ var poly = db . Select ( ( ) => GeometryInput . STGeomFromText ( "POLYGON ((0 0, 10 0, 10 5, 0 -5, 0 0))" ) ) ;
172
230
173
- Assert . IsNull ( db . Select ( ( ) => GeometryOutput . STAsKML ( null ) ) ) ;
231
+ var mvt1 = db . Select ( ( ) => poly . STAsMVTGeom ( BoxWkt ) . STAsText ( ) ) ;
232
+ Assert . AreEqual ( ExpectedWkt , mvt1 ) ;
233
+
234
+ var mvt2 = db . Select ( ( ) => poly . STAsMVTGeom ( BoxWkt , 4096 , 0 , false ) . STAsText ( ) ) ;
235
+ Assert . AreEqual ( ExpectedWkt , mvt2 ) ;
236
+
237
+ Assert . IsNull ( db . Select ( ( ) => GeometryOutput . STAsMVTGeom ( null , null ) ) ) ;
174
238
}
175
239
}
176
240
177
-
178
241
[ Test ]
179
242
public void TestSTAsSVG ( )
180
243
{
@@ -194,17 +257,37 @@ public void TestSTAsTWKB()
194
257
{
195
258
using ( var db = new PostGisTestDataConnection ( TestDatabaseConnectionString ) )
196
259
{
197
- var g1 = db . Select ( ( ) => GeometryInput . STGeomFromText ( "LINESTRING(1 1,5 5)" ) ) ;
198
-
199
- var twkb1 = db . Select ( ( ) => GeometryOutput . STAsTWKB ( g1 ) ) ;
260
+ var line = db . Select ( ( ) => GeometryInput . STGeomFromText ( "LINESTRING(1 1,5 5)" ) ) ;
200
261
262
+ var twkb1 = db . Select ( ( ) => GeometryOutput . STAsTWKB ( line ) ) ;
201
263
Assert . AreEqual ( 7 , twkb1 . Length ) ;
202
264
Assert . IsTrue ( twkb1 . SequenceEqual ( new byte [ ] { 0x02 , 0x00 , 0x02 , 0x02 , 0x02 , 0x08 , 0x08 } ) ) ;
203
265
266
+ var twkb2 = db . Select ( ( ) => GeometryOutput . STAsTWKB ( line , 0 , 0 , 0 , false , false ) ) ;
267
+ Assert . AreEqual ( 7 , twkb2 . Length ) ;
268
+ Assert . IsTrue ( twkb2 . SequenceEqual ( new byte [ ] { 0x02 , 0x00 , 0x02 , 0x02 , 0x02 , 0x08 , 0x08 } ) ) ;
269
+
204
270
Assert . IsNull ( db . Select ( ( ) => GeometryOutput . STAsBinary ( null , EndiannessEncoding . BigEndian ) ) ) ;
205
271
}
206
272
}
207
273
274
+ [ Test ]
275
+ public void TestSTAsX3D ( )
276
+ {
277
+ using ( var db = new PostGisTestDataConnection ( TestDatabaseConnectionString ) )
278
+ {
279
+ Assert . AreEqual (
280
+ "1 2" ,
281
+ db . Select ( ( ) => GeometryInput . STGeomFromText ( "POINT (1 2)" ) . STAsX3D ( ) ) ) ;
282
+
283
+ Assert . AreEqual (
284
+ "<LineSet vertexCount='2'><Coordinate point='1 1 5 5' /></LineSet>" ,
285
+ db . Select ( ( ) => GeometryInput . STGeomFromText ( "LINESTRING(1 1,5 5)" ) . STAsX3D ( ) ) ) ;
286
+
287
+ Assert . IsNull ( db . Select ( ( ) => GeometryOutput . STAsX3D ( null ) ) ) ;
288
+ }
289
+ }
290
+
208
291
[ Test ]
209
292
public void TestSTGeoHash ( )
210
293
{
@@ -228,4 +311,4 @@ public void TestSTGeoHash()
228
311
}
229
312
}
230
313
}
231
- }
314
+ }
0 commit comments