@@ -210,6 +210,81 @@ public void Types_still_unknown(string wkt)
210
210
( ) => reader . Read ( wkt ) ) ;
211
211
}
212
212
213
+ [ Theory ]
214
+ [ InlineData (
215
+ "POINT EMPTY" ,
216
+ "000000000100000000000000000001000000FFFFFFFFFFFFFFFF01" ) ]
217
+ [ InlineData (
218
+ "POINT (1 2)" ,
219
+ "000000000108000000000000F03F0000000000000040" ) ]
220
+ [ InlineData (
221
+ "POINT Z(1 2 3)" ,
222
+ "000000000109000000000000F03F00000000000000400000000000000840" ) ]
223
+ [ InlineData (
224
+ "LINESTRING EMPTY" ,
225
+ "000000000100000000000000000001000000FFFFFFFFFFFFFFFF02" ) ]
226
+ [ InlineData (
227
+ "LINESTRING (0 0, 0 1)" ,
228
+ "000000000110000000000000000000000000000000000000000000000000000000000000F03F" ) ]
229
+ [ InlineData (
230
+ "LINESTRING Z(0 0 1, 0 1 2)" ,
231
+ "000000000111000000000000000000000000000000000000000000000000000000000000F03F000000000000F03F0000000000000040" ) ]
232
+ //[InlineData(
233
+ // "LINESTRING (0 0, 0 1 2)",
234
+ // "000000000115000000000000000000000000000000000000000000000000000000000000F03F000000000000F8FF0000000000000040")]
235
+ [ InlineData (
236
+ "LINESTRING (0 0, 0 1, 0 2)" ,
237
+ "00000000010003000000000000000000000000000000000000000000000000000000000000000000F03F0000000000000000000000000000004001000000010000000001000000FFFFFFFF0000000002" ) ]
238
+ [ InlineData (
239
+ "LINESTRING Z(0 0 1, 0 1 2, 0 2 3)" ,
240
+ "00000000010103000000000000000000000000000000000000000000000000000000000000000000F03F00000000000000000000000000000040000000000000F03F0000000000000040000000000000084001000000010000000001000000FFFFFFFF0000000002" ) ]
241
+ [ InlineData (
242
+ "POLYGON EMPTY" ,
243
+ "000000000100000000000000000001000000FFFFFFFFFFFFFFFF03" ) ]
244
+ // 0xE61000000104000000000000000001000000FFFFFFFFFFFFFFFF03
245
+ [ InlineData (
246
+ "POLYGON ((0 0, 0 1, 1 1, 0 0))" ,
247
+ "00000000010004000000000000000000000000000000000000000000000000000000000000000000F03F000000000000F03F000000000000F03F0000000000000000000000000000000001000000020000000001000000FFFFFFFF0000000003" ) ]
248
+ [ InlineData (
249
+ "POLYGON ((0 0, 0 3, 3 3, 3 0, 0 0), (1 1, 1 2, 2 2, 2 1, 1 1))" ,
250
+ "0000000001000A0000000000000000000000000000000000000000000000000000000000000000000840000000000000084000000000000008400000000000000840000000000000000000000000000000000000000000000000000000000000F03F000000000000F03F000000000000F03F0000000000000040000000000000004000000000000000400000000000000040000000000000F03F000000000000F03F000000000000F03F020000000200000000000500000001000000FFFFFFFF0000000003" ) ]
251
+ [ InlineData (
252
+ "POLYGON ((0 0, 0 3, 3 3, 3 0, 0 0), (0 0, 0 2, 2 2, 2 0, 0 0))" ,
253
+ "0000000001000A00000000000000000000000000000000000000000000000000000000000000000008400000000000000840000000000000084000000000000008400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000004000000000000000400000000000000040000000000000000000000000000000000000000000000000020000000200000000000500000001000000FFFFFFFF0000000003" ) ]
254
+ [ InlineData (
255
+ "GEOMETRYCOLLECTION EMPTY" ,
256
+ "000000000100000000000000000001000000FFFFFFFFFFFFFFFF07" ) ]
257
+ [ InlineData (
258
+ "GEOMETRYCOLLECTION (POINT (0 0))" ,
259
+ "000000000100010000000000000000000000000000000000000001000000010000000002000000FFFFFFFF0000000007000000000000000001" ) ]
260
+ [ InlineData (
261
+ "GEOMETRYCOLLECTION (POINT (0 0), POINT (0 1))" ,
262
+ "00000000010002000000000000000000000000000000000000000000000000000000000000000000F03F020000000100000000010100000003000000FFFFFFFF0000000007000000000000000001000000000100000001" ) ]
263
+ [ InlineData (
264
+ "GEOMETRYCOLLECTION (POINT (0 0), POINT EMPTY, POINT (0 1))" ,
265
+ "00000000010002000000000000000000000000000000000000000000000000000000000000000000F03F020000000100000000010100000004000000FFFFFFFF000000000700000000000000000100000000FFFFFFFF01000000000100000001" ) ]
266
+ [ InlineData (
267
+ "GEOMETRYCOLLECTION (GEOMETRYCOLLECTION (POINT (0 1)))" ,
268
+ "000000000100010000000000000000000000000000000000F03F01000000010000000003000000FFFFFFFF0000000007000000000000000007010000000000000001" ) ]
269
+ [ InlineData (
270
+ "GEOMETRYCOLLECTION (POINT (0 0), GEOMETRYCOLLECTION (POINT (0 1)))" ,
271
+ "00000000010002000000000000000000000000000000000000000000000000000000000000000000F03F020000000100000000010100000004000000FFFFFFFF0000000007000000000000000001000000000100000007020000000100000001" ) ]
272
+ [ InlineData (
273
+ "MULTIPOINT ((0 0))" ,
274
+ "000000000100010000000000000000000000000000000000000001000000010000000002000000FFFFFFFF0000000004000000000000000001" ) ]
275
+ [ InlineData (
276
+ "MULTILINESTRING ((0 0, 0 1))" ,
277
+ "00000000010002000000000000000000000000000000000000000000000000000000000000000000F03F01000000010000000002000000FFFFFFFF0000000005000000000000000002" ) ]
278
+ [ InlineData (
279
+ "MULTIPOLYGON (((0 0, 0 1, 1 1, 0 0)))" ,
280
+ "00000000010004000000000000000000000000000000000000000000000000000000000000000000F03F000000000000F03F000000000000F03F0000000000000000000000000000000001000000020000000002000000FFFFFFFF0000000006000000000000000003" ) ]
281
+ public void Write_AllInvalid ( string wkt , string expected )
282
+ {
283
+ var geometry = new WKTReader ( ) { IsOldNtsCoordinateSyntaxAllowed = false } . Read ( wkt ) ;
284
+
285
+ Assert . Equal ( expected , Write ( geometry , geometryValidator : _ => false ) ) ;
286
+ }
287
+
213
288
[ Fact , Description ( "Issue 31" ) ]
214
289
public void Write_GC_with_MultiLineString_and_Polygon ( )
215
290
{
@@ -230,14 +305,20 @@ public void Write_GC_with_MultiLineString_and_Polygon()
230
305
private string Write (
231
306
Geometry geometry ,
232
307
Ordinates handleOrdinates = Ordinates . XYZM ,
233
- bool isGeography = false )
308
+ bool isGeography = false ,
309
+ Func < Geometry , bool > geometryValidator = default )
234
310
{
235
311
var writer = new SqlServerBytesWriter
236
312
{
237
313
HandleOrdinates = handleOrdinates ,
238
314
IsGeography = isGeography
239
315
} ;
240
316
317
+ if ( geometryValidator != default )
318
+ {
319
+ writer . GeometryValidator = geometryValidator ;
320
+ }
321
+
241
322
return string . Concat ( writer . Write ( geometry ) . Select ( b => b . ToString ( "X2" ) ) ) ;
242
323
}
243
324
}
0 commit comments