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

org.opentripplanner.standalone.config.routerequest.TransitGroupPriorityConfig Maven / Gradle / Ivy

The newest version!
package org.opentripplanner.standalone.config.routerequest;

import static org.opentripplanner.standalone.config.framework.json.OtpVersion.V2_3;
import static org.opentripplanner.standalone.config.framework.json.OtpVersion.V2_5;

import java.util.Collection;
import java.util.List;
import org.opentripplanner.routing.api.request.request.TransitRequest;
import org.opentripplanner.routing.api.request.request.filter.TransitGroupSelect;
import org.opentripplanner.standalone.config.framework.json.NodeAdapter;
import org.opentripplanner.standalone.config.framework.json.OtpVersion;
import org.opentripplanner.transit.model.basic.TransitMode;

public class TransitGroupPriorityConfig {

  public static void mapTransitRequest(NodeAdapter root, TransitRequest transit) {
    var c = root
      .of("transitGroupPriority")
      .since(OtpVersion.V2_5)
      .summary(
        "Group transit patterns and give each group a mutual advantage in the Raptor search."
      )
      .description(
        """
        Use this to separate transit patterns into groups. Each group will be given a group-id. A
        path (multiple legs) will then have a set of group-ids based on the group-id from each leg.
        Hence, two paths with a different set of group-ids will BOTH be optimal unless the cost is
        worse than the relaxation specified in the `relaxTransitGroupPriority` parameter. This is
        only available in the TransmodelAPI for now.
        
        Unmatched patterns are put in the BASE priority-group.
        """
      )
      .experimentalFeature()
      .asObject();

    transit.addPriorityGroupsByAgency(
      TransitGroupPriorityConfig.mapList(
        c,
        "byAgency",
        "All groups here are split by agency. For example if you list mode " +
        "[RAIL, COACH] then all rail and coach services run by an agency get the same " +
        "group-id."
      )
    );
    transit.addPriorityGroupsGlobal(
      TransitGroupPriorityConfig.mapList(
        c,
        "global",
        "All services matching a 'global' group will get the same group-id. Use this " +
        "to assign the same id to a specific mode/sub-mode/route."
      )
    );
  }

  private static Collection mapList(
    NodeAdapter root,
    String parameterName,
    String description
  ) {
    return root
      .of(parameterName)
      .since(V2_5)
      .summary("List of transit groups.")
      .description(description + " The max total number of group-ids are 32, so be careful.")
      .asObjects(TransitGroupPriorityConfig::mapTransitGroupSelect);
  }

  private static TransitGroupSelect mapTransitGroupSelect(NodeAdapter c) {
    return TransitGroupSelect
      .of()
      .addModes(
        c
          .of("modes")
          .since(V2_5)
          .summary("List all modes to select for this group.")
          .asEnumSet(TransitMode.class)
      )
      .addSubModeRegexp(
        c
          .of("subModes")
          .since(V2_5)
          .summary("List a set of regular expressions for matching sub-modes.")
          .asStringList(List.of())
      )
      .addAgencyIds(
        c.of("agencies").since(V2_3).summary("List agency ids to match.").asFeedScopedIds(List.of())
      )
      .addRouteIds(
        c.of("routes").since(V2_3).summary("List route ids to match.").asFeedScopedIds(List.of())
      )
      .build();
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy