1 #ifndef OSMIUM_AREA_MULTIPOLYGON_COLLECTOR_HPP
2 #define OSMIUM_AREA_MULTIPOLYGON_COLLECTOR_HPP
73 template <
typename TAssembler>
92 swap(buffer, m_output_buffer);
107 m_assembler_config(assembler_config),
108 m_output_buffer(initial_output_buffer_size,
osmium::memory::Buffer::auto_grow::yes) {
129 if ((!std::strcmp(type,
"multipolygon")) || (!std::strcmp(type,
"boundary"))) {
161 TAssembler assembler(m_assembler_config);
162 assembler(way, m_output_buffer);
163 m_stats += assembler.stats();
175 std::vector<const osmium::Way*> ways;
176 for (
const auto& member : relation.
members()) {
177 if (member.ref() != 0) {
178 const size_t offset = this->
get_offset(member.type(), member.ref());
184 TAssembler assembler(m_assembler_config);
185 assembler(relation, ways, m_output_buffer);
186 m_stats += assembler.stats();
201 swap(buffer, m_output_buffer);
212 #endif // OSMIUM_AREA_MULTIPOLYGON_COLLECTOR_HPP
WayNodeList & nodes()
Definition: way.hpp:76
osmium::memory::Buffer & members_buffer()
Definition: collector.hpp:493
void possibly_flush_output_buffer()
Definition: multipolygon_collector.hpp:97
osmium::area::area_stats m_stats
Definition: multipolygon_collector.hpp:83
type
Definition: entity_bits.hpp:63
bool keep_member(const osmium::relations::RelationMeta &, const osmium::RelationMember &member) const
Definition: multipolygon_collector.hpp:139
RelationMemberList & members()
Definition: relation.hpp:177
static constexpr size_t initial_output_buffer_size
Definition: multipolygon_collector.hpp:85
Definition: relation.hpp:165
MultipolygonCollector(const assembler_config_type &assembler_config)
Definition: multipolygon_collector.hpp:105
size_t size() const noexcept
Definition: node_ref_list.hpp:69
static constexpr size_t max_buffer_size_for_flush
Definition: multipolygon_collector.hpp:86
Definition: entity_bits.hpp:70
void swap(Buffer &lhs, Buffer &rhs)
Definition: buffer.hpp:731
size_t get_offset(osmium::item_type type, osmium::object_id_type id)
Definition: collector.hpp:497
void way_not_in_any_relation(const osmium::Way &way)
Definition: multipolygon_collector.hpp:150
Definition: relation.hpp:54
void flush()
Definition: multipolygon_collector.hpp:193
Namespace for everything in the Osmium library.
Definition: assembler.hpp:73
Definition: collector.hpp:100
const osmium::Relation & get_relation(size_t offset) const
Definition: collector.hpp:310
Definition: location.hpp:52
const assembler_config_type m_assembler_config
Definition: multipolygon_collector.hpp:79
const osmium::area::area_stats & stats() const noexcept
Definition: multipolygon_collector.hpp:111
bool ends_have_same_location() const
Definition: way.hpp:107
osmium::memory::Buffer read()
Definition: multipolygon_collector.hpp:197
bool keep_relation(const osmium::Relation &relation) const
Definition: multipolygon_collector.hpp:121
void complete_relation(osmium::relations::RelationMeta &relation_meta)
Definition: multipolygon_collector.hpp:171
const TagList & tags() const
Get the list of tags for this object.
Definition: object.hpp:309
item_type type() const noexcept
Definition: relation.hpp:126
Definition: multipolygon_collector.hpp:74
osmium::Location & location() noexcept
Definition: node_ref.hpp:79
osmium::memory::Buffer m_output_buffer
Definition: multipolygon_collector.hpp:81
size_t committed() const noexcept
Definition: buffer.hpp:241
typename TAssembler::config_type assembler_config_type
Definition: multipolygon_collector.hpp:78
callback_func_type callback()
Definition: collector.hpp:220
Definition: buffer.hpp:97
T & get(const size_t offset) const
Definition: buffer.hpp:379
const NodeRef & front() const noexcept
Definition: node_ref_list.hpp:93
const NodeRef & back() const noexcept
Definition: node_ref_list.hpp:103
const char * get_value_by_key(const char *key, const char *default_value=nullptr) const noexcept
Definition: tag.hpp:134
void flush_output_buffer()
Definition: multipolygon_collector.hpp:88