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

org.opentripplanner.transit.model.basic.TransitMode Maven / Gradle / Ivy

The newest version!
package org.opentripplanner.transit.model.basic;

import java.util.EnumSet;
import java.util.Set;
import org.opentripplanner.framework.doc.DocumentedEnum;

/**
 * Equivalent to GTFS route_type or to NeTEx TransportMode.
 */
public enum TransitMode implements DocumentedEnum {
  RAIL,
  COACH,
  SUBWAY,
  BUS,
  TRAM,
  FERRY,
  AIRPLANE,
  CABLE_CAR,
  GONDOLA,
  FUNICULAR,
  TROLLEYBUS,
  MONORAIL,
  CARPOOL,
  TAXI;

  private static final Set ON_STREET_MODES = EnumSet.of(
    COACH,
    BUS,
    TROLLEYBUS,
    CARPOOL,
    TAXI
  );
  private static final Set NO_AIRPLANE_MODES = EnumSet.complementOf(
    EnumSet.of(AIRPLANE)
  );

  private static final Set NO_CARPOOL_MODES = EnumSet.complementOf(
    EnumSet.of(CARPOOL)
  );

  public static Set transitModesExceptAirplane() {
    return NO_AIRPLANE_MODES;
  }

  /**
   * This method returns the list of modes that are considered 'transit' by users, removing
   * carpool.
   */
  public static TransitMode[] modesConsideredTransitByUsers() {
    return NO_CARPOOL_MODES.toArray(TransitMode[]::new);
  }

  public boolean onStreet() {
    return ON_STREET_MODES.contains(this);
  }

  @Override
  public String typeDescription() {
    return "Routing modes for transit, including rail, bus, ferry, etc. Equivalent to [GTFS `route_type`](https://developers.google.com/transit/gtfs/reference/#routestxt) or to NeTEx TransportMode. ";
  }

  @Override
  public String enumValueDescription() {
    return switch (this) {
      case RAIL -> "Used for intercity or long-distance travel.";
      case COACH -> "Used for long-distance bus routes.";
      case SUBWAY -> "Subway or Metro, used for any underground rail system within a metropolitan area.";
      case BUS -> "Used for short- and long-distance bus routes.";
      case TRAM -> "Tram, streetcar or light rail. Used for any light rail or street level system within a metropolitan area.";
      case FERRY -> "Used for short- and long-distance boat service.";
      case AIRPLANE -> "Taking an airplane";
      case CABLE_CAR -> "Used for street-level rail cars where the cable runs beneath the vehicle.";
      case GONDOLA -> "Gondola or suspended cable car. Typically used for aerial cable cars where the car is suspended from the cable.";
      case FUNICULAR -> "Used for any rail system that moves on steep inclines with a cable traction system.";
      case TROLLEYBUS -> "Used for trolleybus systems which draw power from overhead wires using poles on the roof of the vehicle.";
      case MONORAIL -> "Used for any rail system that runs on a single rail.";
      case CARPOOL -> """
      Private car trips shared with others.

      This is currently not specified in GTFS so we use the mode type values 1550-1560 which are in the range of private taxis.
      """;
      case TAXI -> "Using a taxi service";
    };
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy