/** * Extract all segments from all ways that make up this * multipolygon relation and add them to the list. */ uint32_t extract_segments_from_ways(osmium::area::ProblemReporter* problem_reporter, const osmium::Relation& relation, const std::vector<const osmium::Way*>& members) { assert(relation.members().size() >= members.size()); const size_t num_segments = get_num_segments(members); if (problem_reporter) { problem_reporter->set_nodes(num_segments); } m_segments.reserve(num_segments); uint32_t duplicate_nodes = 0; for_each_member(relation, members, [this, &problem_reporter, &duplicate_nodes](const osmium::RelationMember& member, const osmium::Way& way) { duplicate_nodes += extract_segments_from_way_impl(problem_reporter, way, parse_role(member.role())); }); return duplicate_nodes; }
/** * Extract all segments from all ways that make up this * multipolygon relation and add them to the list. */ uint32_t extract_segments_from_ways(osmium::area::ProblemReporter* problem_reporter, uint64_t& duplicate_nodes, const osmium::Relation& relation, const std::vector<const osmium::Way*>& members) { assert(relation.members().size() >= members.size()); const size_t num_segments = get_num_segments(members); if (problem_reporter) { problem_reporter->set_nodes(num_segments); } m_segments.reserve(num_segments); uint32_t invalid_locations = 0; for_each_member(relation, members, [&](const osmium::RelationMember& member, const osmium::Way& way) { const auto role = parse_role(member.role()); invalid_locations += extract_segments_from_way_impl(problem_reporter, duplicate_nodes, way, role); }); return invalid_locations; }