1 #ifndef OSMIUM_AREA_MULTIPOLYGON_COLLECTOR_HPP
2 #define OSMIUM_AREA_MULTIPOLYGON_COLLECTOR_HPP
50 #include <osmium/relations/detail/member_meta.hpp>
74 template <
class TAssembler>
90 std::swap(buffer, m_output_buffer);
105 m_assembler_config(assembler_config),
106 m_output_buffer(initial_output_buffer_size,
osmium::memory::Buffer::auto_grow::yes) {
123 if ((!strcmp(type,
"multipolygon")) || (!strcmp(type,
"boundary"))) {
155 TAssembler assembler(m_assembler_config);
156 assembler(way, m_output_buffer);
166 std::vector<size_t> offsets;
167 for (
const auto& member : relation.
members()) {
168 if (member.ref() != 0) {
169 offsets.push_back(this->
get_offset(member.type(), member.ref()));
173 TAssembler assembler(m_assembler_config);
174 assembler(relation, offsets, this->
members_buffer(), m_output_buffer);
181 for (
const auto& member : relation.
members()) {
182 if (member.ref() != 0) {
184 auto range = std::equal_range(mmv.begin(), mmv.end(), osmium::relations::MemberMeta(member.ref()));
185 assert(range.first != range.second);
189 if (osmium::relations::count_not_removed(range.first, range.second) == 1) {
190 this->
get_member(range.first->buffer_offset()).set_removed(
true);
193 for (
auto it = range.first; it != range.second; ++it) {
194 if (!it->removed() && relation.
id() == this->
get_relation(it->relation_pos()).
id()) {
209 std::swap(buffer, m_output_buffer);
219 #endif // OSMIUM_AREA_MULTIPOLYGON_COLLECTOR_HPP
WayNodeList & nodes()
Definition: way.hpp:75
osmium::memory::Buffer & members_buffer()
Definition: collector.hpp:466
void possibly_flush_output_buffer()
Definition: multipolygon_collector.hpp:95
type
Definition: entity_bits.hpp:60
bool keep_member(const osmium::relations::RelationMeta &, const osmium::RelationMember &member) const
Definition: multipolygon_collector.hpp:133
RelationMemberList & members()
Definition: relation.hpp:179
osmium::relations::Collector< MultipolygonCollector< TAssembler >, false, true, false > collector_type
Definition: multipolygon_collector.hpp:77
static constexpr size_t initial_output_buffer_size
Definition: multipolygon_collector.hpp:84
Definition: relation.hpp:167
MultipolygonCollector(const assembler_config_type &assembler_config)
Definition: multipolygon_collector.hpp:103
size_t size() const noexcept
Definition: node_ref_list.hpp:68
static constexpr size_t max_buffer_size_for_flush
Definition: multipolygon_collector.hpp:85
Definition: entity_bits.hpp:67
size_t get_offset(osmium::item_type type, osmium::object_id_type id)
Definition: collector.hpp:470
std::vector< MemberMeta > & member_meta(const item_type type)
Definition: collector.hpp:269
void way_not_in_any_relation(const osmium::Way &way)
Definition: multipolygon_collector.hpp:144
Definition: relation.hpp:54
void flush()
Definition: multipolygon_collector.hpp:203
Namespace for everything in the Osmium library.
Definition: assembler.hpp:55
Definition: collector.hpp:95
const osmium::Relation & get_relation(size_t offset) const
Definition: collector.hpp:363
Definition: location.hpp:53
const assembler_config_type m_assembler_config
Definition: multipolygon_collector.hpp:80
bool ends_have_same_location() const
Definition: way.hpp:106
osmium::OSMObject & get_member(size_t offset) const
Definition: collector.hpp:374
osmium::memory::Buffer read()
Definition: multipolygon_collector.hpp:207
bool keep_relation(const osmium::Relation &relation) const
Definition: multipolygon_collector.hpp:115
TAssembler::config_type assembler_config_type
Definition: multipolygon_collector.hpp:79
void complete_relation(osmium::relations::RelationMeta &relation_meta)
Definition: multipolygon_collector.hpp:164
const TagList & tags() const
Get the list of tags for this object.
Definition: object.hpp:295
item_type type() const noexcept
Definition: relation.hpp:128
Definition: multipolygon_collector.hpp:75
osmium::Location & location() noexcept
Definition: node_ref.hpp:73
osmium::memory::Buffer m_output_buffer
Definition: multipolygon_collector.hpp:82
object_id_type id() const noexcept
Get ID of this object.
Definition: object.hpp:110
size_t committed() const noexcept
Definition: buffer.hpp:217
callback_func_type callback()
Definition: collector.hpp:273
Definition: buffer.hpp:94
const NodeRef & front() const noexcept
Definition: node_ref_list.hpp:91
const NodeRef & back() const noexcept
Definition: node_ref_list.hpp:101
const char * get_value_by_key(const char *key, const char *default_value=nullptr) const noexcept
Definition: tag.hpp:119
void flush_output_buffer()
Definition: multipolygon_collector.hpp:87