1 #ifndef OSMIUM_AREA_MULTIPOLYGON_COLLECTOR_HPP 2 #define OSMIUM_AREA_MULTIPOLYGON_COLLECTOR_HPP 76 template <
typename TAssembler>
81 using assembler_config_type =
typename TAssembler::config_type;
89 initial_output_buffer_size = 1024UL * 1024UL
93 max_buffer_size_for_flush = 100UL * 1024UL
97 if (this->callback()) {
100 swap(buffer, m_output_buffer);
101 this->callback()(std::move(buffer));
106 if (m_output_buffer.
committed() > max_buffer_size_for_flush) {
107 flush_output_buffer();
115 m_assembler_config(assembler_config),
116 m_output_buffer(initial_output_buffer_size,
osmium::memory::Buffer::auto_grow::yes) {
137 return (!std::strcmp(type,
"multipolygon")) || (!std::strcmp(type,
"boundary"));
165 TAssembler assembler{m_assembler_config};
166 assembler(way, m_output_buffer);
167 m_stats += assembler.stats();
168 possibly_flush_output_buffer();
179 std::vector<const osmium::Way*> ways;
181 for (
const auto& member : relation.
members()) {
182 if (member.ref() != 0) {
183 const size_t offset = this->get_offset(member.type(), member.ref());
189 TAssembler assembler{m_assembler_config};
190 assembler(relation, ways, m_output_buffer);
191 m_stats += assembler.stats();
192 possibly_flush_output_buffer();
199 flush_output_buffer();
206 swap(buffer, m_output_buffer);
217 #endif // OSMIUM_AREA_MULTIPOLYGON_COLLECTOR_HPP WayNodeList & nodes()
Definition: way.hpp:89
const area_stats & stats() const noexcept
Definition: multipolygon_collector.hpp:119
void possibly_flush_output_buffer()
Definition: multipolygon_collector.hpp:105
bool keep_relation(const osmium::Relation &relation) const
Definition: multipolygon_collector.hpp:129
const TagList & tags() const
Get the list of tags for this object.
Definition: object.hpp:332
type
Definition: entity_bits.hpp:63
RelationMemberList & members()
Get a reference to the member list.
Definition: relation.hpp:186
Definition: relation.hpp:168
MultipolygonCollector(const assembler_config_type &assembler_config)
Definition: multipolygon_collector.hpp:113
Definition: entity_bits.hpp:72
size_type size() const noexcept
Definition: collection.hpp:152
void swap(Buffer &lhs, Buffer &rhs)
Definition: buffer.hpp:885
std::size_t committed() const noexcept
Definition: buffer.hpp:356
void way_not_in_any_relation(const osmium::Way &way)
Definition: multipolygon_collector.hpp:154
Definition: relation.hpp:57
void flush()
Definition: multipolygon_collector.hpp:198
Namespace for everything in the Osmium library.
Definition: assembler.hpp:53
Definition: collector.hpp:98
T & get(const std::size_t offset) const
Definition: buffer.hpp:518
Definition: location.hpp:53
const assembler_config_type m_assembler_config
Definition: multipolygon_collector.hpp:82
osmium::memory::Buffer read()
Definition: multipolygon_collector.hpp:202
void complete_relation(osmium::relations::RelationMeta &relation_meta)
Definition: multipolygon_collector.hpp:175
item_type type() const noexcept
Definition: relation.hpp:132
Definition: multipolygon_collector.hpp:77
osmium::Location & location() noexcept
Definition: node_ref.hpp:85
osmium::memory::Buffer m_output_buffer
Definition: multipolygon_collector.hpp:84
bool ends_have_same_location() const
Definition: way.hpp:142
Definition: buffer.hpp:97
bool keep_member(const osmium::relations::RelationMeta &, const osmium::RelationMember &member) const
Definition: multipolygon_collector.hpp:143
const NodeRef & front() const noexcept
Definition: node_ref_list.hpp:126
const NodeRef & back() const noexcept
Definition: node_ref_list.hpp:138
const char * get_value_by_key(const char *key, const char *default_value=nullptr) const noexcept
Definition: tag.hpp:137
area_stats m_stats
Definition: multipolygon_collector.hpp:86
void flush_output_buffer()
Definition: multipolygon_collector.hpp:96
size_type size() const noexcept
Definition: node_ref_list.hpp:83