int main(int argc, char *argv[]) { static struct option long_options[] = { {"debug", no_argument, 0, 'd'}, {"help", no_argument, 0, 'h'}, {"host", required_argument, 0, 'c'}, {"port", required_argument, 0, 'p'}, {"db", required_argument, 0, 'b'}, {"user", required_argument, 0, 'u'}, {"pass", required_argument, 0, 'w'}, {0, 0, 0, 0} }; bool debug = false; std::string host=""; std::string port=""; std::string db=""; std::string user=""; std::string pass=""; while (true) { int c = getopt_long(argc, argv, "dhc:p:b:u:w:", long_options, 0); if (c == -1) { break; } switch (c) { case 'd': debug = true; break; case 'h': print_help(); exit(0); case 'c': host = optarg; break; case 'p': port = optarg; break; case 'b': db = optarg; break; case 'u': user = optarg; break; case 'w': pass = optarg; break; default: exit(1); } } int remaining_args = argc - optind; if ( (remaining_args != 1) || host.empty() || db.empty() || user.empty() ) { std::cerr << "You are doin' it wrong. Use -h to get help." << std::endl; exit(1); } std::string input = argv[optind]; std::string conninfo = "dbname = " + db + " host = " + host + " user = "******" password = " + pass; // hide cmd line args for (int i=1;i<argc;++i) { unsigned int len = strlen(argv[i]); for(unsigned int j=0;j<len;++j) { argv[i][j]=0; } } Osmium::Framework osmium(debug); Osmium::OSMFile infile(input); pgCopyHandler handler(conninfo); infile.read(handler); }
int main(int argc, char *argv[]) { bool two_passes = false; bool attempt_repair = true; std::string javascript_filename; std::string osm_filename; std::vector<std::string> include_files; enum location_store_t { NONE, ARRAY, DISK, SPARSETABLE } location_store = NONE; static struct option long_options[] = { {"debug", no_argument, 0, 'd'}, {"include", required_argument, 0, 'i'}, {"javascript", required_argument, 0, 'j'}, {"help", no_argument, 0, 'h'}, {"location-store", required_argument, 0, 'l'}, {"no-repair", no_argument, 0, 'r'}, {"2pass", no_argument, 0, '2'}, {0, 0, 0, 0} }; bool debug = false; while (1) { int c = getopt_long(argc, argv, "dhi:j:l:r2", long_options, 0); if (c == -1) break; switch (c) { case 'd': debug = true; break; case 'i': { std::string f(optarg); include_files.push_back(find_include_file(f)); break; } case 'j': javascript_filename = optarg; break; case 'h': print_help(); exit(0); case 'l': if (!strcmp(optarg, "none")) { location_store = NONE; } else if (!strcmp(optarg, "array")) { location_store = ARRAY; } else if (!strcmp(optarg, "disk")) { location_store = DISK; } else if (!strcmp(optarg, "sparsetable")) { location_store = SPARSETABLE; } else { std::cerr << "Unknown location store: " << optarg << " (available are: 'none, 'array', 'disk' and 'sparsetable')" << std::endl; exit(1); } break; case 'r': attempt_repair = false; break; case '2': two_passes = true; break; default: exit(1); } } if (javascript_filename.empty()) { std::cerr << "No --javascript/-j option given" << std::endl; exit(1); } if (optind >= argc) { std::cerr << "Usage: " << argv[0] << " [OPTIONS] OSMFILE [SCRIPT_ARG ...]" << std::endl; exit(1); } else { osm_filename = argv[optind]; } if (two_passes && osm_filename == "-") { std::cerr << "Can't read from stdin when in dual-pass mode" << std::endl; exit(1); } Osmium::Framework osmium(debug); Osmium::OSMFile infile(osm_filename); v8::HandleScope handle_scope; v8::Handle<v8::ObjectTemplate> global_template = v8::ObjectTemplate::New(); global_template->Set(v8::String::New("print"), v8::FunctionTemplate::New(Osmium::Handler::Javascript::Print)); global_template->Set(v8::String::New("include"), v8::FunctionTemplate::New(Osmium::Handler::Javascript::Include)); global_context = v8::Persistent<v8::Context>::New(v8::Context::New(0, global_template)); v8::Context::Scope context_scope(global_context); // put rest of the arguments into Javascript argv array v8::Handle<v8::Array> js_argv = v8::Array::New(argc-optind-1); for (int i=optind+1; i<argc; ++i) { v8::Local<v8::Integer> ii = v8::Integer::New(i-(optind+1)); v8::Local<v8::String> s = v8::String::New(argv[i]); js_argv->Set(ii, s); } global_context->Global()->Set(v8::String::New("argv"), js_argv); Osmium::Javascript::Template::init(); Osmium::Handler::NodeLocationStore *handler_node_location_store; if (location_store == ARRAY) { handler_node_location_store = new Osmium::Handler::NLS_Array(); } else if (location_store == DISK) { handler_node_location_store = new Osmium::Handler::NLS_Disk(); } else if (location_store == SPARSETABLE) { handler_node_location_store = new Osmium::Handler::NLS_Sparsetable(); } else { handler_node_location_store = NULL; } handler_javascript = new Osmium::Handler::Javascript(include_files, javascript_filename.c_str()); if (two_passes) { Osmium::Handler::Multipolygon *handler_multipolygon = new Osmium::Handler::Multipolygon(attempt_repair, cbmp); infile.read<DualPass1>(new DualPass1(handler_node_location_store, handler_multipolygon, handler_javascript)); infile.read<DualPass2>(new DualPass2(handler_node_location_store, handler_multipolygon, handler_javascript)); delete handler_multipolygon; } else { infile.read<SinglePass>(new SinglePass(handler_node_location_store, handler_javascript)); } delete handler_javascript; delete handler_node_location_store; global_context.Dispose(); }
int main(int argc, char *argv[]) { static struct option long_options[] = { {"debug", no_argument, 0, 'd'}, {"help", no_argument, 0, 'h'}, {"from-format", required_argument, 0, 'f'}, {"to-format", required_argument, 0, 't'}, {0, 0, 0, 0} }; bool debug = false; std::string input_format; std::string output_format; while (true) { int c = getopt_long(argc, argv, "dhf:t:", long_options, 0); if (c == -1) { break; } switch (c) { case 'd': debug = true; break; case 'h': print_help(); exit(0); case 'f': input_format = optarg; break; case 't': output_format = optarg; break; default: exit(1); } } std::string input; std::string output; int remaining_args = argc - optind; if (remaining_args > 2) { std::cerr << "Usage: " << argv[0] << " [OPTIONS] [INFILE [OUTFILE]]" << std::endl; exit(1); } else if (remaining_args == 2) { input = argv[optind]; output = argv[optind+1]; } else if (remaining_args == 1) { input = argv[optind]; } Osmium::Framework osmium(debug); Osmium::OSMFile infile(input); if (!input_format.empty()) { try { infile.set_type_and_encoding(input_format); } catch (Osmium::OSMFile::ArgumentError& e) { std::cerr << "Unknown format for input: " << e.value() << std::endl; exit(1); } } Osmium::OSMFile* outfile = new Osmium::OSMFile(output); if (!output_format.empty()) { try { outfile->set_type_and_encoding(output_format); } catch (Osmium::OSMFile::ArgumentError& e) { std::cerr << "Unknown format for output: " << e.value() << std::endl; exit(1); } } if (infile.get_type() == Osmium::OSMFile::FileType::OSM() && outfile->get_type() == Osmium::OSMFile::FileType::History()) { std::cerr << "Warning! You are converting from an OSM file without history information to one with history information.\nThis will almost certainly not do what you want!" << std::endl; } else if (infile.get_type() == Osmium::OSMFile::FileType::History() && outfile->get_type() == Osmium::OSMFile::FileType::OSM()) { std::cerr << "Warning! You are converting from an OSM file with history information to one without history information.\nThis will almost certainly not do what you want!" << std::endl; } else if (infile.get_type() != outfile->get_type()) { std::cerr << "Warning! Source and destination are not of the same type." << std::endl; } ConvertHandler *handler_convert = new ConvertHandler(outfile); infile.read<ConvertHandler>(handler_convert); delete handler_convert; }