Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'routing/world_graph.cpp')
-rw-r--r--routing/world_graph.cpp17
1 files changed, 14 insertions, 3 deletions
diff --git a/routing/world_graph.cpp b/routing/world_graph.cpp
index 2d38d49e8c..0546699eb6 100644
--- a/routing/world_graph.cpp
+++ b/routing/world_graph.cpp
@@ -15,7 +15,7 @@ WorldGraph::WorldGraph(unique_ptr<CrossMwmIndexGraph> crossMwmGraph,
void WorldGraph::GetEdgeList(Segment const & segment, bool isOutgoing, bool isLeap,
vector<SegmentEdge> & edges)
{
- if (m_crossMwmGraph && isLeap)
+ if (m_crossMwmGraph && m_bordersAreOpened && isLeap)
{
if (m_crossMwmGraph->IsTransition(segment, isOutgoing))
GetTwins(segment, isOutgoing, edges);
@@ -27,10 +27,16 @@ void WorldGraph::GetEdgeList(Segment const & segment, bool isOutgoing, bool isLe
IndexGraph & indexGraph = GetIndexGraph(segment.GetMwmId());
indexGraph.GetEdgeList(segment, isOutgoing, edges);
- if (m_crossMwmGraph && m_crossMwmGraph->IsTransition(segment, isOutgoing))
+ if (m_crossMwmGraph && m_bordersAreOpened && m_crossMwmGraph->IsTransition(segment, isOutgoing))
GetTwins(segment, isOutgoing, edges);
}
+m2::PointD const & WorldGraph::GetPoint(Segment const & segment, bool front)
+{
+ return GetRoadGeometry(segment.GetMwmId(), segment.GetFeatureId())
+ .GetPoint(segment.GetPointId(front));
+}
+
RoadGeometry const & WorldGraph::GetRoadGeometry(NumMwmId mwmId, uint32_t featureId)
{
return GetIndexGraph(mwmId).GetGeometry().GetRoad(featureId);
@@ -41,6 +47,11 @@ void WorldGraph::GetTwins(Segment const & segment, bool isOutgoing, vector<Segme
m_twins.clear();
m_crossMwmGraph->GetTwins(segment, isOutgoing, m_twins);
for (Segment const & twin : m_twins)
- edges.emplace_back(twin, 0.0 /* weight */);
+ {
+ m2::PointD const & from = GetPoint(segment, true /* front */);
+ m2::PointD const & to = GetPoint(twin, true /* front */);
+ double const weight = m_estimator->CalcHeuristic(from, to);
+ edges.emplace_back(twin, weight);
+ }
}
} // namespace routing