1#ifndef OSMSCOUT_ROUTEPOSTPROCESSOR_H
2#define OSMSCOUT_ROUTEPOSTPROCESSOR_H
26#include <unordered_map>
28#include <osmscout/lib/CoreFeatures.h>
88 std::string startDescription;
104 std::string targetDescription;
162 const ObjectFileRef& originObject,
163 const ObjectFileRef& targetObject);
179 static const double curveMinInitialAngle;
180 static const double curveMaxInitialAngle;
181 static const Distance curveMaxNodeDistance;
182 static const Distance curveMaxDistance;
183 static const double curveMinAngle;
249 bool canBeUsedAsExit;
254 bool inRoundabout{
false};
255 size_t roundaboutCrossingCounter{0};
256 bool roundaboutClockwise{
false};
267 ObjectFileRef incomingPath,
268 size_t incomingNode);
276 const std::list<RouteDescription::Node>::const_iterator &lastNode,
277 const std::list<RouteDescription::Node>::iterator &node,
278 const std::list<RouteDescription::Node>::const_iterator &end);
279 bool HandleNameChange(std::list<RouteDescription::Node>::const_iterator& lastNode,
280 std::list<RouteDescription::Node>::iterator& node,
281 const std::list<RouteDescription::Node>::const_iterator &end);
283 const std::list<RouteDescription::Node>::iterator& node,
284 const std::list<RouteDescription::Node>::const_iterator& end);
290 inline std::vector<NodeExit> CollectNodeExits(
const RoutePostprocessor& postprocessor,
293 return CollectNodeWays(postprocessor, node,
true);
313 ObjectFileRef object;
316 std::list<RouteDescription::Node>::iterator node;
320 std::set<ObjectFileRef> CollectPaths(
const std::list<RouteDescription::Node>& nodes)
const;
322 const std::list<RouteDescription::Node>& nodes)
const;
324 const std::list<RouteDescription::Node>& nodes)
const;
325 std::map<ObjectFileRef,std::set<ObjectFileRef>> CollectPOICandidates(
const Database& database,
326 const std::set<ObjectFileRef>& paths,
327 const std::list<WayRef>& ways,
328 const std::list<AreaRef>& areas);
329 std::map<ObjectFileRef,POIAtRoute> AnalysePOICandidates(
const RoutePostprocessor& postprocessor,
331 std::list<RouteDescription::Node>& nodes,
332 const TypeInfoSet& nodeTypes,
333 const TypeInfoSet& areaTypes,
334 const std::unordered_map<FileOffset,NodeRef>& nodeMap,
335 const std::unordered_map<FileOffset,AreaRef>& areaMap,
336 const std::map<ObjectFileRef,std::set<ObjectFileRef>>& poiCandidates);
337 void SortInCollectedPOIs(
const DatabaseId& databaseId,
338 const std::map<ObjectFileRef,POIAtRoute>& pois);
378 Distance distanceBefore;
388 std::vector<int> sectionLengths;
399 std::vector<RoutingProfileRef> profiles;
400 std::vector<DatabaseRef> databases;
402 std::unordered_map<DBFileOffset,AreaRef> areaMap;
403 std::unordered_map<DBFileOffset,WayRef> wayMap;
404 std::unordered_map<DBFileOffset,NodeRef> nodeMap;
406 std::unordered_map<DatabaseId,NameFeatureValueReader*> nameReaders;
407 std::unordered_map<DatabaseId,RefFeatureValueReader*> refReaders;
408 std::unordered_map<DatabaseId,BridgeFeatureReader*> bridgeReaders;
409 std::unordered_map<DatabaseId,RoundaboutFeatureReader*> roundaboutReaders;
410 std::unordered_map<DatabaseId,ClockwiseDirectionFeatureReader*> clockwiseDirectionReaders;
411 std::unordered_map<DatabaseId,DestinationFeatureValueReader*> destinationReaders;
412 std::unordered_map<DatabaseId,MaxSpeedFeatureValueReader*> maxSpeedReaders;
413 std::unordered_map<DatabaseId,LanesFeatureValueReader*> lanesReaders;
414 std::unordered_map<DatabaseId,AccessFeatureValueReader*> accessReaders;
416 std::unordered_map<DatabaseId,TypeInfoSet> motorwayTypes;
417 std::unordered_map<DatabaseId,TypeInfoSet> motorwayLinkTypes;
418 std::unordered_map<DatabaseId,TypeInfoSet> junctionTypes;
419 std::unordered_map<DatabaseId,TypeInfoRef> miniRoundaboutTypes;
432 Duration GetTime(
DatabaseId dbId,
const Area& area,
const Distance &deltaDistance)
const;
437 const ObjectFileRef&
object)
const;
439 const Node& node)
const;
441 const Area& area)
const;
443 const Way& way)
const;
465 const ObjectFileRef&
object)
const;
469 const ObjectFileRef&
object)
const;
471 bool IsBackwardPath(
const ObjectFileRef&
object,
472 size_t fromNodeIndex,
473 size_t toNodeIndex)
const;
475 bool IsForwardPath(
const ObjectFileRef&
object,
476 size_t fromNodeIndex,
477 size_t toNodeIndex)
const;
480 const ObjectFileRef&
object)
const;
483 size_t nodeIndex)
const;
496 const std::vector<RoutingProfileRef>& profiles,
497 const std::vector<DatabaseRef>& databases,
498 const std::list<PostprocessorRef>& processors,
499 const std::set<std::string,std::less<>>& motorwayTypeNames=std::set<std::string,std::less<>>(),
500 const std::set<std::string,std::less<>>& motorwayLinkTypeNames=std::set<std::string,std::less<>>(),
501 const std::set<std::string,std::less<>>& junctionTypeNames=std::set<std::string,std::less<>>(),
502 const std::string& miniRoundaboutTypeName=
"highway_mini_roundabout");
#define OSMSCOUT_API
Definition CoreImportExport.h:45
Definition RouteDescription.h:688
Definition RouteDescription.h:55
std::shared_ptr< CrossingWaysDescription > CrossingWaysDescriptionRef
Definition RouteDescription.h:256
std::shared_ptr< NameDescription > NameDescriptionRef
Definition RouteDescription.h:178
std::shared_ptr< LaneDescription > LaneDescriptionRef
Definition RouteDescription.h:629
std::shared_ptr< DestinationDescription > DestinationDescriptionRef
Definition RouteDescription.h:495
CrossingWaysPostprocessor()=default
bool Process(const RoutePostprocessor &postprocessor, RouteDescription &description) override
bool Process(const RoutePostprocessor &postprocessor, RouteDescription &description) override
DestinationPostprocessor()=default
bool Process(const RoutePostprocessor &postprocessor, RouteDescription &description) override
DirectionPostprocessor()=default
DistanceAndTimePostprocessor()=default
bool Process(const RoutePostprocessor &postprocessor, RouteDescription &description) override
Definition RoutePostprocessor.h:236
bool Process(const RoutePostprocessor &postprocessor, RouteDescription &description) override
LanesPostprocessor()=default
bool Process(const RoutePostprocessor &postprocessor, RouteDescription &description) override
bool Process(const RoutePostprocessor &postprocessor, RouteDescription &description) override
MaxSpeedPostprocessor()=default
MotorwayJunctionPostprocessor()=default
bool Process(const RoutePostprocessor &postprocessor, RouteDescription &description) override
bool Process(const RoutePostprocessor &postprocessor, RouteDescription &description) override
POIsPostprocessor()=default
Definition RoutePostprocessor.h:71
virtual ~Postprocessor()=default
virtual bool Process(const RoutePostprocessor &postprocessor, RouteDescription &description)=0
SectionsPostprocessor(const std::vector< int > §ionLengths)
Definition RoutePostprocessor.h:390
bool Process(const RoutePostprocessor &postprocessor, RouteDescription &description) override
StartPostprocessor(const std::string &startDescription)
bool Process(const RoutePostprocessor &postprocessor, RouteDescription &description) override
bool Process(const RoutePostprocessor &postprocessor, RouteDescription &description) override
SuggestedLanesPostprocessor(const Distance &distanceBefore=Meters(500))
Definition RoutePostprocessor.h:372
bool Process(const RoutePostprocessor &postprocessor, RouteDescription &description) override
TargetPostprocessor(const std::string &targetDescription)
WayNamePostprocessor()=default
bool Process(const RoutePostprocessor &postprocessor, RouteDescription &description) override
WayTypePostprocessor()=default
bool Process(const RoutePostprocessor &postprocessor, RouteDescription &description) override
Definition RoutePostprocessor.h:63
bool PostprocessRouteDescription(RouteDescription &description, const std::vector< RoutingProfileRef > &profiles, const std::vector< DatabaseRef > &databases, const std::list< PostprocessorRef > &processors, const std::set< std::string, std::less<> > &motorwayTypeNames=std::set< std::string, std::less<> >(), const std::set< std::string, std::less<> > &motorwayLinkTypeNames=std::set< std::string, std::less<> >(), const std::set< std::string, std::less<> > &junctionTypeNames=std::set< std::string, std::less<> >(), const std::string &miniRoundaboutTypeName="highway_mini_roundabout")
std::shared_ptr< LanesPostprocessor > LanesPostprocessorRef
Definition RoutePostprocessor.h:362
std::shared_ptr< Postprocessor > PostprocessorRef
Definition RoutePostprocessor.h:79
std::shared_ptr< InstructionPostprocessor > InstructionPostprocessorRef
Definition RoutePostprocessor.h:302
std::shared_ptr< SuggestedLanesPostprocessor > SuggestedLanesPostprocessorRef
Definition RoutePostprocessor.h:396
std::shared_ptr< POIsPostprocessor > POIsPostprocessorRef
Definition RoutePostprocessor.h:347
uint64_t Id
Definition OSMScoutTypes.h:40
Distance Meters(double m)
Definition Distance.h:358
std::shared_ptr< Way > WayRef
Definition Way.h:213
std::shared_ptr< Area > AreaRef
Definition Area.h:360
uint32_t DatabaseId
Definition DBFileOffset.h:30
std::shared_ptr< Node > NodeRef
Definition Node.h:125
Timestamp::duration Duration
Definition Time.h:29
Definition DBFileOffset.h:93