Example #1
0
bool CommandCat::setup(const std::vector<std::string>& arguments) {
    po::options_description opts_cmd{"COMMAND OPTIONS"};
    opts_cmd.add_options()
    ("object-type,t", po::value<std::vector<std::string>>(), "Read only objects of given type (node, way, relation, changeset)")
    ;

    po::options_description opts_common{add_common_options()};
    po::options_description opts_input{add_multiple_inputs_options()};
    po::options_description opts_output{add_output_options()};

    po::options_description hidden;
    hidden.add_options()
    ("input-filenames", po::value<std::vector<std::string>>(), "Input files")
    ;

    po::options_description desc;
    desc.add(opts_cmd).add(opts_common).add(opts_input).add(opts_output);

    po::options_description parsed_options;
    parsed_options.add(desc).add(hidden);

    po::positional_options_description positional;
    positional.add("input-filenames", -1);

    po::variables_map vm;
    po::store(po::command_line_parser(arguments).options(parsed_options).positional(positional).run(), vm);
    po::notify(vm);

    setup_common(vm, desc);
    setup_input_files(vm);
    setup_output_file(vm);

    return true;
}
Example #2
0
bool CommandSort::setup(const std::vector<std::string>& arguments) {
    po::options_description opts_common{add_common_options()};
    po::options_description opts_input{add_multiple_inputs_options()};
    po::options_description opts_output{add_output_options()};

    po::options_description hidden;
    hidden.add_options()
    ("input-filenames", po::value<std::vector<std::string>>(), "OSM input files")
    ("strategy,s", po::value<std::string>(), "Strategy (default: simple)")
    ;

    po::options_description desc;
    desc.add(opts_common).add(opts_input).add(opts_output);

    po::options_description parsed_options;
    parsed_options.add(desc).add(hidden);

    po::positional_options_description positional;
    positional.add("input-filenames", -1);

    po::variables_map vm;
    po::store(po::command_line_parser(arguments).options(parsed_options).positional(positional).run(), vm);
    po::notify(vm);

    setup_common(vm, desc);
    setup_progress(vm);
    setup_input_files(vm);
    setup_output_file(vm);

    if (vm.count("input-filenames")) {
        m_filenames = vm["input-filenames"].as<std::vector<std::string>>();
    }

    if (vm.count("strategy")) {
        m_strategy = vm["strategy"].as<std::string>();
        if (m_strategy != "simple" && m_strategy != "multipass") {
            throw argument_error{"Unknown strategy: " + m_strategy};
        }
    }

    return true;
}
bool CommandMergeChanges::setup(const std::vector<std::string>& arguments) {
    po::options_description cmdline("Available options");
    cmdline.add_options()
    ("simplify,s", "Simplify change")
    ;

    add_common_options(cmdline);
    add_multiple_inputs_options(cmdline);
    add_output_options(cmdline);

    po::options_description hidden("Hidden options");
    hidden.add_options()
    ("input-filenames", po::value<std::vector<std::string>>(), "Input files")
    ;

    po::options_description desc("Allowed options");
    desc.add(cmdline).add(hidden);

    po::positional_options_description positional;
    positional.add("input-filenames", -1);

    po::variables_map vm;
    po::store(po::command_line_parser(arguments).options(desc).positional(positional).run(), vm);
    po::notify(vm);

    if (vm.count("help")) {
        std::cout << "Usage: osmium merge-changes [OPTIONS] OSM-CHANGE-FILE...\n\n";
        std::cout << cmdline << "\n";
        exit(0);
    }

    setup_common(vm);
    setup_input_files(vm);
    setup_output_file(vm);

    if (vm.count("simplify")) {
        m_simplify_change = true;
    }

    return true;
}
bool CommandAddRefs::setup(const std::vector<std::string>& arguments) {
    po::options_description cmdline("Available options");
    cmdline.add_options()
    ("id-file,i", po::value<std::string>(), "Read OSM IDs from given file")
    ("source,s", po::value<std::string>(), "Source file supplying the referenced objects")
    ("source-format", po::value<std::string>(), "Format of source file")
    ;

    add_common_options(cmdline);
    add_multiple_inputs_options(cmdline);
    add_output_options(cmdline);

    po::options_description hidden("Hidden options");
    hidden.add_options()
    ("input-filenames", po::value<std::vector<std::string>>(), "OSM input files")
    ;

    po::options_description desc("Allowed options");
    desc.add(cmdline).add(hidden);

    po::positional_options_description positional;
    positional.add("input-filenames", -1);

    po::variables_map vm;
    po::store(po::command_line_parser(arguments).options(desc).positional(positional).run(), vm);
    po::notify(vm);

    if (vm.count("help")) {
        std::cout << "Usage: osmium add-refs [OPTIONS] -s OSM-DATA-FILE OSM-DATA-FILE...\n"
                  << "       osmium add-refs [OPTIONS] -s OSM-DATA-FILE -i ID-FILE\n\n";
        std::cout << cmdline << "\n";
        exit(0);
    }

    setup_common(vm);
    setup_input_files(vm, true);
    setup_output_file(vm);

    if (vm.count("id-file")) {
        std::string filename = vm["id-file"].as<std::string>();

        std::ifstream id_file{filename};
        if (!id_file.is_open()) {
            throw argument_error("Could not open file '" + filename + "'");
        }

        for (std::string line; std::getline(id_file, line); ) {
            if (line.empty() || line[0] == '#') {
                continue;
            }
            auto pos = line.find(' ');
            if (pos != std::string::npos) {
                line = line.erase(pos);
            }
            parse_and_add_id(line);
        }
    }

    if (vm.count("source")) {
        m_source_filename = vm["source"].as<std::string>();
    }

    if (vm.count("source-format")) {
        m_source_format = vm["source-format"].as<std::string>();
    }

    m_source_file = osmium::io::File{m_source_filename, m_source_format};

    return true;
}