Libosmium  2.8.0
Fast and flexible C++ library for working with OpenStreetMap data
Classes | Public Types | Public Member Functions | Private Types | Private Member Functions | Static Private Member Functions | Private Attributes | List of all members
osmium::area::Assembler Class Reference

#include <assembler.hpp>

Collaboration diagram for osmium::area::Assembler:
Collaboration graph
[legend]

Classes

struct  candidate
 
struct  MPFilter
 
class  rings_stack_element
 
struct  slocation
 

Public Types

using config_type = osmium::area::AssemblerConfig
 

Public Member Functions

 Assembler (const config_type &config)
 
 ~Assembler () noexcept=default
 
void operator() (const osmium::Way &way, osmium::memory::Buffer &out_buffer)
 
OSMIUM_DEPRECATED void operator() (const osmium::Relation &relation, const std::vector< size_t > &members, const osmium::memory::Buffer &in_buffer, osmium::memory::Buffer &out_buffer)
 
void operator() (const osmium::Relation &relation, const std::vector< const osmium::Way * > &members, osmium::memory::Buffer &out_buffer)
 
const osmium::area::area_statsstats () const noexcept
 

Private Types

using open_ring_its_type = detail::open_ring_its_type
 
using location_to_ring_map = detail::location_to_ring_map
 
using rings_stack = std::vector< rings_stack_element >
 

Private Member Functions

bool debug () const noexcept
 
bool report_ways () const noexcept
 
void add_tags_to_area (osmium::builder::AreaBuilder &builder, const osmium::Way &way) const
 
void add_common_tags (osmium::builder::TagListBuilder &tl_builder, std::set< const osmium::Way * > &ways) const
 
void add_tags_to_area (osmium::builder::AreaBuilder &builder, const osmium::Relation &relation)
 
void add_rings_to_area (osmium::builder::AreaBuilder &builder) const
 
void check_inner_outer_roles ()
 
detail::NodeRefSegment * get_next_segment (const osmium::Location &location)
 
void remove_duplicates (rings_stack &outer_rings)
 
detail::ProtoRing * find_enclosing_ring (detail::NodeRefSegment *segment)
 
bool is_split_location (const osmium::Location &location) const noexcept
 
uint32_t add_new_ring (slocation &node)
 
uint32_t add_new_ring_complex (slocation &node)
 
void create_locations_list ()
 
void find_inner_outer_complex (detail::ProtoRing *ring)
 
void find_inner_outer_complex ()
 
bool find_split_locations ()
 
void create_rings_simple_case ()
 
std::vector< location_to_ring_mapcreate_location_to_ring_map (open_ring_its_type &open_ring_its)
 
void merge_two_rings (open_ring_its_type &open_ring_its, const location_to_ring_map &m1, const location_to_ring_map &m2)
 
bool try_to_merge (open_ring_its_type &open_ring_its)
 
bool there_are_open_rings () const noexcept
 
void find_candidates (std::vector< candidate > &candidates, std::unordered_set< osmium::Location > &loc_done, const std::vector< location_to_ring_map > &xrings, candidate &cand)
 
bool join_connected_rings (open_ring_its_type &open_ring_its)
 
bool create_rings_complex_case ()
 
bool create_rings ()
 
bool create_area (osmium::memory::Buffer &out_buffer, const osmium::Way &way)
 
bool create_area (osmium::memory::Buffer &out_buffer, const osmium::Relation &relation, const std::vector< const osmium::Way * > &members)
 

Static Private Member Functions

static const MPFilterfilter () noexcept
 
static void copy_tags_without_type (osmium::builder::AreaBuilder &builder, const osmium::TagList &tags)
 
template<typename TBuilder >
static void build_ring_from_proto_ring (osmium::builder::AreaBuilder &builder, const detail::ProtoRing &ring)
 

Private Attributes

const AssemblerConfigm_config
 
osmium::area::detail::SegmentList m_segment_list
 
std::list< detail::ProtoRing > m_rings
 
std::vector< slocationm_locations
 
std::vector< Locationm_split_locations
 
area_stats m_stats
 

Detailed Description

Assembles area objects from closed ways or multipolygon relations and their members.

Member Typedef Documentation

using osmium::area::Assembler::location_to_ring_map = detail::location_to_ring_map
private
using osmium::area::Assembler::open_ring_its_type = detail::open_ring_its_type
private

Constructor & Destructor Documentation

osmium::area::Assembler::Assembler ( const config_type config)
inlineexplicit
osmium::area::Assembler::~Assembler ( )
defaultnoexcept

Member Function Documentation

void osmium::area::Assembler::add_common_tags ( osmium::builder::TagListBuilder tl_builder,
std::set< const osmium::Way * > &  ways 
) const
inlineprivate
uint32_t osmium::area::Assembler::add_new_ring ( slocation node)
inlineprivate
uint32_t osmium::area::Assembler::add_new_ring_complex ( slocation node)
inlineprivate
void osmium::area::Assembler::add_rings_to_area ( osmium::builder::AreaBuilder builder) const
inlineprivate

Append each outer ring together with its inner rings to the area in the buffer.

void osmium::area::Assembler::add_tags_to_area ( osmium::builder::AreaBuilder builder,
const osmium::Way way 
) const
inlineprivate
void osmium::area::Assembler::add_tags_to_area ( osmium::builder::AreaBuilder builder,
const osmium::Relation relation 
)
inlineprivate
template<typename TBuilder >
static void osmium::area::Assembler::build_ring_from_proto_ring ( osmium::builder::AreaBuilder builder,
const detail::ProtoRing &  ring 
)
inlinestaticprivate
void osmium::area::Assembler::check_inner_outer_roles ( )
inlineprivate
static void osmium::area::Assembler::copy_tags_without_type ( osmium::builder::AreaBuilder builder,
const osmium::TagList tags 
)
inlinestaticprivate
bool osmium::area::Assembler::create_area ( osmium::memory::Buffer out_buffer,
const osmium::Way way 
)
inlineprivate
bool osmium::area::Assembler::create_area ( osmium::memory::Buffer out_buffer,
const osmium::Relation relation,
const std::vector< const osmium::Way * > &  members 
)
inlineprivate
std::vector<location_to_ring_map> osmium::area::Assembler::create_location_to_ring_map ( open_ring_its_type open_ring_its)
inlineprivate
void osmium::area::Assembler::create_locations_list ( )
inlineprivate
bool osmium::area::Assembler::create_rings ( )
inlineprivate

Create rings from segments.

bool osmium::area::Assembler::create_rings_complex_case ( )
inlineprivate
void osmium::area::Assembler::create_rings_simple_case ( )
inlineprivate
bool osmium::area::Assembler::debug ( ) const
inlineprivatenoexcept
static const MPFilter& osmium::area::Assembler::filter ( )
inlinestaticprivatenoexcept
void osmium::area::Assembler::find_candidates ( std::vector< candidate > &  candidates,
std::unordered_set< osmium::Location > &  loc_done,
const std::vector< location_to_ring_map > &  xrings,
candidate cand 
)
inlineprivate
detail::ProtoRing* osmium::area::Assembler::find_enclosing_ring ( detail::NodeRefSegment *  segment)
inlineprivate
void osmium::area::Assembler::find_inner_outer_complex ( detail::ProtoRing *  ring)
inlineprivate
void osmium::area::Assembler::find_inner_outer_complex ( )
inlineprivate
bool osmium::area::Assembler::find_split_locations ( )
inlineprivate

Finds all locations where more than two segments meet. If there are any open rings found along the way, they are reported and the function returns false.

detail::NodeRefSegment* osmium::area::Assembler::get_next_segment ( const osmium::Location location)
inlineprivate
bool osmium::area::Assembler::is_split_location ( const osmium::Location location) const
inlineprivatenoexcept
bool osmium::area::Assembler::join_connected_rings ( open_ring_its_type open_ring_its)
inlineprivate

If there are multiple open rings and mltiple ways to join them, this function is called. It will take the first open ring and try recursively all ways of closing it. Of all the candidates the one with the smallest area is chosen and closed. If it can't close this ring, an error is reported and the function returns false.

void osmium::area::Assembler::merge_two_rings ( open_ring_its_type open_ring_its,
const location_to_ring_map m1,
const location_to_ring_map m2 
)
inlineprivate
void osmium::area::Assembler::operator() ( const osmium::Way way,
osmium::memory::Buffer out_buffer 
)
inline

Assemble an area from the given way. The resulting area is put into the out_buffer.

OSMIUM_DEPRECATED void osmium::area::Assembler::operator() ( const osmium::Relation relation,
const std::vector< size_t > &  members,
const osmium::memory::Buffer in_buffer,
osmium::memory::Buffer out_buffer 
)
inline

Assemble an area from the given relation and its members. All members are to be found in the in_buffer at the offsets given by the members parameter. The resulting area is put into the out_buffer.

Deprecated:
This function is deprecated. Use the other form of the function instead.
void osmium::area::Assembler::operator() ( const osmium::Relation relation,
const std::vector< const osmium::Way * > &  members,
osmium::memory::Buffer out_buffer 
)
inline

Assemble an area from the given relation and its members. The resulting area is put into the out_buffer.

void osmium::area::Assembler::remove_duplicates ( rings_stack outer_rings)
inlineprivate
bool osmium::area::Assembler::report_ways ( ) const
inlineprivatenoexcept
const osmium::area::area_stats& osmium::area::Assembler::stats ( ) const
inlinenoexcept

Get statistics from assembler. Call this after running the assembler to get statistics and data about errors.

bool osmium::area::Assembler::there_are_open_rings ( ) const
inlineprivatenoexcept
bool osmium::area::Assembler::try_to_merge ( open_ring_its_type open_ring_its)
inlineprivate

Member Data Documentation

const AssemblerConfig& osmium::area::Assembler::m_config
private
std::vector<slocation> osmium::area::Assembler::m_locations
private
std::list<detail::ProtoRing> osmium::area::Assembler::m_rings
private
osmium::area::detail::SegmentList osmium::area::Assembler::m_segment_list
private
std::vector<Location> osmium::area::Assembler::m_split_locations
private
area_stats osmium::area::Assembler::m_stats
private

The documentation for this class was generated from the following file: