libosmscout 1.1.1
Loading...
Searching...
No Matches
GenRouteDat.h
Go to the documentation of this file.
1#ifndef OSMSCOUT_IMPORT_GENROUTEDAT_H
2#define OSMSCOUT_IMPORT_GENROUTEDAT_H
3
4/*
5 This source is part of the libosmscout library
6 Copyright (C) 2009 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 <list>
24#include <map>
25#include <unordered_map>
26#include <vector>
27
29
31
32#include <osmscout/Area.h>
33#include <osmscout/Way.h>
34
35#include <osmscout/ObjectRef.h>
36
41
44
47
49
51
53
54namespace osmscout {
55
56 class RouteDataGenerator CLASS_FINAL : public ImportModule
57 {
58 private:
59
60 struct RawRouteNode
61 {
62 Id id;
63 Pixel cell;
64 std::list<ObjectFileRef> objects;
65 };
66
67 struct TurnRestrictionData
68 {
69 enum Type
70 {
71 Allow = 0,
72 Forbit = 1
73 };
74
75 FileOffset fromWayOffset;
76 Id viaNodeId;
77 FileOffset toWayOffset;
78 Type type;
79 };
80
81 struct IndexEntry
82 {
83 FileOffset offset;
84 uint32_t count;
85
86 IndexEntry()
87 : offset(0),
88 count(0)
89 {
90 }
91
92 explicit IndexEntry(FileOffset offset)
93 : offset(offset),
94 count(0)
95 {
96 }
97 };
98
99 typedef std::unordered_map<FileOffset,WayRef> FileOffsetWayMap;
100 typedef std::unordered_map<FileOffset,AreaRef> FileOffsetAreaMap;
101 typedef std::unordered_set<Id> RouteNodeIdSet;
102 typedef std::list<RawRouteNode> RawRouteNodeList;
103 typedef std::map<Id,std::list<ObjectFileRef>> NodeIdObjectsMap;
104 typedef std::unordered_map<Id,std::vector<TurnRestrictionData>> ViaTurnRestrictionMap;
105
106 AccessFeatureValueReader *accessReader;
107 AccessRestrictedFeatureValueReader *accessRestrictedReader;
108 MaxSpeedFeatureValueReader *maxSpeedReader;
109 GradeFeatureValueReader *gradeReader;
110
111 private:
112 AccessFeatureValue GetAccess(const FeatureValueBuffer& buffer) const;
113
114 inline AccessFeatureValue GetAccess(const Way& way) const
115 {
116 return GetAccess(way.GetFeatureValueBuffer());
117 }
118
119 uint8_t GetMaxSpeed(const Way& way) const;
120 uint8_t GetGrade(const Way& way) const;
121
122 uint8_t CopyFlags(const Area::Ring& ring) const;
123 uint8_t CopyFlagsForward(const Way& way) const;
124 uint8_t CopyFlagsBackward(const Way& way) const;
125
126 uint16_t RegisterOrUseObjectVariantData(std::map<ObjectVariantData,uint16_t>& routeDataMap,
127 const TypeInfoRef& type,
128 uint8_t maxSpeed,
129 uint8_t grade);
130
131 bool IsAnyRoutable(Progress& progress,
132 const RawRouteNode& node,
133 const std::unordered_map<FileOffset,WayRef>& waysMap,
134 const std::unordered_map<FileOffset,AreaRef>& areasMap,
135 VehicleMask vehicles) const;
136
140 bool ReadTurnRestrictionIds(const ImportParameter& parameter,
141 Progress& progress,
142 std::map<OSMId,FileOffset>& wayIdOffsetMap,
143 std::map<OSMId,Id>& nodeMap);
144
148 bool ResolveWayIds(const ImportParameter& parameter,
149 Progress& progress,
150 std::map<OSMId,FileOffset>& wayIdOffsetMap);
151
155 bool ResolveNodeIds(const ImportParameter& parameter,
156 Progress& progress,
157 std::map<OSMId,Id>& nodeIdMap);
158
162 bool ReadTurnRestrictionData(const ImportParameter& parameter,
163 Progress& progress,
164 const std::map<OSMId,Id>& nodeIdMap,
165 const std::map<OSMId,FileOffset>& wayIdOffsetMap,
166 ViaTurnRestrictionMap& restrictions);
167
172 bool ReadTurnRestrictions(const ImportParameter& parameter,
173 Progress& progress,
174 ViaTurnRestrictionMap& restrictions);
175
180 bool CanTurn(const std::vector<TurnRestrictionData>& restrictions,
181 FileOffset from,
182 FileOffset to) const;
183
187 bool ReadIntersections(const ImportParameter& parameter,
188 Progress& progress,
189 const TypeConfig& typeConfig,
190 NodeUseMap& nodeUseMap);
191
195 bool ReadObjectsAtIntersections(const ImportParameter& parameter,
196 Progress& progress,
197 const TypeConfig& typeConfig,
198 const NodeUseMap& nodeUseMap,
199 NodeIdObjectsMap& nodeObjectsMap);
200
201 bool WriteIntersections(const ImportParameter& parameter,
202 Progress& progress,
203 NodeIdObjectsMap& nodeIdObjectsMap);
204
208 FileOffsetWayMap LoadWays(Progress& progress,
209 const TypeConfig& typeConfig,
210 FileScanner& scanner,
211 RawRouteNodeList::const_iterator startNode,
212 RawRouteNodeList::const_iterator endNode);
213
217 FileOffsetAreaMap LoadAreas(Progress& progress,
218 const TypeConfig& typeConfig,
219 FileScanner& scanner,
220 RawRouteNodeList::const_iterator startNode,
221 RawRouteNodeList::const_iterator endNode);
222
223 bool GetRouteNodePoint(Progress& progress,
224 const RawRouteNode& node,
225 FileOffsetWayMap& waysMap,
226 FileOffsetAreaMap& areasMap,
227 Point& point) const;
228
229 /*
230 uint8_t CalculateEncodedBearing(const Way& way,
231 size_t currentNode,
232 size_t nextNode,
233 bool clockwise) const;*/
234
238 void CalculateAreaPaths(RouteNode& routeNode,
239 const Area& area,
240 uint16_t objectVariantIndex,
241 const RouteNodeIdSet& routeNodeIdSet);
242
246 void CalculateCircularWayPaths(RouteNode& routeNode,
247 const Way& way,
248 uint16_t objectVariantIndex,
249 const RouteNodeIdSet& routeNodeIdSet);
250
254 void CalculateWayPaths(RouteNode& routeNode,
255 const Way& way,
256 uint16_t objectVariantIndex,
257 const RouteNodeIdSet& routeNodeIdSet);
258
262 void FillRoutePathExcludes(RouteNode& routeNode,
263 const RawRouteNode& node,
264 const ViaTurnRestrictionMap& restrictions);
265
266 bool WriteObjectVariantData(Progress& progress,
267 const std::string& variantFilename,
268 const std::map<ObjectVariantData,uint16_t>& routeDataMap);
269
270 bool WriteRouteGraph(const ImportParameter& parameter,
271 Progress& progress,
272 const TypeConfig& typeConfig,
273 const RawRouteNodeList& rawRouteNodes,
274 const RouteNodeIdSet& routeNodeIdSet,
275 const ViaTurnRestrictionMap& restrictions,
276 VehicleMask vehicles,
277 const std::string& dataFilename,
278 const std::string& variantFilename);
279
280 public:
282
283 void GetDescription(const ImportParameter& parameter,
284 ImportModuleDescription& description) const override;
285
286 bool Import(const TypeConfigRef& typeConfig,
287 const ImportParameter& parameter,
288 Progress& progress) override;
289 };
290}
291
292#endif
Definition Area.h:88
void GetDescription(const ImportParameter &parameter, ImportModuleDescription &description) const override
RouteDataGenerator()=default
bool Import(const TypeConfigRef &typeConfig, const ImportParameter &parameter, Progress &progress) override
Definition ImportModule.h:101
uint64_t Id
Definition OSMScoutTypes.h:40
uint64_t FileOffset
Definition OSMScoutTypes.h:46
std::shared_ptr< TypeConfig > TypeConfigRef
Definition TypeConfig.h:1396
Definition Area.h:39
FeatureValueReader< MaxSpeedFeature, MaxSpeedFeatureValue > MaxSpeedFeatureValueReader
Definition MaxSpeedFeature.h:97
FeatureValueReader< GradeFeature, GradeFeatureValue > GradeFeatureValueReader
Definition GradeFeature.h:88
FeatureValueReader< AccessRestrictedFeature, AccessRestrictedFeatureValue > AccessRestrictedFeatureValueReader
Definition AccessRestrictedFeature.h:159
FeatureValueReader< AccessFeature, AccessFeatureValue > AccessFeatureValueReader
Definition AccessFeature.h:276