libosmscout 1.1.1
Loading...
Searching...
No Matches
RoutingService.h
Go to the documentation of this file.
1#ifndef OSMSCOUT_ROUTINGSERVICE_H
2#define OSMSCOUT_ROUTINGSERVICE_H
3
4/*
5 This source is part of the libosmscout library
6 Copyright (C) 2012 Tim Teulings
7
8 This library is free software; you can redistribute it and/or
9 modify it under the terms of the GNU Lesser General Public
10 License as published by the Free Software Foundation; either
11 version 2.1 of the License, or (at your option) any later version.
12
13 This library is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 Lesser General Public License for more details.
17
18 You should have received a copy of the GNU Lesser General Public
19 License along with this library; if not, write to the Free Software
20 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21*/
22
23#include <atomic>
24#include <functional>
25#include <list>
26#include <memory>
27#include <set>
28#include <unordered_map>
29#include <unordered_set>
30
31#include <osmscout/lib/CoreFeatures.h>
32
33#include <osmscout/Point.h>
34
35#include <osmscout/TypeConfig.h>
36
38
39// Datafiles
41
44
45// Routing
52
54#include <osmscout/util/Cache.h>
55
57
58namespace osmscout {
59
65 class OSMSCOUT_API RoutePosition CLASS_FINAL
66 {
67 private:
68 ObjectFileRef object;
69 size_t nodeIndex=0;
70 DatabaseId database;
71
72 public:
73 RoutePosition() = default;
75 size_t nodeIndex,
76 DatabaseId database);
77
78 bool IsValid() const
79 {
80 return object.Valid();
81 }
82
84 {
85 return object;
86 }
87
88 size_t GetNodeIndex() const
89 {
90 return nodeIndex;
91 }
92
94 {
95 return database;
96 }
97 };
98
99 class OSMSCOUT_API RoutePositionResult CLASS_FINAL
100 {
101 private:
102 RoutePosition routePosition;
103 Distance distance;
104
105 public:
107
108 RoutePositionResult(const RoutePosition &routePosition, const Distance &distance);
109
111 {
112 return routePosition;
113 }
114
115 Distance GetDistance() const
116 {
117 return distance;
118 }
119
120 bool IsValid() const
121 {
122 return routePosition.IsValid();
123 }
124 };
125
126
136 class OSMSCOUT_API RouterParameter CLASS_FINAL
137 {
138 private:
139 bool debugPerformance;
140
141 public:
143
144 void SetDebugPerformance(bool debug);
145
146 bool IsDebugPerformance() const;
147 };
148
155 {
156 public:
157 virtual ~RoutingProgress() = default;
158
162 virtual void Reset() = 0;
163
171 virtual void Progress(const Distance &currentMaxDistance,
172 const Distance &overallDistance) = 0;
173 };
174
178 using RoutingProgressRef = std::shared_ptr<RoutingProgress>;
179
186 class OSMSCOUT_API RoutingParameter CLASS_FINAL
187 {
188 private:
189 BreakerRef breaker;
190 RoutingProgressRef progress;
191
192 public:
193 void SetBreaker(const BreakerRef& breaker);
194 void SetProgress(const RoutingProgressRef& progress);
195
197 {
198 return breaker;
199 }
200
202 {
203 return progress;
204 }
205 };
206
213 {
214 protected:
221 struct RNode
222 {
228 bool prevRestricted=false;
229 ObjectFileRef object;
230
231 double currentCost=0;
232 double estimateCost=0;
233 double overallCost=0;
234
235 bool restricted=true;
236
240 bool leaveRestricted=false;
241
242 RNode() = default;
243
244 RNode(const DBId& id,
245 const RouteNodeRef& node,
246 const ObjectFileRef& object)
247 : id(id),
248 node(node),
250 {
251 // no code
252 }
253
254 RNode(const DBId& id,
255 const RouteNodeRef& node,
256 const ObjectFileRef& object,
257 const DBId& prev,
258 bool prevRestricted)
259 : id(id),
260 node(node),
261 prev(prev),
264 {
265 // no code
266 }
267
268 bool operator==(const RNode& other) const
269 {
270 return id==other.id;
271 }
272
273 bool operator<(const RNode& other) const
274 {
275 return id<other.id;
276 }
277 };
278
279 using RNodeRef = std::shared_ptr<RNode>;
280
282 {
283 bool operator()(const RNodeRef& a,
284 const RNodeRef& b) const
285 {
286 if (a->overallCost==b->overallCost) {
287 return a->id<b->id;
288 }
289
290 return a->overallCost<b->overallCost;
291 }
292 };
293
312 struct VNode
313 {
315 bool currentRestricted=false;
318 ObjectFileRef object;
319
328 bool operator==(const VNode& other) const
329 {
331 }
332
342 {
343 // no code
344 }
345
358 const ObjectFileRef& object,
359 const DBId& previousNode,
366 {
367 // no code
368 }
369 };
370
376 {
377 size_t operator()(const VNode& node) const
378 {
379 return std::hash<Id>()(node.currentNode.id) ^
380 std::hash<DatabaseId>()(node.currentNode.database) ^
381 std::hash<bool>()(node.currentRestricted);
382 }
383 };
384
385 using OpenList = std::set<RNodeRef, RNodeCostCompare>;
386 using OpenListRef = std::set<RNodeRef, RNodeCostCompare>::iterator;
387
388 using OpenMap = std::unordered_map<DBId, OpenListRef>;
389 using ClosedSet = std::unordered_set<VNode, ClosedNodeHasher>;
390
391 public:
393 static const char* const FILENAME_INTERSECTIONS_DAT;
395 static const char* const FILENAME_INTERSECTIONS_IDX;
396
398 static const char* const DEFAULT_FILENAME_BASE;
399
400 static std::string GetDataFilename(const std::string& filenamebase);
401 static std::string GetData2Filename(const std::string& filenamebase);
402 static std::string GetIndexFilename(const std::string& filenamebase);
403
404 public:
407 };
408
409}
410
411#endif /* OSMSCOUT_ROUTINGSERVICE_H */
412
#define CLASS_FINAL
Definition Compiler.h:26
#define OSMSCOUT_API
Definition CoreImportExport.h:45
Definition Area.h:88
bool IsDebugPerformance() const
RoutingProgressRef GetProgress() const
Definition RoutingService.h:201
Distance GetDistance() const
Definition RoutingService.h:115
RoutePositionResult(const RoutePosition &routePosition, const Distance &distance)
BreakerRef GetBreaker() const
Definition RoutingService.h:196
RoutePosition GetRoutePosition() const
Definition RoutingService.h:110
void SetProgress(const RoutingProgressRef &progress)
bool IsValid() const
Definition RoutingService.h:78
ObjectFileRef GetObjectFileRef() const
Definition RoutingService.h:83
size_t GetNodeIndex() const
Definition RoutingService.h:88
void SetBreaker(const BreakerRef &breaker)
void SetDebugPerformance(bool debug)
RoutePosition(const ObjectFileRef &object, size_t nodeIndex, DatabaseId database)
DatabaseId GetDatabaseId() const
Definition RoutingService.h:93
Definition RoutingService.h:155
virtual ~RoutingProgress()=default
virtual void Reset()=0
virtual void Progress(const Distance &currentMaxDistance, const Distance &overallDistance)=0
std::unordered_set< VNode, ClosedNodeHasher > ClosedSet
Definition RoutingService.h:389
std::unordered_map< DBId, OpenListRef > OpenMap
Definition RoutingService.h:388
static std::string GetDataFilename(const std::string &filenamebase)
std::shared_ptr< RNode > RNodeRef
Definition RoutingService.h:279
static const char *const FILENAME_INTERSECTIONS_DAT
Relative filename of the intersection data file.
Definition RoutingService.h:393
std::set< RNodeRef, RNodeCostCompare >::iterator OpenListRef
Definition RoutingService.h:386
static const char *const DEFAULT_FILENAME_BASE
Relative filebase name for touting data as generated by default by the importer.
Definition RoutingService.h:398
static std::string GetIndexFilename(const std::string &filenamebase)
static std::string GetData2Filename(const std::string &filenamebase)
static const char *const FILENAME_INTERSECTIONS_IDX
Relative filename of the intersection index file.
Definition RoutingService.h:395
std::set< RNodeRef, RNodeCostCompare > OpenList
Definition RoutingService.h:385
std::shared_ptr< RoutingProgress > RoutingProgressRef
Definition RoutingService.h:178
uint64_t Id
Definition OSMScoutTypes.h:40
Definition Area.h:39
std::shared_ptr< Breaker > BreakerRef
Definition Breaker.h:64
uint32_t DatabaseId
Definition DBFileOffset.h:30
std::shared_ptr< RouteNode > RouteNodeRef
Definition RouteNode.h:177
Definition DBFileOffset.h:39
DatabaseId database
Definition DBFileOffset.h:40
Id id
Definition DBFileOffset.h:41
Definition RoutingService.h:376
size_t operator()(const VNode &node) const
Definition RoutingService.h:377
Definition RoutingService.h:282
bool operator()(const RNodeRef &a, const RNodeRef &b) const
Definition RoutingService.h:283
ObjectFileRef object
The object (way/area) visited from the current route node.
Definition RoutingService.h:229
bool operator==(const RNode &other) const
Definition RoutingService.h:268
double currentCost
The cost of the current up to the current node.
Definition RoutingService.h:231
bool leaveRestricted
Definition RoutingService.h:240
RNode(const DBId &id, const RouteNodeRef &node, const ObjectFileRef &object, const DBId &prev, bool prevRestricted)
Definition RoutingService.h:254
DBId prev
The file offset of the previous route node.
Definition RoutingService.h:225
DBId id
The file offset of the current route node.
Definition RoutingService.h:223
bool prevRestricted
previous node is restricted
Definition RoutingService.h:228
RNode(const DBId &id, const RouteNodeRef &node, const ObjectFileRef &object)
Definition RoutingService.h:244
bool restricted
Flag to signal, if access to this node is restricted ("access restrictions").
Definition RoutingService.h:235
bool operator<(const RNode &other) const
Definition RoutingService.h:273
double overallCost
The overall costs (currentCost+estimateCost).
Definition RoutingService.h:233
RouteNodeRef node
The current route node.
Definition RoutingService.h:224
Id exclude
Definition RoutingService.h:226
double estimateCost
The estimated cost from here to the target.
Definition RoutingService.h:232
Definition RoutingService.h:313
DBId currentNode
FileOffset of this route node.
Definition RoutingService.h:314
ObjectFileRef object
The object (way/area) visited from the current route node.
Definition RoutingService.h:318
bool operator==(const VNode &other) const
Definition RoutingService.h:328
bool currentRestricted
Current node is accessed from restricted way.
Definition RoutingService.h:315
VNode(const DBId &currentNode, bool currentRestricted, const ObjectFileRef &object, const DBId &previousNode, bool previousRestricted)
Definition RoutingService.h:356
VNode(const DBId &currentNode, bool currentRestricted)
Definition RoutingService.h:340
bool previousRestricted
Previous node was accessed from restricted way.
Definition RoutingService.h:317
DBId previousNode
FileOffset of the previous route node.
Definition RoutingService.h:316