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

org.opentripplanner.model.plan.StreetLeg Maven / Gradle / Ivy

The newest version!
package org.opentripplanner.model.plan;

import java.time.Duration;
import java.time.ZonedDateTime;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import javax.annotation.Nullable;
import org.locationtech.jts.geom.LineString;
import org.opentripplanner.model.fare.FareProductUse;
import org.opentripplanner.routing.alertpatch.TransitAlert;
import org.opentripplanner.street.model.note.StreetNote;
import org.opentripplanner.street.search.TraverseMode;
import org.opentripplanner.utils.lang.DoubleUtils;
import org.opentripplanner.utils.tostring.ToStringBuilder;

/**
 * One leg of a trip -- that is, a temporally continuous piece of the journey that takes place using
 * mainly a single model on the street network.
 */
public class StreetLeg implements Leg {

  private final TraverseMode mode;
  private final ZonedDateTime startTime;
  private final ZonedDateTime endTime;
  private final double distanceMeters;
  private final Place from;
  private final Place to;
  private final int generalizedCost;
  private final LineString legGeometry;
  private final List walkSteps;
  private final Set streetNotes;
  private final ElevationProfile elevationProfile;

  private final Boolean walkingBike;
  private final Boolean rentedVehicle;
  private final String vehicleRentalNetwork;
  private final Float accessibilityScore;

  public StreetLeg(StreetLegBuilder builder) {
    this.mode = Objects.requireNonNull(builder.getMode());
    this.startTime = builder.getStartTime();
    this.endTime = builder.getEndTime();
    this.distanceMeters = DoubleUtils.roundTo2Decimals(builder.getDistanceMeters());
    this.from = builder.getFrom();
    this.to = builder.getTo();
    this.generalizedCost = builder.getGeneralizedCost();
    this.elevationProfile = builder.getElevationProfile();
    this.legGeometry = builder.getGeometry();
    this.walkSteps = Objects.requireNonNull(builder.getWalkSteps());
    this.streetNotes = Set.copyOf(builder.getStreetNotes());
    this.walkingBike = builder.getWalkingBike();
    this.rentedVehicle = builder.getRentedVehicle();
    this.vehicleRentalNetwork = builder.getVehicleRentalNetwork();
    this.accessibilityScore = builder.getAccessibilityScore();
  }

  public static StreetLegBuilder create() {
    return new StreetLegBuilder();
  }

  @Override
  public boolean isTransitLeg() {
    return false;
  }

  @Override
  public boolean isWalkingLeg() {
    return mode == TraverseMode.WALK;
  }

  @Override
  public boolean isStreetLeg() {
    return true;
  }

  public TraverseMode getMode() {
    return mode;
  }

  @Override
  public ZonedDateTime getStartTime() {
    return startTime;
  }

  @Override
  public ZonedDateTime getEndTime() {
    return endTime;
  }

  @Override
  public double getDistanceMeters() {
    return distanceMeters;
  }

  @Override
  public Place getFrom() {
    return from;
  }

  @Override
  public Place getTo() {
    return to;
  }

  @Override
  public LineString getLegGeometry() {
    return legGeometry;
  }

  /**
   * Get elevation profile, with values rounded to two decimals.
   */
  @Override
  public ElevationProfile getElevationProfile() {
    return elevationProfile;
  }

  @Override
  public List getWalkSteps() {
    return walkSteps;
  }

  @Override
  public Set getStreetNotes() {
    return streetNotes;
  }

  @Override
  public Set getTransitAlerts() {
    return Set.of();
  }

  @Override
  public Boolean getWalkingBike() {
    return walkingBike;
  }

  @Override
  @Nullable
  public Float accessibilityScore() {
    return accessibilityScore;
  }

  @Override
  public Boolean getRentedVehicle() {
    return rentedVehicle;
  }

  @Override
  public String getVehicleRentalNetwork() {
    return vehicleRentalNetwork;
  }

  @Override
  public int getGeneralizedCost() {
    return generalizedCost;
  }

  @Override
  public boolean hasSameMode(Leg other) {
    return other instanceof StreetLeg oSL && mode.equals(oSL.mode);
  }

  @Override
  public LegCallTime start() {
    return LegCallTime.ofStatic(startTime);
  }

  @Override
  public LegCallTime end() {
    return LegCallTime.ofStatic(endTime);
  }

  @Override
  public Leg withTimeShift(Duration duration) {
    return StreetLegBuilder.of(this)
      .withStartTime(startTime.plus(duration))
      .withEndTime(endTime.plus(duration))
      .build();
  }

  @Override
  public List fareProducts() {
    return List.of();
  }

  public StreetLeg withAccessibilityScore(float accessibilityScore) {
    return StreetLegBuilder.of(this).withAccessibilityScore(accessibilityScore).build();
  }

  /**
   * Should be used for debug logging only.
   * 

* The {@code legGeometry}, {@code elevationProfile}, and {@code walkSteps} are skipped to avoid * spamming logs. Explicit access should be used if needed. */ @Override public String toString() { return ToStringBuilder.of(StreetLeg.class) .addObj("from", from) .addObj("to", to) .addTime("startTime", startTime) .addTime("endTime", endTime) .addEnum("mode", mode) .addNum("distance", distanceMeters, "m") .addNum("cost", generalizedCost) .addCol("streetNotes", streetNotes) .addBool("walkingBike", walkingBike) .addBool("rentedVehicle", rentedVehicle) .addStr("bikeRentalNetwork", vehicleRentalNetwork) .toString(); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy