libosmscout 1.1.1
Loading...
Searching...
No Matches
MultiDBRoutingService.h
Go to the documentation of this file.
1#ifndef OSMSCOUT_MULTIDBROUTINGSERVICE_H
2#define OSMSCOUT_MULTIDBROUTINGSERVICE_H
3
4/*
5 This source is part of the libosmscout library
6 Copyright (C) 2016 Tim Teulings
7 Copyright (C) 2017 Lukas Karas
8
9 This library is free software; you can redistribute it and/or
10 modify it under the terms of the GNU Lesser General Public
11 License as published by the Free Software Foundation; either
12 version 2.1 of the License, or (at your option) any later version.
13
14 This library is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 Lesser General Public License for more details.
18
19 You should have received a copy of the GNU Lesser General Public
20 License along with this library; if not, write to the Free Software
21 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22*/
23
24#include <osmscout/Pixel.h>
25
31
32namespace osmscout {
33
39 class OSMSCOUT_API MultiDBRoutingService CLASS_FINAL : public AbstractRoutingService<MultiDBRoutingState>
40 {
41 private:
42 struct DatabaseHandle CLASS_FINAL
43 {
44 DatabaseId dbId; //<! Numeric id of the db (also index to the handles array)
45 DatabaseRef database; //<! Object db
47 SimpleRoutingServiceRef router; //<! Simple router for the given db
48 RoutingProfileRef profile; //<! Profile for the given db
49 };
50
51 public:
52 using RoutingProfileBuilder = std::function<RoutingProfileRef (const DatabaseRef &)>;
53
54 private:
55 std::vector<DatabaseHandle> handles;
56 bool isOpen=false;
57
58 private:
59 Vehicle GetVehicle(const MultiDBRoutingState& state) override;
60
61 bool CanUseForward(const MultiDBRoutingState& state,
62 const DatabaseId& database,
63 const WayRef& way) override;
64
65 bool CanUseBackward(const MultiDBRoutingState& state,
66 const DatabaseId& database,
67 const WayRef& way) override;
68
69 double GetCosts(const MultiDBRoutingState& state,
70 DatabaseId databaseId,
71 const RouteNode& routeNode,
72 size_t inPathIndex,
73 size_t outPathIndex) override;
74
75 double GetCosts(const MultiDBRoutingState& state,
76 DatabaseId database,
77 const WayRef &way,
78 const Distance &wayLength) override;
79
80 double GetUTurnCost(const MultiDBRoutingState& state, const DatabaseId databaseId) override;
81
82 double GetEstimateCosts(const MultiDBRoutingState& state,
83 DatabaseId database,
84 const Distance &targetDistance) override;
85
86 double GetCostLimit(const MultiDBRoutingState& state,
87 DatabaseId database,
88 const Distance &targetDistance) override;
89
90 std::string GetCostString(const MultiDBRoutingState& profile,
91 DatabaseId database,
92 double cost) const override;
93
94 bool GetRouteNodes(const std::set<DBId> &routeNodeIds,
95 std::unordered_map<DBId,RouteNodeRef> &routeNodeMap) override;
96
97 bool GetRouteNode(const DBId &id,
98 RouteNodeRef &node) override;
99
100 bool GetWayByOffset(const DBFileOffset &offset,
101 WayRef &way) override;
102
103 bool GetWaysByOffset(const std::set<DBFileOffset> &wayOffsets,
104 std::unordered_map<DBFileOffset,WayRef> &wayMap) override;
105
106 bool GetAreaByOffset(const DBFileOffset &offset,
107 AreaRef &area) override;
108
109 bool GetAreasByOffset(const std::set<DBFileOffset> &areaOffsets,
110 std::unordered_map<DBFileOffset,AreaRef> &areaMap) override;
111
112 bool ResolveRouteDataJunctions(RouteData& route) override;
113
114 std::vector<DBId> GetNodeTwins(const MultiDBRoutingState& state,
115 DatabaseId database,
116 Id id) override;
117
118 bool CanUse(const MultiDBRoutingState& state,
119 DatabaseId databaseId,
120 const RouteNode& routeNode,
121 size_t pathIndex) override;
122
123 public:
125 const std::vector<DatabaseRef> &databases);
127
128 bool Open(RoutingProfileBuilder routingProfileBuilder);
129
130 void Close();
131
141 RoutePositionResult GetRoutableNode(const DatabaseId &dbId, const std::vector<ObjectFileRef> &refs);
142
144 const Distance &radius=Kilometers(1)) const;
145
147 const RoutePosition &target,
148 const std::optional<osmscout::Bearing> &bearing,
149 const RoutingParameter &parameter);
150
151 RoutingResult CalculateRoute(const std::vector<osmscout::GeoCoord>& via,
152 const Distance &radius,
153 const RoutingParameter& parameter);
154
156
158
160
162 const std::list<RoutePostprocessor::PostprocessorRef> &postprocessors);
163
164 std::map<DatabaseId, std::string> GetDatabaseMapping() const override;
165
166 std::optional<DatabaseId> GetDatabaseId(const std::string& databasePath) const;
167 };
168
171 using MultiDBRoutingServiceRef = std::shared_ptr<MultiDBRoutingService>;
172
173}
174
175#endif /* OSMSCOUT_MULTIDBROUTINGSERVICE_H */
#define CLASS_FINAL
Definition Compiler.h:26
#define OSMSCOUT_API
Definition CoreImportExport.h:45
Definition AbstractRoutingService.h:193
Definition Area.h:88
RoutingResult CalculateRoute(const RoutePosition &start, const RoutePosition &target, const std::optional< osmscout::Bearing > &bearing, const RoutingParameter &parameter)
bool GetAreasByOffset(const OffsetsCol &offsets, DataCol &areas) const
Definition Database.h:427
const GeoCoord coord
Definition RouteStateAgent.h:49
bool PostProcessRouteDescription(RouteDescription &description, const std::list< RoutePostprocessor::PostprocessorRef > &postprocessors)
RoutingResult CalculateRoute(const std::vector< osmscout::GeoCoord > &via, const Distance &radius, const RoutingParameter &parameter)
RoutePointsResult TransformRouteDataToPoints(const RouteData &data)
~MultiDBRoutingService() override
std::optional< DatabaseId > GetDatabaseId(const std::string &databasePath) const
MultiDBRoutingService(const RouterParameter &parameter, const std::vector< DatabaseRef > &databases)
RouteWayResult TransformRouteDataToWay(const RouteData &data)
std::function< RoutingProfileRef(const DatabaseRef &)> RoutingProfileBuilder
Definition MultiDBRoutingService.h:52
bool Open(RoutingProfileBuilder routingProfileBuilder)
bool GetAreaByOffset(const FileOffset &offset, AreaRef &area) const
bool GetWayByOffset(const FileOffset &offset, WayRef &way) const
std::map< DatabaseId, std::string > GetDatabaseMapping() const override
const Distance targetDistance
Definition RouteStateAgent.h:52
const GeoCoord target
Definition RouteStateAgent.h:50
RoutePositionResult GetRoutableNode(const DatabaseId &dbId, const std::vector< ObjectFileRef > &refs)
RoutableObjectsRef data
Definition DataAgent.h:63
RouteDescriptionResult TransformRouteDataToRouteDescription(const RouteData &data)
bool GetWaysByOffset(const OffsetsCol &offsets, DataCol &ways) const
Definition Database.h:444
RoutePositionResult GetClosestRoutableNode(const GeoCoord &coord, const Distance &radius=Kilometers(1)) const
Definition MultiDBRoutingState.h:42
Definition RouteData.h:36
Definition RouteDescription.h:55
Definition RouteNode.h:62
std::shared_ptr< RoutingDatabase > RoutingDatabaseRef
Definition RoutingDB.h:103
std::shared_ptr< SimpleRoutingService > SimpleRoutingServiceRef
Definition SimpleRoutingService.h:261
std::shared_ptr< MultiDBRoutingService > MultiDBRoutingServiceRef
Definition MultiDBRoutingService.h:171
uint64_t Id
Definition OSMScoutTypes.h:40
Definition Area.h:39
std::shared_ptr< RoutingProfile > RoutingProfileRef
Definition RoutingProfile.h:182
std::shared_ptr< Way > WayRef
Definition Way.h:213
std::shared_ptr< Area > AreaRef
Definition Area.h:360
Distance Kilometers(double km)
Definition Distance.h:362
uint32_t DatabaseId
Definition DBFileOffset.h:30
std::shared_ptr< RouteNode > RouteNodeRef
Definition RouteNode.h:177
std::shared_ptr< Database > DatabaseRef
Reference counted reference to an Database instance.
Definition Database.h:555
Vehicle
Definition OSMScoutTypes.h:55
DatabaseId dbId
Definition MultiDBRoutingService.h:44
DatabaseRef database
Definition MultiDBRoutingService.h:45
RoutingDatabaseRef routingDatabase
Definition MultiDBRoutingService.h:46
RoutingProfileRef profile
Definition MultiDBRoutingService.h:48
SimpleRoutingServiceRef router
Definition MultiDBRoutingService.h:47
Definition DBFileOffset.h:93
Definition DBFileOffset.h:39