Skip to content

Commit 68dcc18

Browse files
committed
Code cleanup of GeometryOutput class
1 parent 9b2f764 commit 68dcc18

File tree

2 files changed

+396
-194
lines changed

2 files changed

+396
-194
lines changed

LinqToDBPostGisNetTopologySuite.Tests/GeometryOutputTests.cs

Lines changed: 112 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
using LinqToDB;
55
using NUnit.Framework;
66

7+
using NTSG = NetTopologySuite.Geometries.Geometry;
8+
79
namespace LinqToDBPostGisNetTopologySuite.Tests
810
{
911
[TestFixture]
@@ -18,6 +20,23 @@ public void Setup()
1820
}
1921
}
2022

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+
2140
[Test]
2241
public void TestSTAsText()
2342
{
@@ -28,7 +47,16 @@ public void TestSTAsText()
2847
Assert.AreEqual("POINT(-71.064544 42.28787)", db.Select(() => GeometryOutput.STAsText(g1)));
2948
Assert.AreEqual("POINT(-71.065 42.288)", db.Select(() => GeometryOutput.STAsText(g1, 3)));
3049
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)));
3260
}
3361
}
3462

@@ -37,8 +65,8 @@ public void TestSTAsBinary()
3765
{
3866
using (var db = new PostGisTestDataConnection(TestDatabaseConnectionString))
3967
{
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();
4270

4371
var wkb = db.TestGeometries.Select(g => g.Geometry.STAsBinary()).Single();
4472

@@ -48,13 +76,13 @@ public void TestSTAsBinary()
4876
Assert.AreEqual(2, BitConverter.ToDouble(wkb, 5));
4977
Assert.AreEqual(4, BitConverter.ToDouble(wkb, 13));
5078

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))";
5280

53-
var wkbLittleEndian = db.Select(() => GeometryInput.STGeometryFromText(wkt2).STAsBinary(EndiannessEncoding.LittleEndian));
81+
var wkbLittleEndian = db.Select(() => GeometryInput.STGeometryFromText(Wkt2).STAsBinary(EndiannessEncoding.LittleEndian));
5482
Assert.AreEqual(1, wkbLittleEndian[0]);
5583
Assert.AreEqual(3, wkbLittleEndian[1]);
5684

57-
var wkbBigEndian = db.Select(() => GeometryInput.STGeometryFromText(wkt2).STAsBinary(EndiannessEncoding.BigEndian));
85+
var wkbBigEndian = db.Select(() => GeometryInput.STGeometryFromText(Wkt2).STAsBinary(EndiannessEncoding.BigEndian));
5886
Assert.AreEqual(0, wkbBigEndian[0]);
5987
Assert.AreEqual(3, wkbBigEndian[4]);
6088

@@ -67,12 +95,24 @@ public void TestSTAsHEXEWKB()
6795
{
6896
using (var db = new PostGisTestDataConnection(TestDatabaseConnectionString))
6997
{
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));
71101

72102
var hexewkb = db.Select(() => GeometryOutput.STAsHEXEWKB(g1));
73-
Assert.AreEqual("0103000020E61000000100000005000000000000000000000000000000000000000000000000000000000000000000F03F000000000000F03F000000000000F03F000000000000F03F000000000000000000000000000000000000000000000000", hexewkb);
103+
Assert.AreEqual(HexEwkb, hexewkb);
74104

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)));
76116
}
77117
}
78118

@@ -81,12 +121,16 @@ public void TestSTAsEncodedPolyline()
81121
{
82122
using (var db = new PostGisTestDataConnection(TestDatabaseConnectionString))
83123
{
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);
85128

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)));
88132

89-
Assert.IsNull(db.Select(() => GeometryOutput.STAsEncodedPolyline(null)));
133+
Assert.IsNull(db.Select(() => GeometryOutput.STAsEncodedPolyline((NTSG)null)));
90134
}
91135
}
92136

@@ -95,8 +139,8 @@ public void TestSTAsGeoJSON()
95139
{
96140
using (var db = new PostGisTestDataConnection(TestDatabaseConnectionString))
97141
{
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();
100144

101145
var geojson1 = db.TestGeometries.Where(g => g.Id == 1).Select(g => g.Geometry.STAsGeoJSON()).Single();
102146
Assert.AreEqual("{\"type\":\"Point\",\"coordinates\":[2.48,4.75]}", geojson1);
@@ -105,15 +149,15 @@ public void TestSTAsGeoJSON()
105149
Assert.AreEqual("{\"type\":\"Point\",\"coordinates\":[2.5,4.8]}", geojson1crs);
106150

107151

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();
110154

111155
var geojson2 = db.TestGeometries.Where(g => g.Id == 2).Select(g => g.Geometry.STAsGeoJSON()).Single();
112156
Assert.AreEqual("{\"type\":\"LineString\",\"coordinates\":[[1,2,3],[4,5,6]]}", geojson2);
113157

114158

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();
117161

118162
var geojson3 = db.TestGeometries.Where(g => g.Id == 3).Select(g => g.Geometry.STAsGeoJSON()).Single();
119163
Assert.AreEqual("{\"type\":\"Point\",\"crs\":{\"type\":\"name\",\"properties\":{\"name\":\"EPSG:3857\"}},\"coordinates\":[2.48,4.75]}", geojson3);
@@ -143,6 +187,20 @@ public void TestSTAsGML()
143187
}
144188
}
145189

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+
146204
[Test]
147205
public void TestSTAsLatLonText()
148206
{
@@ -161,20 +219,25 @@ public void TestSTAsLatLonText()
161219
}
162220

163221
[Test]
164-
public void TestSTAsKML()
222+
public void TestSTAsMVTGeom()
165223
{
166224
using (var db = new PostGisTestDataConnection(TestDatabaseConnectionString))
167225
{
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)";
169228

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))"));
172230

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)));
174238
}
175239
}
176240

177-
178241
[Test]
179242
public void TestSTAsSVG()
180243
{
@@ -194,17 +257,37 @@ public void TestSTAsTWKB()
194257
{
195258
using (var db = new PostGisTestDataConnection(TestDatabaseConnectionString))
196259
{
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)"));
200261

262+
var twkb1 = db.Select(() => GeometryOutput.STAsTWKB(line));
201263
Assert.AreEqual(7, twkb1.Length);
202264
Assert.IsTrue(twkb1.SequenceEqual(new byte[] { 0x02, 0x00, 0x02, 0x02, 0x02, 0x08, 0x08 }));
203265

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+
204270
Assert.IsNull(db.Select(() => GeometryOutput.STAsBinary(null, EndiannessEncoding.BigEndian)));
205271
}
206272
}
207273

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+
208291
[Test]
209292
public void TestSTGeoHash()
210293
{
@@ -228,4 +311,4 @@ public void TestSTGeoHash()
228311
}
229312
}
230313
}
231-
}
314+
}

0 commit comments

Comments
 (0)