forked from organicmaps/organicmaps
clang-format
This commit is contained in:
parent
884c674b47
commit
b6c8921c4e
9 changed files with 78 additions and 57 deletions
|
@ -10,7 +10,6 @@ double const kMwmCrossingNodeEqualityRadiusMeters = 1000.0;
|
|||
|
||||
namespace routing
|
||||
{
|
||||
|
||||
IRouter::ResultCode CrossMwmGraph::SetStartNode(CrossNode const & startNode)
|
||||
{
|
||||
ASSERT(startNode.mwmName.length(), ());
|
||||
|
@ -86,7 +85,8 @@ IRouter::ResultCode CrossMwmGraph::SetFinalNode(CrossNode const & finalNode)
|
|||
if (IsValidEdgeWeight(weights[i]))
|
||||
{
|
||||
IngoingCrossNode const & iNode = *(mwmIngoingIter.first + i);
|
||||
CrossNode start(iNode.m_nodeId, finalNode.mwmName, MercatorBounds::FromLatLon(iNode.m_point.y, iNode.m_point.x));
|
||||
CrossNode start(iNode.m_nodeId, finalNode.mwmName,
|
||||
MercatorBounds::FromLatLon(iNode.m_point.y, iNode.m_point.x));
|
||||
vector<CrossWeightedEdge> dummyEdges;
|
||||
dummyEdges.emplace_back(make_pair(finalNode, finalNode), weights[i]);
|
||||
m_virtualEdges.insert(make_pair(start, dummyEdges));
|
||||
|
@ -95,7 +95,8 @@ IRouter::ResultCode CrossMwmGraph::SetFinalNode(CrossNode const & finalNode)
|
|||
return IRouter::NoError;
|
||||
}
|
||||
|
||||
TCrossPair CrossMwmGraph::FindNextMwmNode(OutgoingCrossNode const & startNode, TRoutingMappingPtr const & currentMapping) const
|
||||
TCrossPair CrossMwmGraph::FindNextMwmNode(OutgoingCrossNode const & startNode,
|
||||
TRoutingMappingPtr const & currentMapping) const
|
||||
{
|
||||
m2::PointD const & startPoint = startNode.m_point;
|
||||
|
||||
|
@ -111,14 +112,18 @@ TCrossPair CrossMwmGraph::FindNextMwmNode(OutgoingCrossNode const & startNode, T
|
|||
for (auto i = income_iters.first; i < income_iters.second; ++i)
|
||||
{
|
||||
m2::PointD const & targetPoint = i->m_point;
|
||||
if (ms::DistanceOnEarth(startPoint.y, startPoint.x, targetPoint.y, targetPoint.x) < kMwmCrossingNodeEqualityRadiusMeters)
|
||||
return make_pair(CrossNode(startNode.m_nodeId, currentMapping->GetName(), MercatorBounds::FromLatLon(targetPoint.y, targetPoint.x)),
|
||||
CrossNode(i->m_nodeId, nextMwm, MercatorBounds::FromLatLon(targetPoint.y, targetPoint.x)));
|
||||
if (ms::DistanceOnEarth(startPoint.y, startPoint.x, targetPoint.y, targetPoint.x) <
|
||||
kMwmCrossingNodeEqualityRadiusMeters)
|
||||
return make_pair(CrossNode(startNode.m_nodeId, currentMapping->GetName(),
|
||||
MercatorBounds::FromLatLon(targetPoint.y, targetPoint.x)),
|
||||
CrossNode(i->m_nodeId, nextMwm,
|
||||
MercatorBounds::FromLatLon(targetPoint.y, targetPoint.x)));
|
||||
}
|
||||
return TCrossPair();
|
||||
}
|
||||
|
||||
void CrossMwmGraph::GetOutgoingEdgesListImpl(TCrossPair const & v, vector<CrossWeightedEdge> & adj) const
|
||||
void CrossMwmGraph::GetOutgoingEdgesListImpl(TCrossPair const & v,
|
||||
vector<CrossWeightedEdge> & adj) const
|
||||
{
|
||||
// Check for virtual edges
|
||||
adj.clear();
|
||||
|
@ -127,7 +132,7 @@ void CrossMwmGraph::GetOutgoingEdgesListImpl(TCrossPair const & v, vector<CrossW
|
|||
{
|
||||
for (auto const & a : it->second)
|
||||
{
|
||||
ASSERT(a.GetTarget().first.IsValid() ,());
|
||||
ASSERT(a.GetTarget().first.IsValid(), ());
|
||||
adj.push_back(a);
|
||||
}
|
||||
return;
|
||||
|
@ -164,5 +169,4 @@ void CrossMwmGraph::GetOutgoingEdgesListImpl(TCrossPair const & v, vector<CrossW
|
|||
}
|
||||
}
|
||||
|
||||
} //namespace routing
|
||||
|
||||
} // namespace routing
|
||||
|
|
|
@ -17,18 +17,21 @@ struct CrossNode
|
|||
string mwmName;
|
||||
m2::PointD point;
|
||||
|
||||
CrossNode(NodeID node, string const & mwmName, m2::PointD const & point): node(node), mwmName(mwmName), point(point) {}
|
||||
CrossNode(NodeID node, string const & mwmName, m2::PointD const & point)
|
||||
: node(node), mwmName(mwmName), point(point)
|
||||
{
|
||||
}
|
||||
CrossNode() : node(INVALID_NODE_ID), point(m2::PointD::Zero()) {}
|
||||
|
||||
inline bool IsValid() const { return node != INVALID_NODE_ID; }
|
||||
};
|
||||
|
||||
bool operator == (CrossNode const & a, CrossNode const & b)
|
||||
bool operator==(CrossNode const & a, CrossNode const & b)
|
||||
{
|
||||
return a.node == b.node && a.mwmName == b.mwmName;
|
||||
}
|
||||
|
||||
bool operator < (CrossNode const & a, CrossNode const & b)
|
||||
bool operator<(CrossNode const & a, CrossNode const & b)
|
||||
{
|
||||
if (a.node < b.node)
|
||||
return true;
|
||||
|
@ -47,15 +50,9 @@ inline string DebugPrint(CrossNode const & t)
|
|||
/// Representation of border crossing. Contains node on previous map and node on next map.
|
||||
using TCrossPair = pair<CrossNode, CrossNode>;
|
||||
|
||||
bool operator == (TCrossPair const & a, TCrossPair const & b)
|
||||
{
|
||||
return a.first == b.first;
|
||||
}
|
||||
bool operator==(TCrossPair const & a, TCrossPair const & b) { return a.first == b.first; }
|
||||
|
||||
bool operator < (TCrossPair const & a, TCrossPair const & b)
|
||||
{
|
||||
return a.first < b.first;
|
||||
}
|
||||
bool operator<(TCrossPair const & a, TCrossPair const & b) { return a.first < b.first; }
|
||||
|
||||
inline string DebugPrint(TCrossPair const & t)
|
||||
{
|
||||
|
@ -89,19 +86,23 @@ public:
|
|||
private:
|
||||
friend class Graph<TCrossPair, CrossWeightedEdge, CrossMwmGraph>;
|
||||
|
||||
TCrossPair FindNextMwmNode(OutgoingCrossNode const & startNode, TRoutingMappingPtr const & currentMapping) const;
|
||||
TCrossPair FindNextMwmNode(OutgoingCrossNode const & startNode,
|
||||
TRoutingMappingPtr const & currentMapping) const;
|
||||
|
||||
// Graph<CrossNode, CrossWeightedEdge, CrossMwmGraph> implementation:
|
||||
void GetOutgoingEdgesListImpl(TCrossPair const & v, vector<CrossWeightedEdge> & adj) const;
|
||||
void GetIngoingEdgesListImpl(TCrossPair const & v, vector<CrossWeightedEdge> & adj) const {ASSERT(!"IMPL", ());}
|
||||
void GetIngoingEdgesListImpl(TCrossPair const & v, vector<CrossWeightedEdge> & adj) const
|
||||
{
|
||||
ASSERT(!"IMPL", ());
|
||||
}
|
||||
|
||||
double HeuristicCostEstimateImpl(TCrossPair const & v, TCrossPair const & w) const
|
||||
{
|
||||
//TODO return some average values
|
||||
// TODO return some average values
|
||||
return 0.0;
|
||||
}
|
||||
|
||||
map<CrossNode, vector<CrossWeightedEdge> > m_virtualEdges;
|
||||
mutable RoutingIndexManager m_indexManager;
|
||||
};
|
||||
} // namespace routing
|
||||
} // namespace routing
|
||||
|
|
|
@ -2,22 +2,27 @@
|
|||
#include "cross_mwm_road_graph.hpp"
|
||||
#include "base/astar_algorithm.hpp"
|
||||
|
||||
namespace routing {
|
||||
|
||||
namespace routing
|
||||
{
|
||||
using TAlgorithm = AStarAlgorithm<CrossMwmGraph>;
|
||||
|
||||
/// Function to run AStar Algorythm from the base.
|
||||
IRouter::ResultCode CalculateRoute(TCrossPair const & startPos, TCrossPair const & finalPos, CrossMwmGraph const & roadGraph,
|
||||
vector<TCrossPair> & route, RoutingVisualizerFn const & routingVisualizer)
|
||||
IRouter::ResultCode CalculateRoute(TCrossPair const & startPos, TCrossPair const & finalPos,
|
||||
CrossMwmGraph const & roadGraph, vector<TCrossPair> & route,
|
||||
RoutingVisualizerFn const & routingVisualizer)
|
||||
{
|
||||
TAlgorithm m_algo;
|
||||
m_algo.SetGraph(roadGraph);
|
||||
|
||||
TAlgorithm::OnVisitedVertexCallback onVisitedVertexCallback = nullptr;
|
||||
if (nullptr != routingVisualizer)
|
||||
onVisitedVertexCallback = [routingVisualizer](TCrossPair const & cross) { routingVisualizer(cross.first.point); };
|
||||
onVisitedVertexCallback = [routingVisualizer](TCrossPair const & cross)
|
||||
{
|
||||
routingVisualizer(cross.first.point);
|
||||
};
|
||||
|
||||
TAlgorithm::Result const result = m_algo.FindPath(startPos, finalPos, route, onVisitedVertexCallback);
|
||||
TAlgorithm::Result const result =
|
||||
m_algo.FindPath(startPos, finalPos, route, onVisitedVertexCallback);
|
||||
switch (result)
|
||||
{
|
||||
case TAlgorithm::Result::OK:
|
||||
|
@ -67,12 +72,14 @@ IRouter::ResultCode CalculateCrossMwmPath(TRoutingNodes const & startGraphNodes,
|
|||
if (code != IRouter::NoError)
|
||||
return IRouter::EndPointNotFound;
|
||||
vector<TCrossPair> tempRoad;
|
||||
code = CalculateRoute({startNode, startNode}, {finalNode, finalNode}, roadGraph, tempRoad, routingVisualizer);
|
||||
code = CalculateRoute({startNode, startNode}, {finalNode, finalNode}, roadGraph, tempRoad,
|
||||
routingVisualizer);
|
||||
if (code != IRouter::NoError)
|
||||
return code;
|
||||
for (size_t i = 0; i < tempRoad.size() - 1; ++i)
|
||||
{
|
||||
route.emplace_back(tempRoad[i].second.node, tempRoad[i + 1].first.node, tempRoad[i].second.mwmName);
|
||||
route.emplace_back(tempRoad[i].second.node, tempRoad[i + 1].first.node,
|
||||
tempRoad[i].second.mwmName);
|
||||
}
|
||||
if (!route.empty())
|
||||
{
|
||||
|
@ -84,4 +91,4 @@ IRouter::ResultCode CalculateCrossMwmPath(TRoutingNodes const & startGraphNodes,
|
|||
return IRouter::NoError;
|
||||
}
|
||||
|
||||
} // namespace routing
|
||||
} // namespace routing
|
||||
|
|
|
@ -7,8 +7,8 @@
|
|||
#include "std/string.hpp"
|
||||
#include "std/vector.hpp"
|
||||
|
||||
namespace routing {
|
||||
|
||||
namespace routing
|
||||
{
|
||||
/*!
|
||||
* \brief The RoutePathCross struct contains information neaded to describe path inside single map.
|
||||
*/
|
||||
|
@ -17,7 +17,11 @@ struct RoutePathCross
|
|||
FeatureGraphNode startNode; /**< start graph node representation */
|
||||
FeatureGraphNode finalNode; /**< end graph node representation */
|
||||
|
||||
RoutePathCross(NodeID const startNode, NodeID const finalNode, string const & name) : startNode(startNode, true /* isStartNode */, name), finalNode(finalNode, false /* isStartNode*/, name) {}
|
||||
RoutePathCross(NodeID const startNode, NodeID const finalNode, string const & name)
|
||||
: startNode(startNode, true /* isStartNode */, name),
|
||||
finalNode(finalNode, false /* isStartNode*/, name)
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
using TCheckedPath = vector<RoutePathCross>;
|
||||
|
@ -37,4 +41,4 @@ IRouter::ResultCode CalculateCrossMwmPath(TRoutingNodes const & startGraphNodes,
|
|||
RoutingVisualizerFn const & RoutingVisualizerFn,
|
||||
TCheckedPath & route);
|
||||
|
||||
} // namespace routing
|
||||
} // namespace routing
|
||||
|
|
|
@ -91,9 +91,12 @@ void CrossRoutingContextReader::Load(Reader const & r)
|
|||
}
|
||||
}
|
||||
|
||||
const string & CrossRoutingContextReader::getOutgoingMwmName(OutgoingCrossNode const & outgoingNode) const
|
||||
const string & CrossRoutingContextReader::getOutgoingMwmName(
|
||||
OutgoingCrossNode const & outgoingNode) const
|
||||
{
|
||||
ASSERT(outgoingNode.m_outgoingIndex < m_neighborMwmList.size(), ("Routing context out of size mwm name index:", outgoingNode.m_outgoingIndex, m_neighborMwmList.size()));
|
||||
ASSERT(outgoingNode.m_outgoingIndex < m_neighborMwmList.size(),
|
||||
("Routing context out of size mwm name index:", outgoingNode.m_outgoingIndex,
|
||||
m_neighborMwmList.size()));
|
||||
return m_neighborMwmList[outgoingNode.m_outgoingIndex];
|
||||
}
|
||||
|
||||
|
|
|
@ -90,7 +90,9 @@ bool FindSingleRoute(FeatureGraphNode const & source, FeatureGraphNode const & t
|
|||
return false;
|
||||
}
|
||||
|
||||
FeatureGraphNode::FeatureGraphNode(NodeID const nodeId, bool const isStartNode, string const & mwmName): segmentPoint(m2::PointD::Zero()), mwmName(mwmName)
|
||||
FeatureGraphNode::FeatureGraphNode(NodeID const nodeId, bool const isStartNode,
|
||||
string const & mwmName)
|
||||
: segmentPoint(m2::PointD::Zero()), mwmName(mwmName)
|
||||
{
|
||||
node.forward_node_id = isStartNode ? nodeId : INVALID_NODE_ID;
|
||||
node.reverse_node_id = isStartNode ? INVALID_NODE_ID : nodeId;
|
||||
|
|
|
@ -388,7 +388,8 @@ size_t GetLastSegmentPointIndex(pair<size_t, size_t> const & p)
|
|||
}
|
||||
} // namespace
|
||||
|
||||
OsrmRouter::OsrmRouter(Index const * index, TCountryFileFn const & fn, RoutingVisualizerFn routingVisualization)
|
||||
OsrmRouter::OsrmRouter(Index const * index, TCountryFileFn const & fn,
|
||||
RoutingVisualizerFn routingVisualization)
|
||||
: m_pIndex(index), m_indexManager(fn, index), m_routingVisualization(routingVisualization)
|
||||
{
|
||||
}
|
||||
|
@ -416,7 +417,7 @@ bool OsrmRouter::FindRouteFromCases(TFeatureGraphNodeVec const & source,
|
|||
return false;
|
||||
}
|
||||
|
||||
//TODO (ldragunov) move this function to cross mwm router
|
||||
// TODO (ldragunov) move this function to cross mwm router
|
||||
OsrmRouter::ResultCode OsrmRouter::MakeRouteFromCrossesPath(TCheckedPath const & path,
|
||||
Route & route)
|
||||
{
|
||||
|
@ -432,8 +433,7 @@ OsrmRouter::ResultCode OsrmRouter::MakeRouteFromCrossesPath(TCheckedPath const &
|
|||
ASSERT(mwmMapping->IsValid(), ());
|
||||
MappingGuard mwmMappingGuard(mwmMapping);
|
||||
UNUSED_VALUE(mwmMappingGuard);
|
||||
if (!FindSingleRoute(cross.startNode, cross.finalNode, mwmMapping->m_dataFacade,
|
||||
routingResult))
|
||||
if (!FindSingleRoute(cross.startNode, cross.finalNode, mwmMapping->m_dataFacade, routingResult))
|
||||
return OsrmRouter::RouteNotFound;
|
||||
|
||||
// Get annotated route
|
||||
|
@ -584,7 +584,8 @@ OsrmRouter::ResultCode OsrmRouter::CalculateRoute(m2::PointD const & startPoint,
|
|||
{
|
||||
LOG(LINFO, ("Multiple mwm routing case"));
|
||||
TCheckedPath finalPath;
|
||||
ResultCode code = CalculateCrossMwmPath(startTask, m_CachedTargetTask, m_indexManager, m_routingVisualization, finalPath);
|
||||
ResultCode code = CalculateCrossMwmPath(startTask, m_CachedTargetTask, m_indexManager,
|
||||
m_routingVisualization, finalPath);
|
||||
timer.Reset();
|
||||
|
||||
// 5. Make generate answer
|
||||
|
@ -1049,9 +1050,9 @@ IRouter::ResultCode OsrmRouter::FindPhantomNodes(string const & fName, m2::Point
|
|||
Point2PhantomNode getter(mapping->m_segMapping, m_pIndex, direction);
|
||||
getter.SetPoint(point);
|
||||
|
||||
m_pIndex->ForEachInRectForMWM(getter,
|
||||
MercatorBounds::RectByCenterXYAndSizeInMeters(point, kFeatureFindingRectSideMeters),
|
||||
scales::GetUpperScale(), mapping->GetMwmId());
|
||||
m_pIndex->ForEachInRectForMWM(
|
||||
getter, MercatorBounds::RectByCenterXYAndSizeInMeters(point, kFeatureFindingRectSideMeters),
|
||||
scales::GetUpperScale(), mapping->GetMwmId());
|
||||
|
||||
if (!getter.HasCandidates())
|
||||
return StartPointNotFound;
|
||||
|
|
|
@ -82,7 +82,8 @@ protected:
|
|||
|
||||
private:
|
||||
/*!
|
||||
* \brief Makes route (points turns and other annotations) from the map cross structs and submits them to @route class
|
||||
* \brief Makes route (points turns and other annotations) from the map cross structs and submits
|
||||
* them to @route class
|
||||
* \warning monitors m_requestCancel flag for process interrupting.
|
||||
* \param path vector of pathes through mwms
|
||||
* \param route class to render final route
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
namespace routing
|
||||
{
|
||||
using TDataFacade = OsrmDataFacade<QueryEdge::EdgeData>;
|
||||
using TCountryFileFn = function<string (m2::PointD const &)>;
|
||||
using TCountryFileFn = function<string(m2::PointD const &)>;
|
||||
|
||||
/// Datamapping and facade for single MWM and MWM.routing file
|
||||
struct RoutingMapping
|
||||
|
@ -85,7 +85,8 @@ public:
|
|||
class RoutingIndexManager
|
||||
{
|
||||
public:
|
||||
RoutingIndexManager(TCountryFileFn const & fn, Index const * index): m_countryFn(fn), m_index(index)
|
||||
RoutingIndexManager(TCountryFileFn const & fn, Index const * index)
|
||||
: m_countryFn(fn), m_index(index)
|
||||
{
|
||||
ASSERT(index, ());
|
||||
}
|
||||
|
@ -100,10 +101,7 @@ public:
|
|||
for_each(m_mapping.begin(), m_mapping.end(), toDo);
|
||||
}
|
||||
|
||||
void Clear()
|
||||
{
|
||||
m_mapping.clear();
|
||||
}
|
||||
void Clear() { m_mapping.clear(); }
|
||||
|
||||
private:
|
||||
TCountryFileFn m_countryFn;
|
||||
|
@ -111,4 +109,4 @@ private:
|
|||
unordered_map<string, TRoutingMappingPtr> m_mapping;
|
||||
};
|
||||
|
||||
} // namespace routing
|
||||
} // namespace routing
|
||||
|
|
Loading…
Add table
Reference in a new issue