Libosmium  2.11.1
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 ways_were_lost ()
 
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
 
size_t m_num_members = 0
 

Detailed Description

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

Member Typedef Documentation

◆ config_type

◆ location_to_ring_map

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

◆ open_ring_its_type

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

◆ rings_stack

Constructor & Destructor Documentation

◆ Assembler()

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

◆ ~Assembler()

osmium::area::Assembler::~Assembler ( )
defaultnoexcept

Member Function Documentation

◆ add_common_tags()

void osmium::area::Assembler::add_common_tags ( osmium::builder::TagListBuilder tl_builder,
std::set< const osmium::Way *> &  ways 
) const
inlineprivate

◆ add_new_ring()

uint32_t osmium::area::Assembler::add_new_ring ( slocation node)
inlineprivate

◆ add_new_ring_complex()

uint32_t osmium::area::Assembler::add_new_ring_complex ( slocation node)
inlineprivate

◆ add_rings_to_area()

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.

◆ add_tags_to_area() [1/2]

void osmium::area::Assembler::add_tags_to_area ( osmium::builder::AreaBuilder builder,
const osmium::Way way 
) const
inlineprivate

◆ add_tags_to_area() [2/2]

void osmium::area::Assembler::add_tags_to_area ( osmium::builder::AreaBuilder builder,
const osmium::Relation relation 
)
inlineprivate

◆ build_ring_from_proto_ring()

template<typename TBuilder >
static void osmium::area::Assembler::build_ring_from_proto_ring ( osmium::builder::AreaBuilder builder,
const detail::ProtoRing &  ring 
)
inlinestaticprivate

◆ check_inner_outer_roles()

void osmium::area::Assembler::check_inner_outer_roles ( )
inlineprivate

◆ copy_tags_without_type()

static void osmium::area::Assembler::copy_tags_without_type ( osmium::builder::AreaBuilder builder,
const osmium::TagList tags 
)
inlinestaticprivate

◆ create_area() [1/2]

bool osmium::area::Assembler::create_area ( osmium::memory::Buffer out_buffer,
const osmium::Way way 
)
inlineprivate

◆ create_area() [2/2]

bool osmium::area::Assembler::create_area ( osmium::memory::Buffer out_buffer,
const osmium::Relation relation,
const std::vector< const osmium::Way *> &  members 
)
inlineprivate

◆ create_location_to_ring_map()

std::vector<location_to_ring_map> osmium::area::Assembler::create_location_to_ring_map ( open_ring_its_type open_ring_its)
inlineprivate

◆ create_locations_list()

void osmium::area::Assembler::create_locations_list ( )
inlineprivate

◆ create_rings()

bool osmium::area::Assembler::create_rings ( )
inlineprivate

Create rings from segments.

◆ create_rings_complex_case()

bool osmium::area::Assembler::create_rings_complex_case ( )
inlineprivate

◆ create_rings_simple_case()

void osmium::area::Assembler::create_rings_simple_case ( )
inlineprivate

◆ debug()

bool osmium::area::Assembler::debug ( ) const
inlineprivatenoexcept

◆ filter()

static const MPFilter& osmium::area::Assembler::filter ( )
inlinestaticprivatenoexcept

◆ find_candidates()

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

◆ find_enclosing_ring()

detail::ProtoRing* osmium::area::Assembler::find_enclosing_ring ( detail::NodeRefSegment *  segment)
inlineprivate

◆ find_inner_outer_complex() [1/2]

void osmium::area::Assembler::find_inner_outer_complex ( detail::ProtoRing *  ring)
inlineprivate

◆ find_inner_outer_complex() [2/2]

void osmium::area::Assembler::find_inner_outer_complex ( )
inlineprivate

◆ find_split_locations()

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.

◆ get_next_segment()

detail::NodeRefSegment* osmium::area::Assembler::get_next_segment ( const osmium::Location location)
inlineprivate

◆ is_split_location()

bool osmium::area::Assembler::is_split_location ( const osmium::Location location) const
inlineprivatenoexcept

◆ join_connected_rings()

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.

◆ merge_two_rings()

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

◆ operator()() [1/3]

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.

◆ operator()() [2/3]

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.

◆ operator()() [3/3]

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.

◆ remove_duplicates()

void osmium::area::Assembler::remove_duplicates ( rings_stack outer_rings)
inlineprivate

◆ report_ways()

bool osmium::area::Assembler::report_ways ( ) const
inlineprivatenoexcept

◆ stats()

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.

◆ there_are_open_rings()

bool osmium::area::Assembler::there_are_open_rings ( ) const
inlineprivatenoexcept

◆ try_to_merge()

bool osmium::area::Assembler::try_to_merge ( open_ring_its_type open_ring_its)
inlineprivate

◆ ways_were_lost()

bool osmium::area::Assembler::ways_were_lost ( )
inlineprivate

Checks if any ways were completely removed in the erase_duplicate_segments step.

Member Data Documentation

◆ m_config

const AssemblerConfig& osmium::area::Assembler::m_config
private

◆ m_locations

std::vector<slocation> osmium::area::Assembler::m_locations
private

◆ m_num_members

size_t osmium::area::Assembler::m_num_members = 0
private

◆ m_rings

std::list<detail::ProtoRing> osmium::area::Assembler::m_rings
private

◆ m_segment_list

osmium::area::detail::SegmentList osmium::area::Assembler::m_segment_list
private

◆ m_split_locations

std::vector<Location> osmium::area::Assembler::m_split_locations
private

◆ m_stats

area_stats osmium::area::Assembler::m_stats
private

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