Class QueryGraphWeighting

java.lang.Object
com.graphhopper.routing.weighting.QueryGraphWeighting
All Implemented Interfaces:
Weighting

public class QueryGraphWeighting extends Object implements Weighting
Whenever a QueryGraph is used for shortest path calculations including turn costs we need to wrap the Weighting we want to use with this class. Otherwise turn costs at virtual nodes and/or including virtual edges will not be calculated correctly.
  • Constructor Details

    • QueryGraphWeighting

      public QueryGraphWeighting(BaseGraph graph, Weighting weighting, com.carrotsearch.hppc.IntArrayList closestEdges)
  • Method Details

    • calcMinWeightPerDistance

      public double calcMinWeightPerDistance()
      Description copied from interface: Weighting
      Used only for the heuristic estimation in A*
      Specified by:
      calcMinWeightPerDistance in interface Weighting
      Returns:
      minimal weight per meter. E.g. if you calculate the fastest way the return value is '1/max_velocity' or a shortest weighting would return 1.
    • calcEdgeWeight

      public double calcEdgeWeight(EdgeIteratorState edgeState, boolean reverse)
      Description copied from interface: Weighting
      This method calculates the weight of a given EdgeIteratorState. E.g. a high value indicates that the edge should be avoided during shortest path search. Make sure that this method is very fast and optimized as this is called potentially millions of times for one route or a lot more for nearly any preprocessing phase.
      Specified by:
      calcEdgeWeight in interface Weighting
      Parameters:
      edgeState - the edge for which the weight should be calculated
      reverse - if the specified edge is specified in reverse direction e.g. from the reverse case of a bidirectional search.
      Returns:
      the calculated weight with the specified velocity has to be in the range of 0 and +Infinity. Make sure your method does not return NaN which can e.g. occur for 0/0.
    • calcTurnWeight

      public double calcTurnWeight(int inEdge, int viaNode, int outEdge)
      Specified by:
      calcTurnWeight in interface Weighting
    • calcEdgeMillis

      public long calcEdgeMillis(EdgeIteratorState edgeState, boolean reverse)
      Description copied from interface: Weighting
      This method calculates the time taken (in milliseconds) to travel along the specified edgeState. It is typically used for post-processing and on only a few thousand edges.
      Specified by:
      calcEdgeMillis in interface Weighting
    • calcTurnMillis

      public long calcTurnMillis(int inEdge, int viaNode, int outEdge)
      Specified by:
      calcTurnMillis in interface Weighting
    • hasTurnCosts

      public boolean hasTurnCosts()
      Description copied from interface: Weighting
      This method can be used to check whether or not this weighting returns turn costs (or if they are all zero). This is sometimes needed to do safety checks as not all graph algorithms can be run edge-based and might yield wrong results when turn costs are applied while running node-based.
      Specified by:
      hasTurnCosts in interface Weighting
    • getName

      public String getName()
      Specified by:
      getName in interface Weighting
    • toString

      public String toString()
      Overrides:
      toString in class Object