diff --git a/lib/merge_input_reader.cc b/lib/merge_input_reader.cc index 62a91f8..18c588d 100644 --- a/lib/merge_input_reader.cc +++ b/lib/merge_input_reader.cc @@ -32,6 +32,7 @@ namespace { */ class copy_first_with_id { osmium::io::Writer* writer; + osmium::item_type type = osmium::item_type::undefined; osmium::object_id_type id = 0; public: @@ -44,10 +45,11 @@ namespace { } void push_back(const osmium::OSMObject& obj) { - if (obj.id() != id) { + if (obj.id() != id || obj.type() != type) { if (obj.visible()) { (*writer)(obj); } + type = obj.type(); id = obj.id(); } } diff --git a/test/test_merge_input_reader.py b/test/test_merge_input_reader.py index 94dd5b1..50f5076 100644 --- a/test/test_merge_input_reader.py +++ b/test/test_merge_input_reader.py @@ -99,3 +99,29 @@ def test_multibuffer_simplify(adder, tmp_path): mir.apply(h, simplify=True) assert h.data == ['N1/1', 'N2/1', 'W3/2'] + + +def test_apply_to_reader_same_id_different_type(tmp_path): + mir = osmium.MergeInputReader() + mir.add_buffer(b"r1 v2 Mw1@", format='opl') + + infile = tmp_path / 'input.opl' + infile.write_text(dedent("""\ + n1 v1 x1 y1 + w1 v1 Nn1 + r1 v1 Mw1@ + """)) + outfile = tmp_path / 'output.opl' + + reader = osmium.io.Reader(str(infile)) + writer = osmium.io.Writer(str(outfile)) + try: + mir.apply_to_reader(reader, writer) + finally: + reader.close() + writer.close() + + h = ListHandler() + osmium.apply(str(outfile), h) + + assert h.data == ['N1/1', 'W1/1', 'R1/2']