@@ -204,6 +204,25 @@ prepare_input_files(std::vector<std::string> const &input_files,
204204 return files;
205205}
206206
207+ static void apply (osmium::OSMObject &object, osmdata_t &osmdata,
208+ progress_display_t &progress)
209+ {
210+ static osmium::item_type last_type = osmium::item_type::node;
211+
212+ if (last_type != object.type ()) {
213+ if (last_type == osmium::item_type::node) {
214+ osmdata.after_nodes ();
215+ progress.after_nodes ();
216+ } else if (last_type == osmium::item_type::way) {
217+ osmdata.after_ways ();
218+ progress.after_ways ();
219+ }
220+ last_type = object.type ();
221+ }
222+
223+ osmium::apply_item (object, osmdata, progress);
224+ }
225+
207226void process_file (osmium::io::File const &file, osmdata_t &osmdata,
208227 progress_display_t &progress, bool append)
209228{
@@ -218,11 +237,12 @@ void process_file(osmium::io::File const &file, osmdata_t &osmdata,
218237 " Input file contains deleted objects but "
219238 " you are not in append mode." };
220239 }
221- osmium::apply_item (object, osmdata, progress);
240+ apply (object, osmdata, progress);
222241 }
223242 }
224243
225- osmdata.flush ();
244+ osmdata.after_relations ();
245+ progress.after_relations ();
226246
227247 reader.close ();
228248}
@@ -258,7 +278,7 @@ void process_files(std::vector<osmium::io::File> const &files,
258278 " Input file contains deleted objects but "
259279 " you are not in append mode." };
260280 }
261- osmium::apply_item (element.object (), osmdata, progress);
281+ apply (element.object (), osmdata, progress);
262282 }
263283
264284 auto *source = element.data_source ();
@@ -267,7 +287,8 @@ void process_files(std::vector<osmium::io::File> const &files,
267287 }
268288 }
269289
270- osmdata.flush ();
290+ osmdata.after_relations ();
291+ progress.after_relations ();
271292
272293 for (auto &data_source : data_sources) {
273294 data_source.close ();
0 commit comments