diff --git a/data_structures/phantom_node.cpp b/data_structures/phantom_node.cpp index 3eac5402f..413c0d79e 100644 --- a/data_structures/phantom_node.cpp +++ b/data_structures/phantom_node.cpp @@ -29,7 +29,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. PhantomNode::PhantomNode(NodeID forward_node_id, NodeID reverse_node_id, unsigned name_id, int forward_weight, int reverse_weight, int forward_offset, int reverse_offset, - unsigned packed_geometry_id, FixedPointCoordinate &location, + unsigned packed_geometry_id, unsigned component_id, FixedPointCoordinate &location, unsigned short fwd_segment_position, TravelMode forward_travel_mode, TravelMode backward_travel_mode) : forward_node_id(forward_node_id), @@ -40,6 +40,7 @@ PhantomNode::PhantomNode(NodeID forward_node_id, NodeID reverse_node_id, unsigne forward_offset(forward_offset), reverse_offset(reverse_offset), packed_geometry_id(packed_geometry_id), + component_id(component_id), location(location), fwd_segment_position(fwd_segment_position), forward_travel_mode(forward_travel_mode), @@ -55,6 +56,7 @@ PhantomNode::PhantomNode() : forward_offset(0), reverse_offset(0), packed_geometry_id(SPECIAL_EDGEID), + component_id(-1), fwd_segment_position(0), forward_travel_mode(TRAVEL_MODE_INACCESSIBLE), backward_travel_mode(TRAVEL_MODE_INACCESSIBLE) @@ -105,6 +107,11 @@ bool PhantomNode::is_valid(const unsigned number_of_nodes) const ); } +bool PhantomNode::is_in_tiny_component() const +{ + return component_id != 0; +} + bool PhantomNode::is_valid() const { return location.is_valid() && diff --git a/data_structures/phantom_node.hpp b/data_structures/phantom_node.hpp index a85000074..7f2001b07 100644 --- a/data_structures/phantom_node.hpp +++ b/data_structures/phantom_node.hpp @@ -39,7 +39,7 @@ struct PhantomNode { PhantomNode(NodeID forward_node_id, NodeID reverse_node_id, unsigned name_id, int forward_weight, int reverse_weight, int forward_offset, int reverse_offset, - unsigned packed_geometry_id, FixedPointCoordinate &location, + unsigned packed_geometry_id, unsigned component_id, FixedPointCoordinate &location, unsigned short fwd_segment_position, TravelMode forward_travel_mode, TravelMode backward_travel_mode); @@ -53,6 +53,7 @@ struct PhantomNode int forward_offset; int reverse_offset; unsigned packed_geometry_id; + unsigned component_id; FixedPointCoordinate location; unsigned short fwd_segment_position; TravelMode forward_travel_mode : 4; @@ -70,6 +71,8 @@ struct PhantomNode bool is_valid() const; + bool is_in_tiny_component() const; + bool operator==(const PhantomNode & other) const; }; @@ -104,6 +107,7 @@ inline std::ostream& operator<<(std::ostream &out, const PhantomNode & pn) "fwd-o: " << pn.forward_offset << ", " << "rev-o: " << pn.reverse_offset << ", " << "geom: " << pn.packed_geometry_id << ", " << + "comp: " << pn.component_id << ", " << "pos: " << pn.fwd_segment_position << ", " << "loc: " << pn.location; return out; diff --git a/data_structures/static_rtree.hpp b/data_structures/static_rtree.hpp index 1ecc9fa89..865931711 100644 --- a/data_structures/static_rtree.hpp +++ b/data_structures/static_rtree.hpp @@ -765,14 +765,14 @@ class StaticRTree const EdgeDataT & current_segment = current_query_node.node.template get(); // don't collect too many results from big components - if (number_of_results_found_in_big_cc == number_of_results && + if (number_of_results_found_in_big_cc == number_of_results && current_segment.component_id == 0) { continue; } // don't collect too many results from small components - if (number_of_results_found_in_tiny_cc == number_of_results && + if (number_of_results_found_in_tiny_cc == number_of_results && current_segment.component_id != 0) { continue; @@ -804,6 +804,7 @@ class StaticRTree current_segment.forward_offset, current_segment.reverse_offset, current_segment.packed_geometry_id, + current_segment.component_id, foot_point_coordinate_on_segment, current_segment.fwd_segment_position, current_segment.forward_travel_mode,