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