@@ -299,3 +299,45 @@ TEST_CASE("create_multilinestring from P shape with closed way", "[NoDB]")
299299 REQUIRE (ml[0 ] == expected[0 ]);
300300 REQUIRE (ml[1 ] == expected[1 ]);
301301}
302+
303+ TEST_CASE (" create_multilinestring and simplify" , " [NoDB]" )
304+ {
305+ test_buffer_t buffer;
306+ buffer.add_way (" w20 Nn10x1y1,n11x1y2,n12x1y3" );
307+ buffer.add_way (" w21 Nn12x1y3,n13x2y3,n11x1y2" );
308+
309+ auto const geom =
310+ geom::create_multilinestring (buffer.buffer ());
311+
312+ REQUIRE (geom.is_multilinestring ());
313+ REQUIRE (geom.srid () == 4326 );
314+ auto const &mls = geom.get <geom::multilinestring_t >();
315+ REQUIRE (mls.num_geometries () == 2 );
316+ REQUIRE (mls[0 ] == geom::linestring_t {{1 , 1 }, {1 , 2 }, {1 , 3 }});
317+ REQUIRE (mls[1 ] == geom::linestring_t {{1 , 3 }, {2 , 3 }, {1 , 2 }});
318+
319+ SECTION (" simplify with small tolerance" )
320+ {
321+ auto const simplified_geom = geom::simplify (geom, 0.1 );
322+ REQUIRE (simplified_geom.is_multilinestring ());
323+ REQUIRE (simplified_geom.srid () == 4326 );
324+ auto const &simplified_mls =
325+ simplified_geom.get <geom::multilinestring_t >();
326+ REQUIRE (simplified_mls.num_geometries () == 2 );
327+ REQUIRE (simplified_mls[0 ] == geom::linestring_t {{1 , 1 }, {1 , 3 }});
328+ REQUIRE (simplified_mls[1 ] ==
329+ geom::linestring_t {{1 , 3 }, {2 , 3 }, {1 , 2 }});
330+ }
331+
332+ SECTION (" simplify with large tolerance" )
333+ {
334+ auto const simplified_geom = geom::simplify (geom, 10.0 );
335+ REQUIRE (simplified_geom.is_multilinestring ());
336+ REQUIRE (simplified_geom.srid () == 4326 );
337+ auto const &simplified_mls =
338+ simplified_geom.get <geom::multilinestring_t >();
339+ REQUIRE (simplified_mls.num_geometries () == 2 );
340+ REQUIRE (simplified_mls[0 ] == geom::linestring_t {{1 , 1 }, {1 , 3 }});
341+ REQUIRE (simplified_mls[1 ] == geom::linestring_t {{1 , 3 }, {1 , 2 }});
342+ }
343+ }
0 commit comments