1#ifndef OSMSCOUT_ABSTRACTROUTINGSERVICE_H
2#define OSMSCOUT_ABSTRACTROUTINGSERVICE_H
28#include <unordered_map>
29#include <unordered_set>
31#include <osmscout/lib/CoreFeatures.h>
56 Distance currentMaxDistance;
57 Distance overallDistance;
58 std::vector<int> sectionLengths;
65 this->overallDistance=overallDistance;
70 this->currentMaxDistance=currentMaxDistance;
75 return overallDistance;
80 return currentMaxDistance;
95 return !route.IsEmpty();
100 return sectionLengths;
105 this->sectionLengths.push_back(length);
110 this->sectionLengths.clear();
148 RouteDescriptionRef description;
191 template <
class RoutingState>
200 virtual bool CanUse(
const RoutingState& state,
203 size_t pathIndex) = 0;
217 size_t outPathIndex) = 0;
224 const Distance &wayLength) = 0;
228 const Distance &targetDistance) = 0;
232 const Distance &targetDistance) = 0;
236 double cost)
const = 0;
239 std::unordered_map<DBId,RouteNodeRef> &routeNodeMap) = 0;
257 std::unordered_map<DBFileOffset,WayRef> &wayMap) = 0;
263 std::unordered_map<DBFileOffset,AreaRef> &areaMap) = 0;
267 std::list<VNode>& nodes);
280 size_t& routeNodeIndex);
286 size_t& routeNodeIndex);
299 const RoutePosition& position,
300 GeoCoord& startCoord,
301 const GeoCoord& targetCoord,
308 const RoutePosition& position,
309 GeoCoord& targetCoord,
314 const RoutePosition& position,
315 GeoCoord& targetCoord,
320 const RoutePosition& position,
322 size_t routeNodeIndex,
324 const GeoCoord& startCoord,
325 const GeoCoord& targetCoord,
331 size_t startNodeIndex,
332 const ObjectFileRef&
object,
335 size_t targetNodeIndex);
338 const RoutePosition& position,
339 GeoCoord& startCoord,
340 const GeoCoord& targetCoord,
347 const std::list<VNode>& nodes,
348 const RoutePosition& start,
349 const RoutePosition& target,
365 RoutingResult &result,
366 const RoutingParameter& parameter,
367 const GeoCoord &targetCoord,
369 size_t &nodesIgnoredCount,
370 Distance ¤tMaxDistance,
371 const Distance &overallDistance,
372 const double &costLimit);
375 const Bearing& vehicleBearing,
376 const RoutePosition& start,
385 const RoutePosition& start,
386 const RoutePosition& target,
387 const std::optional<osmscout::Bearing> &bearing,
388 const RoutingParameter& parameter);
#define CLASS_FINAL
Definition Compiler.h:26
#define OSMSCOUT_API
Definition CoreImportExport.h:45
virtual double GetUTurnCost(const RoutingState &state, const DatabaseId databaseId)=0
RoutePointsResult TransformRouteDataToPoints(const RouteData &data)
bool RestrictInitialUTurn(const RoutingState &state, const Bearing &vehicleBearing, const RoutePosition &start, RNodeRef startForwardNode, RNodeRef startBackwardNode)
virtual bool GetRouteNodes(const std::set< DBId > &routeNodeIds, std::unordered_map< DBId, RouteNodeRef > &routeNodeMap)=0
bool GetTargetNodes(const RoutingState &state, const RoutePosition &position, GeoCoord &targetCoord, RouteNodeRef &forwardNode, RouteNodeRef &backwardNode)
RoutingResult CalculateRoute(RoutingState &state, const RoutePosition &start, const RoutePosition &target, const std::optional< osmscout::Bearing > &bearing, const RoutingParameter ¶meter)
virtual bool ResolveRouteDataJunctions(RouteData &route)=0
virtual bool WalkToOtherDatabases(const RoutingState &state, RNodeRef ¤t, RouteNodeRef ¤tRouteNode, OpenList &openList, OpenMap &openMap, const ClosedSet &closedSet)
bool debugPerformance
Definition AbstractRoutingService.h:195
virtual double GetCosts(const RoutingState &state, DatabaseId database, const WayRef &way, const Distance &wayLength)=0
virtual bool CanUseForward(const RoutingState &state, const DatabaseId &database, const WayRef &way)=0
void GetTargetBackwardRouteNode(const RoutingState &state, const DatabaseId &database, const WayRef &way, size_t nodeIndex, RouteNodeRef &routeNode)
virtual bool CanUseBackward(const RoutingState &state, const DatabaseId &database, const WayRef &way)=0
bool GetRNode(const RoutingState &state, const RoutePosition &position, const WayRef &way, size_t routeNodeIndex, const RouteNodeRef &routeNode, const GeoCoord &startCoord, const GeoCoord &targetCoord, RNodeRef &node)
RouteWayResult TransformRouteDataToWay(const RouteData &data)
virtual std::string GetCostString(const RoutingState &state, DatabaseId database, double cost) const =0
virtual bool CanUse(const RoutingState &state, DatabaseId database, const RouteNode &routeNode, size_t pathIndex)=0
virtual std::vector< DBId > GetNodeTwins(const RoutingState &state, DatabaseId database, Id id)=0
virtual bool GetWaysByOffset(const std::set< DBFileOffset > &wayOffsets, std::unordered_map< DBFileOffset, WayRef > &wayMap)=0
void GetStartBackwardRouteNode(const RoutingState &state, const DatabaseId &database, const WayRef &way, size_t nodeIndex, RouteNodeRef &routeNode, size_t &routeNodeIndex)
virtual double GetCosts(const RoutingState &state, DatabaseId database, const RouteNode &routeNode, size_t inPathIndex, size_t outPathIndex)=0
RouteDescriptionResult TransformRouteDataToRouteDescription(const RouteData &data)
void GetTargetForwardRouteNode(const RoutingState &state, const DatabaseId &database, const WayRef &way, size_t nodeIndex, RouteNodeRef &routeNode)
virtual bool GetRouteNode(const DBId &id, RouteNodeRef &node)=0
AbstractRoutingService(const RouterParameter ¶meter)
bool GetWayTargetNodes(const RoutingState &state, const RoutePosition &position, GeoCoord &targetCoord, RouteNodeRef &forwardNode, RouteNodeRef &backwardNode)
void GetStartForwardRouteNode(const RoutingState &state, const DatabaseId &database, const WayRef &way, size_t nodeIndex, RouteNodeRef &routeNode, size_t &routeNodeIndex)
virtual bool WalkPaths(const RoutingState &state, RNodeRef ¤t, RouteNodeRef ¤tRouteNode, OpenList &openList, OpenMap &openMap, ClosedSet &closedSet, RoutingResult &result, const RoutingParameter ¶meter, const GeoCoord &targetCoord, const Vehicle &vehicle, size_t &nodesIgnoredCount, Distance ¤tMaxDistance, const Distance &overallDistance, const double &costLimit)
void AddNodes(RouteData &route, DatabaseId database, Id startNodeId, size_t startNodeIndex, const ObjectFileRef &object, size_t idCount, bool oneway, size_t targetNodeIndex)
virtual double GetCostLimit(const RoutingState &state, DatabaseId database, const Distance &targetDistance)=0
~AbstractRoutingService() override
virtual bool GetWayByOffset(const DBFileOffset &offset, WayRef &way)=0
bool ResolveRNodesToRouteData(const RoutingState &state, const std::list< VNode > &nodes, const RoutePosition &start, const RoutePosition &target, RouteData &route)
bool GetStartNodes(const RoutingState &state, const RoutePosition &position, GeoCoord &startCoord, const GeoCoord &targetCoord, RouteNodeRef &forwardRouteNode, RouteNodeRef &backwardRouteNode, RNodeRef &forwardRNode, RNodeRef &backwardRNode)
virtual std::map< DatabaseId, std::string > GetDatabaseMapping() const =0
virtual double GetEstimateCosts(const RoutingState &state, DatabaseId database, const Distance &targetDistance)=0
virtual bool GetAreaByOffset(const DBFileOffset &offset, AreaRef &area)=0
bool GetWayStartNodes(const RoutingState &state, const RoutePosition &position, GeoCoord &startCoord, const GeoCoord &targetCoord, RouteNodeRef &forwardRouteNode, RouteNodeRef &backwardRouteNode, RNodeRef &forwardRNode, RNodeRef &backwardRNode)
void ResolveRNodeChainToList(const RNode &finalRouteNode, const ClosedSet &closedSet, std::list< VNode > &nodes)
virtual Vehicle GetVehicle(const RoutingState &state)=0
virtual bool GetAreasByOffset(const std::set< DBFileOffset > &areaOffsets, std::unordered_map< DBFileOffset, AreaRef > &areaMap)=0
bool Success() const
Definition AbstractRoutingService.h:93
RouteDescriptionRef GetDescription() const
Definition AbstractRoutingService.h:159
void ClearSectionLengths()
Definition AbstractRoutingService.h:108
RouteWayResult(const WayRef &way)
void SetCurrentMaxDistance(const Distance ¤tMaxDistance)
Definition AbstractRoutingService.h:68
Distance GetCurrentMaxDistance() const
Definition AbstractRoutingService.h:78
Distance GetOverallDistance() const
Definition AbstractRoutingService.h:73
RoutePointsRef GetPoints() const
Definition AbstractRoutingService.h:138
void SetOverallDistance(const Distance &overallDistance)
Definition AbstractRoutingService.h:63
WayRef GetWay() const
Definition AbstractRoutingService.h:180
RouteData & GetRoute()
Definition AbstractRoutingService.h:83
void AppendSectionLength(int length)
Definition AbstractRoutingService.h:103
const std::vector< int > & GetSectionLenghts() const
Definition AbstractRoutingService.h:98
const RouteData & GetRoute() const
Definition AbstractRoutingService.h:88
RouteDescriptionResult(const RouteDescriptionRef &description)
RoutePointsResult(const RoutePointsRef &points)
Definition RouteData.h:36
Definition RouteNode.h:62
std::unordered_set< VNode, ClosedNodeHasher > ClosedSet
Definition RoutingService.h:389
std::unordered_map< DBId, OpenListRef > OpenMap
Definition RoutingService.h:388
std::shared_ptr< RNode > RNodeRef
Definition RoutingService.h:279
std::set< RNodeRef, RNodeCostCompare > OpenList
Definition RoutingService.h:385
uint64_t Id
Definition OSMScoutTypes.h:40
std::shared_ptr< Way > WayRef
Definition Way.h:213
std::shared_ptr< Area > AreaRef
Definition Area.h:360
std::shared_ptr< RoutePoints > RoutePointsRef
Definition AbstractRoutingService.h:121
uint32_t DatabaseId
Definition DBFileOffset.h:30
std::shared_ptr< RouteNode > RouteNodeRef
Definition RouteNode.h:177
std::shared_ptr< RouteDescription > RouteDescriptionRef
Definition RouteDescription.h:834
Vehicle
Definition OSMScoutTypes.h:55
Definition DBFileOffset.h:93
Definition DBFileOffset.h:39
const std::vector< Point > points
Definition AbstractRoutingService.h:116
RoutePoints(const std::list< Point > &points)
Definition RoutingService.h:222