85 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /*
 | |
| 
 | |
|   EXAMPLE osmium_debug
 | |
| 
 | |
|   Dump the contents of the input file in a debug format.
 | |
| 
 | |
|   DEMONSTRATES USE OF:
 | |
|   * file input reading only some types
 | |
|   * the dump handler
 | |
| 
 | |
|   SIMPLER EXAMPLES you might want to understand first:
 | |
|   * osmium_read
 | |
|   * osmium_count
 | |
| 
 | |
|   LICENSE
 | |
|   The code in this example file is released into the Public Domain.
 | |
| 
 | |
| */
 | |
| 
 | |
| #include <cstdlib>  // for std::exit
 | |
| #include <iostream> // for std::cout, std::cerr
 | |
| #include <string>   // for std::string
 | |
| 
 | |
| // The Dump handler
 | |
| #include <osmium/handler/dump.hpp>
 | |
| 
 | |
| // Allow any format of input files (XML, PBF, ...)
 | |
| #include <osmium/io/any_input.hpp>
 | |
| 
 | |
| int main(int argc, char* argv[]) {
 | |
|     // Speed up output (not Osmium-specific)
 | |
|     std::ios_base::sync_with_stdio(false);
 | |
| 
 | |
|     if (argc < 2 || argc > 3) {
 | |
|         std::cerr << "Usage: " << argv[0] << " OSMFILE [TYPES]\n";
 | |
|         std::cerr << "TYPES can be any combination of 'n', 'w', 'r', and 'c' to indicate what types of OSM entities you want (default: all).\n";
 | |
|         std::exit(1);
 | |
|     }
 | |
| 
 | |
|     // Default is all entity types: nodes, ways, relations, and changesets
 | |
|     osmium::osm_entity_bits::type read_types = osmium::osm_entity_bits::all;
 | |
| 
 | |
|     // Get entity types from command line if there is a 2nd argument.
 | |
|     if (argc == 3) {
 | |
|         read_types = osmium::osm_entity_bits::nothing;
 | |
|         std::string types = argv[2];
 | |
|         if (types.find('n') != std::string::npos) {
 | |
|             read_types |= osmium::osm_entity_bits::node;
 | |
|         }
 | |
|         if (types.find('w') != std::string::npos) {
 | |
|             read_types |= osmium::osm_entity_bits::way;
 | |
|         }
 | |
|         if (types.find('r') != std::string::npos) {
 | |
|             read_types |= osmium::osm_entity_bits::relation;
 | |
|         }
 | |
|         if (types.find('c') != std::string::npos) {
 | |
|             read_types |= osmium::osm_entity_bits::changeset;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     // Initialize Reader with file name and the types of entities we want to
 | |
|     // read.
 | |
|     osmium::io::Reader reader{argv[1], read_types};
 | |
| 
 | |
|     // The file header can contain metadata such as the program that generated
 | |
|     // the file and the bounding box of the data.
 | |
|     osmium::io::Header header = reader.header();
 | |
|     std::cout << "HEADER:\n  generator=" << header.get("generator") << "\n";
 | |
| 
 | |
|     for (const auto& bbox : header.boxes()) {
 | |
|         std::cout << "  bbox=" << bbox << "\n";
 | |
|     }
 | |
| 
 | |
|     // Initialize Dump handler.
 | |
|     osmium::handler::Dump dump{std::cout};
 | |
| 
 | |
|     // Read from input and send everything to Dump handler.
 | |
|     osmium::apply(reader, dump);
 | |
| 
 | |
|     // You do not have to close the Reader explicitly, but because the
 | |
|     // destructor can't throw, you will not see any errors otherwise.
 | |
|     reader.close();
 | |
| }
 | |
| 
 |