[traffxml] Fix location matching on dual carriageway roads

Signed-off-by: mvglasow <michael -at- vonglasow.com>
This commit is contained in:
mvglasow
2025-05-27 21:09:35 +03:00
parent c6de2a25aa
commit 083845a502
3 changed files with 44 additions and 1 deletions

View File

@@ -188,6 +188,31 @@ public:
std::unique_ptr<m4::Tree<routing::NumMwmId>> numMwmTree,
DataSource & dataSource);
protected:
/**
* @brief Whether the set of fake endings generated for the check points is restricted.
*
* The return value is used internally when snapping checkpoints to edges. If this function
* returns true, this instructs the `PointsOnEdgesSnapping` instance to consider only edges which
* are not fenced off, i.e. can be reached from the respective checkpoint without crossing any
* other edges. If it returns false, this restriction does not apply, and all nearby edges are
* considered.
*
* Restricting the set of fake endings in this manner decreases the options considered for routing
* and thus processing time, which is desirable for regular routing and has no side effects.
* For TraFF location matching, simplification has undesirable side effects: if reference points
* are located on one side of the road, the other carriageway may not be considered. This would
* lead to situations like these:
*
* --<--<-+<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<+-<--<--
* -->-->-+>==>==>==>==>==>==>-->-->-->-->-->-->-->-->-->-->-->==>==>==>==>==>==>==>==>+->-->--
* *< <*
*
* (-- carriageway, + junction, < > direction, *< end point, <* start point, == route)
*
* To avoid this, the `DecoderRouter` implementation always returns false.
*/
bool IsFakeEndingSetSimplified() override { return false; }
private:
};