1 #ifndef OSMIUM_AREA_MULTIPOLYGON_COLLECTOR_HPP 2 #define OSMIUM_AREA_MULTIPOLYGON_COLLECTOR_HPP 50 #include <osmium/relations/detail/member_meta.hpp> 74 template <
typename TAssembler>
84 static constexpr
size_t initial_output_buffer_size = 1024 * 1024;
85 static constexpr
size_t max_buffer_size_for_flush = 100 * 1024;
88 if (this->callback()) {
91 swap(buffer, m_output_buffer);
92 this->callback()(std::move(buffer));
97 if (m_output_buffer.
committed() > max_buffer_size_for_flush) {
98 flush_output_buffer();
106 m_assembler_config(assembler_config),
107 m_output_buffer(initial_output_buffer_size,
osmium::memory::Buffer::auto_grow::yes) {
124 if ((!strcmp(type,
"multipolygon")) || (!strcmp(type,
"boundary"))) {
156 TAssembler assembler(m_assembler_config);
157 assembler(way, m_output_buffer);
158 possibly_flush_output_buffer();
167 std::vector<size_t> offsets;
168 for (
const auto& member : relation.
members()) {
169 if (member.ref() != 0) {
170 offsets.push_back(this->get_offset(member.type(), member.ref()));
174 TAssembler assembler(m_assembler_config);
175 assembler(relation, offsets, this->members_buffer(), m_output_buffer);
176 possibly_flush_output_buffer();
183 flush_output_buffer();
190 swap(buffer, m_output_buffer);
201 #endif // OSMIUM_AREA_MULTIPOLYGON_COLLECTOR_HPP WayNodeList & nodes()
Definition: way.hpp:75
const char * get_value_by_key(const char *key, const char *default_value=nullptr) const noexcept
Definition: tag.hpp:119
void possibly_flush_output_buffer()
Definition: multipolygon_collector.hpp:96
type
Definition: entity_bits.hpp:60
bool keep_member(const osmium::relations::RelationMeta &, const osmium::RelationMember &member) const
Definition: multipolygon_collector.hpp:134
RelationMemberList & members()
Definition: relation.hpp:177
osmium::relations::Collector< MultipolygonCollector< TAssembler >, false, true, false > collector_type
Definition: multipolygon_collector.hpp:77
Definition: relation.hpp:165
MultipolygonCollector(const assembler_config_type &assembler_config)
Definition: multipolygon_collector.hpp:104
Definition: entity_bits.hpp:67
void swap(Buffer &lhs, Buffer &rhs)
Definition: buffer.hpp:721
item_type type() const noexcept
Definition: relation.hpp:126
void way_not_in_any_relation(const osmium::Way &way)
Definition: multipolygon_collector.hpp:145
Definition: relation.hpp:54
void flush()
Definition: multipolygon_collector.hpp:182
Namespace for everything in the Osmium library.
Definition: assembler.hpp:59
Definition: collector.hpp:105
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::memory::Buffer read()
Definition: multipolygon_collector.hpp:186
bool keep_relation(const osmium::Relation &relation) const
Definition: multipolygon_collector.hpp:116
TAssembler::config_type assembler_config_type
Definition: multipolygon_collector.hpp:79
void complete_relation(osmium::relations::RelationMeta &relation_meta)
Definition: multipolygon_collector.hpp:165
const TagList & tags() const
Get the list of tags for this object.
Definition: object.hpp:295
size_t committed() const noexcept
Definition: buffer.hpp:241
const NodeRef & front() const noexcept
Definition: node_ref_list.hpp:92
Definition: multipolygon_collector.hpp:75
osmium::Location & location() noexcept
Definition: node_ref.hpp:79
osmium::memory::Buffer m_output_buffer
Definition: multipolygon_collector.hpp:82
Definition: buffer.hpp:97
size_t size() const noexcept
Definition: node_ref_list.hpp:68
const NodeRef & back() const noexcept
Definition: node_ref_list.hpp:102
void flush_output_buffer()
Definition: multipolygon_collector.hpp:87