void relation( osmium::Relation& relation ) { const char* bus = relation.tags()["route"]; if(bus && !strcmp(bus, "bus")) { const char* name = relation.tags().get_value_by_key("ref"); if(!name) name = relation.tags().get_value_by_key("name"); std::cout << name; osmium::unsigned_object_id_type temp1, temp2; int db = 0; for( auto &member : relation.members()){ if(db == 0 && member.type() == osmium::item_type::node) { temp1 = member.positive_ref(); db++; } else if(db !=0 && member.type() == osmium::item_type::node){ temp2 = member.positive_ref(); } } std::cout << " (" << map[temp1] << " - " << map[temp2] << ")" << std::endl; for ( auto &member : relation.members()) { if( member.type() == osmium::item_type::node){ std::cout << " " << locations.get(member.positive_ref()).lat() << ", " << locations.get(member.positive_ref()).lon() << " " << map[member.positive_ref()] << std::endl; } } std::cout << std::endl; } }
void relation(osmium::Relation& rel) { const char* bus = rel.tags() ["route"]; if (bus && !strcmp(bus, "bus")) { const char* busRef = rel.tags()["ref"]; if (busRef) { buses.push_back(Bus(busRef, id)); id++; osmium::RelationMemberList& rml = rel.members(); for (osmium::RelationMember& rm : rml) { if (rm.type() == osmium::item_type::way) { std::vector<osmium::Location> tmpVec; for (auto& nd : ways[rm.ref()]) { osmium::Location loc = locations.get(nd); tmpVec.push_back(loc); } buses.at(id - 1).locs.push_back(tmpVec); } else if(rm.type() == osmium::item_type::node && !strcmp(rm.role(), "stop")) { buses.at(id - 1).busStopNames[rm.ref()] = nodes[rm.ref()]; } } } } }
void listStops() { std::ofstream fileLoc("/home/hpba/malvinDetailsOut.dat"); for (auto &element : buses) { fileLoc << element.name << std::endl; for (auto &stopName : element.busStopNames) { fileLoc << stopName.second << " (lat: " << locations.get(stopName.first).lat() << ", lon: " << locations.get(stopName.first).lon() << ")\n"; } } fileLoc.close(); }
void relation ( osmium::Relation& rel ) { const char* bus = rel.tags() ["route"]; const char* nev; if ( bus && !strcmp ( bus, "bus" ) ) { if( rel.tags()["name"]) { nev = rel.tags()["name"]; } else { nev = rel.tags()["ref"]; } ++stops; //TODO asdasd int i {1}; osmium::RelationMemberList& rml = rel.members(); int szam=0; for ( osmium::RelationMember& rm : rml ) { i = 1; if (rm.type() == osmium::item_type::way ) { for( auto it : way_node_map[rm.ref()] ) { try { osmium::Location loc = locations.get ( it ); if ( i++>1 ) { osmium::geom::Coordinates coords {loc}; szam++; printf("%.8f %.8f\n",double(coords.y),double(coords.x) ); } } catch ( std::exception& e ) { std::cout << "No such node on the map. "<< e.what() << std::endl; } } std::cout << "way\n"; } } //std::cout << "way\n"; std::cout << nev << " busz\n"; } }