All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.opentripplanner.ext.sorlandsbanen.CoachCostCalculator Maven / Gradle / Ivy

The newest version!
package org.opentripplanner.ext.sorlandsbanen;

import org.opentripplanner.raptor.api.model.RaptorAccessEgress;
import org.opentripplanner.raptor.api.model.RaptorCostConverter;
import org.opentripplanner.raptor.api.model.RaptorTransferConstraint;
import org.opentripplanner.raptor.spi.RaptorCostCalculator;
import org.opentripplanner.routing.algorithm.raptoradapter.transit.TripSchedule;
import org.opentripplanner.transit.model.basic.TransitMode;

/**
 * This cost calculator increases the cost on mode coach by adding an extra reluctance. The
 * reluctance is hardcoded in this class and cannot be configured.
 */
class CoachCostCalculator implements RaptorCostCalculator {

  private static final int EXTRA_RELUCTANCE_ON_COACH = RaptorCostConverter.toRaptorCost(0.6);

  private final RaptorCostCalculator delegate;

  CoachCostCalculator(RaptorCostCalculator delegate) {
    this.delegate = delegate;
  }

  @Override
  public int boardingCost(
    boolean firstBoarding,
    int prevArrivalTime,
    int boardStop,
    int boardTime,
    T trip,
    RaptorTransferConstraint transferConstraints
  ) {
    return delegate.boardingCost(
      firstBoarding,
      prevArrivalTime,
      boardStop,
      boardTime,
      trip,
      transferConstraints
    );
  }

  @Override
  public int onTripRelativeRidingCost(int boardTime, T tripScheduledBoarded) {
    return delegate.onTripRelativeRidingCost(boardTime, tripScheduledBoarded);
  }

  @Override
  public int transitArrivalCost(
    int boardCost,
    int alightSlack,
    int transitTime,
    T trip,
    int toStop
  ) {
    int cost = delegate.transitArrivalCost(boardCost, alightSlack, transitTime, trip, toStop);

    // This is a bit ugly, since it relies on the fact that the 'transitReluctanceFactorIndex'
    // returns the 'route.getMode().ordinal()'
    if (trip.transitReluctanceFactorIndex() == TransitMode.COACH.ordinal()) {
      cost += transitTime * EXTRA_RELUCTANCE_ON_COACH;
    }
    return cost;
  }

  @Override
  public int waitCost(int waitTimeInSeconds) {
    return delegate.waitCost(waitTimeInSeconds);
  }

  @Override
  public int calculateRemainingMinCost(int minTravelTime, int minNumTransfers, int fromStop) {
    return delegate.calculateRemainingMinCost(minTravelTime, minNumTransfers, fromStop);
  }

  @Override
  public int costEgress(RaptorAccessEgress egress) {
    return delegate.costEgress(egress);
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy