Monday, 29 June 2015

routing - Is there a way to route different vehicles within OSM2PO?


Is there a way to route different vehicles within OSM2PO? I would like to start the service with a config file and then turn different flags on/off depending on whether the route is for a bike or a car or a pedestrian.



Answer



Yes. But this decision has to be made dynamically. Meaning, you'll have to overwrite the DefaultRouter or alternatively implement one from scratch.



Let's prefer the first approach:



  • Overwrite traverse(...) in order to get a reference to the Graph-Object. (do not forget to delegate to super.traverse() at the end)

  • Overwrite calcEdgeCost(int index) The index-parameter points to the current edge while traversing. normally calcEdgeCost returns either graph.getEdgeCostsKm()[index] or graph.getEdgeCostsH()[index]

  • The road type is accessible via graph.getEdgeFlags()[index] which returns the configured classId (e.g. 21 == Secondary)

  • If you need more Properties, you might want to overwrite DefaultBuildInterceptor or implement another GraphBuildInterceptor.


  • car/bike/foot can be set in the Properties argument of traverse() before each call.





  • Alernatively you can implement one Router per UseCase



  • or even one Graph per UseCase

  • or even both.


No comments:

Post a Comment

arcpy - Changing output name when exporting data driven pages to JPG?

Is there a way to save the output JPG, changing the output file name to the page name, instead of page number? I mean changing the script fo...