Libosmium  2.20.0
Fast and flexible C++ library for working with OpenStreetMap data
Public Member Functions | Protected Attributes | List of all members
osmium::area::ProblemReporter Class Reference

#include <problem_reporter.hpp>

Inheritance diagram for osmium::area::ProblemReporter:
Inheritance graph
[legend]

Public Member Functions

 ProblemReporter ()=default
 
 ProblemReporter (const ProblemReporter &)=default
 
ProblemReporteroperator= (const ProblemReporter &)=default
 
 ProblemReporter (ProblemReporter &&) noexcept=default
 
ProblemReporteroperator= (ProblemReporter &&) noexcept=default
 
virtual ~ProblemReporter () noexcept=default
 
void set_object (osmium::item_type object_type, osmium::object_id_type object_id) noexcept
 
osmium::object_id_type object_id () const noexcept
 
void set_nodes (size_t nodes) noexcept
 
virtual void report_duplicate_node (osmium::object_id_type node_id1, osmium::object_id_type node_id2, osmium::Location location)
 
virtual void report_touching_ring (osmium::object_id_type node_id, osmium::Location location)
 
virtual void report_intersection (osmium::object_id_type way1_id, osmium::Location way1_seg_start, osmium::Location way1_seg_end, osmium::object_id_type way2_id, osmium::Location way2_seg_start, osmium::Location way2_seg_end, osmium::Location intersection)
 
virtual void report_duplicate_segment (const osmium::NodeRef &nr1, const osmium::NodeRef &nr2)
 
virtual void report_overlapping_segment (const osmium::NodeRef &nr1, const osmium::NodeRef &nr2)
 
virtual void report_ring_not_closed (const osmium::NodeRef &nr, const osmium::Way *way)
 
virtual void report_role_should_be_outer (osmium::object_id_type way_id, osmium::Location seg_start, osmium::Location seg_end)
 
virtual void report_role_should_be_inner (osmium::object_id_type way_id, osmium::Location seg_start, osmium::Location seg_end)
 
virtual void report_way_in_multiple_rings (const osmium::Way &way)
 
virtual void report_inner_with_same_tags (const osmium::Way &way)
 
virtual void report_invalid_location (osmium::object_id_type way_id, osmium::object_id_type node_id)
 
virtual void report_duplicate_way (const osmium::Way &way)
 
virtual void report_way (const osmium::Way &way)
 

Protected Attributes

osmium::item_type m_object_type = osmium::item_type::undefined
 
osmium::object_id_type m_object_id = 0
 
size_t m_nodes = 0
 

Detailed Description

When assembling a multipolygon/area from a multipolygon relation or a closed way several problems can be detected. This includes intersections between lines, wrong role attributes on relation members etc. These problems are reported by the area::Assembler class to the ProblemReporter class or one of its child classes.

This is the parent class which does nothing with the reports. Child classes are expected to implement different ways of reporting the problems.

Constructor & Destructor Documentation

◆ ProblemReporter() [1/3]

osmium::area::ProblemReporter::ProblemReporter ( )
default

◆ ProblemReporter() [2/3]

osmium::area::ProblemReporter::ProblemReporter ( const ProblemReporter )
default

◆ ProblemReporter() [3/3]

osmium::area::ProblemReporter::ProblemReporter ( ProblemReporter &&  )
defaultnoexcept

◆ ~ProblemReporter()

virtual osmium::area::ProblemReporter::~ProblemReporter ( )
virtualdefaultnoexcept

Member Function Documentation

◆ object_id()

osmium::object_id_type osmium::area::ProblemReporter::object_id ( ) const
inlinenoexcept

◆ operator=() [1/2]

ProblemReporter & osmium::area::ProblemReporter::operator= ( const ProblemReporter )
default

◆ operator=() [2/2]

ProblemReporter & osmium::area::ProblemReporter::operator= ( ProblemReporter &&  )
defaultnoexcept

◆ report_duplicate_node()

virtual void osmium::area::ProblemReporter::report_duplicate_node ( osmium::object_id_type  node_id1,
osmium::object_id_type  node_id2,
osmium::Location  location 
)
inlinevirtual

Report a duplicate node, ie. two nodes with the same location.

Parameters
node_id1ID of the first node.
node_id2ID of the second node.
locationLocation of both nodes.

Reimplemented in osmium::area::ProblemReporterException, osmium::area::ProblemReporterOGR, and osmium::area::ProblemReporterStream.

◆ report_duplicate_segment()

virtual void osmium::area::ProblemReporter::report_duplicate_segment ( const osmium::NodeRef nr1,
const osmium::NodeRef nr2 
)
inlinevirtual

Report a duplicate segments. Two or more segments are directly on top of each other. This can be a problem, if there is a spike for instance, or it could be okay, if there are touching inner rings.

Parameters
nr1NodeRef of one end of the segment.
nr2NodeRef of the other end of the segment.

Reimplemented in osmium::area::ProblemReporterException, osmium::area::ProblemReporterOGR, and osmium::area::ProblemReporterStream.

◆ report_duplicate_way()

virtual void osmium::area::ProblemReporter::report_duplicate_way ( const osmium::Way way)
inlinevirtual

Report a way that is more than once in a relation.

Parameters
wayThe way

Reimplemented in osmium::area::ProblemReporterException, osmium::area::ProblemReporterOGR, and osmium::area::ProblemReporterStream.

◆ report_inner_with_same_tags()

virtual void osmium::area::ProblemReporter::report_inner_with_same_tags ( const osmium::Way way)
inlinevirtual

Report a way with role inner that has the same tags as the relation or outer ways.

Parameters
wayThe way.

Reimplemented in osmium::area::ProblemReporterException, osmium::area::ProblemReporterOGR, and osmium::area::ProblemReporterStream.

◆ report_intersection()

virtual void osmium::area::ProblemReporter::report_intersection ( osmium::object_id_type  way1_id,
osmium::Location  way1_seg_start,
osmium::Location  way1_seg_end,
osmium::object_id_type  way2_id,
osmium::Location  way2_seg_start,
osmium::Location  way2_seg_end,
osmium::Location  intersection 
)
inlinevirtual

Report an intersection between two segments.

Parameters
way1_idID of the first involved way.
way1_seg_startLocation where the segment of the first way with the intersection starts
way1_seg_endLocation where the segment of the first way with the intersection ends
way2_idID of the second involved way.
way2_seg_startLocation where the segment of the second way with the intersection starts
way2_seg_endLocation where the segment of the second way with the intersection ends
intersectionLocation of the intersection. This might be slightly off the correct location due to rounding.

Reimplemented in osmium::area::ProblemReporterException, osmium::area::ProblemReporterOGR, and osmium::area::ProblemReporterStream.

◆ report_invalid_location()

virtual void osmium::area::ProblemReporter::report_invalid_location ( osmium::object_id_type  way_id,
osmium::object_id_type  node_id 
)
inlinevirtual

Report an invalid location in a way.

Parameters
way_idID of the way the node is in.
node_idID of the node with the invalid location.

Reimplemented in osmium::area::ProblemReporterException, and osmium::area::ProblemReporterStream.

◆ report_overlapping_segment()

virtual void osmium::area::ProblemReporter::report_overlapping_segment ( const osmium::NodeRef nr1,
const osmium::NodeRef nr2 
)
inlinevirtual

Report a duplicate segments. Two or more segments are directly on top of each other. This can be a problem, if there is a spike for instance, or it could be okay, if there are touching inner rings.

Parameters
nr1NodeRef of one end of the segment.
nr2NodeRef of the other end of the segment.

Reimplemented in osmium::area::ProblemReporterException, osmium::area::ProblemReporterOGR, and osmium::area::ProblemReporterStream.

◆ report_ring_not_closed()

virtual void osmium::area::ProblemReporter::report_ring_not_closed ( const osmium::NodeRef nr,
const osmium::Way way 
)
inlinevirtual

Report an open ring.

Parameters
nrNodeRef of one end of the ring.
wayOptional pointer to way the end node is in.

Reimplemented in osmium::area::ProblemReporterException, osmium::area::ProblemReporterOGR, and osmium::area::ProblemReporterStream.

◆ report_role_should_be_inner()

virtual void osmium::area::ProblemReporter::report_role_should_be_inner ( osmium::object_id_type  way_id,
osmium::Location  seg_start,
osmium::Location  seg_end 
)
inlinevirtual

Report a segment that should have role "inner", but has a different role.

Parameters
way_idID of the way this segment is in.
seg_startStart of the segment with the wrong role.
seg_endEnd of the segment with the wrong role.

Reimplemented in osmium::area::ProblemReporterException, osmium::area::ProblemReporterOGR, and osmium::area::ProblemReporterStream.

◆ report_role_should_be_outer()

virtual void osmium::area::ProblemReporter::report_role_should_be_outer ( osmium::object_id_type  way_id,
osmium::Location  seg_start,
osmium::Location  seg_end 
)
inlinevirtual

Report a segment that should have role "outer", but has a different role.

Parameters
way_idID of the way this segment is in.
seg_startStart of the segment with the wrong role.
seg_endEnd of the segment with the wrong role.

Reimplemented in osmium::area::ProblemReporterException, osmium::area::ProblemReporterOGR, and osmium::area::ProblemReporterStream.

◆ report_touching_ring()

virtual void osmium::area::ProblemReporter::report_touching_ring ( osmium::object_id_type  node_id,
osmium::Location  location 
)
inlinevirtual

Report a node/location where rings touch. This is often wrong, but not necessarily so.

Parameters
node_idID of the node.
locationLocation of the node.

Reimplemented in osmium::area::ProblemReporterException, osmium::area::ProblemReporterOGR, and osmium::area::ProblemReporterStream.

◆ report_way()

virtual void osmium::area::ProblemReporter::report_way ( const osmium::Way way)
inlinevirtual

In addition to reporting specific problems, this is used to report all ways belonging to areas having problems.

Parameters
wayThe way

Reimplemented in osmium::area::ProblemReporterOGR.

◆ report_way_in_multiple_rings()

virtual void osmium::area::ProblemReporter::report_way_in_multiple_rings ( const osmium::Way way)
inlinevirtual

Report a way that is in multiple rings.

Parameters
wayThe way.

Reimplemented in osmium::area::ProblemReporterException, osmium::area::ProblemReporterOGR, and osmium::area::ProblemReporterStream.

◆ set_nodes()

void osmium::area::ProblemReporter::set_nodes ( size_t  nodes)
inlinenoexcept

◆ set_object()

void osmium::area::ProblemReporter::set_object ( osmium::item_type  object_type,
osmium::object_id_type  object_id 
)
inlinenoexcept

Set the object the next problem reports will be on.

Parameters
object_typeThe type of the object.
object_idThe ID of the object.

Member Data Documentation

◆ m_nodes

size_t osmium::area::ProblemReporter::m_nodes = 0
protected

◆ m_object_id

osmium::object_id_type osmium::area::ProblemReporter::m_object_id = 0
protected

◆ m_object_type

osmium::item_type osmium::area::ProblemReporter::m_object_type = osmium::item_type::undefined
protected

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