void write_header(const osmium::io::Header& header) override final { std::string out = "<?xml version='1.0' encoding='UTF-8'?>\n"; if (m_file.is_true("xml_change_format")) { out += "<osmChange version=\"0.6\" generator=\""; xml_string(out, header.get("generator").c_str()); out += "\">\n"; } else { out += "<osm version=\"0.6\""; std::string xml_josm_upload = header.get("xml_josm_upload"); if (xml_josm_upload == "true" || xml_josm_upload == "false") { out += " upload=\""; out += xml_josm_upload; out += "\""; } out += " generator=\""; xml_string(out, header.get("generator").c_str()); out += "\">\n"; } for (const auto& box : header.boxes()) { out += " <bounds"; oprintf(out, " minlon=\"%.7f\"", box.bottom_left().lon()); oprintf(out, " minlat=\"%.7f\"", box.bottom_left().lat()); oprintf(out, " maxlon=\"%.7f\"", box.top_right().lon()); oprintf(out, " maxlat=\"%.7f\"/>\n", box.top_right().lat()); } std::promise<std::string> promise; m_output_queue.push(promise.get_future()); promise.set_value(std::move(out)); }