Можно ли исключить остановки при маршрутизации через код в OpenTripPlanner?

Я пытаюсь исключить остановку из-за маршрутизации через код. Я создаю gtfs оповещение в реальном времени

public class ServiceAlertStop {

  GtfsRealtime.FeedMessage feedMessage;

  public GtfsRealtime.FeedMessage config(){
    GtfsRealtime.FeedMessage.Builder feedMessageBuilder = 
    GtfsRealtime.FeedMessage.newBuilder();

    GtfsRealtime.FeedHeader.Builder header = 
    GtfsRealtime.FeedHeader.newBuilder();
    header.setTimestamp(System.currentTimeMillis());

    header.setIncrementality(GtfsRealtime.FeedHeader.
    Incrementality.FULL_DATASET);
    header.setGtfsRealtimeVersion("1.0");
    feedMessageBuilder.setHeader(header);

    GtfsRealtime.FeedEntity.Builder entity = 
    GtfsRealtime.FeedEntity.newBuilder();
    entity.setId("0");

    GtfsRealtime.Alert.Builder alert = GtfsRealtime.Alert.newBuilder();
    alert.setCause(GtfsRealtime.Alert.Cause.UNKNOWN_CAUSE);
    alert.setEffect(GtfsRealtime.Alert.Effect.STOP_MOVED);

    GtfsRealtime.TimeRange.Builder activePeriod = 
    alert.addActivePeriodBuilder();
    activePeriod.setStart(System.currentTimeMillis());
    activePeriod.setEnd(System.currentTimeMillis() + 172800000);
    GtfsRealtime.TranslatedString.Builder translatedString = 
    GtfsRealtime.TranslatedString.newBuilder();
    GtfsRealtime.TranslatedString.Translation.Builder translation = 
    GtfsRealtime.TranslatedString.Translation.newBuilder();
    translation.setLanguage("en");
    translation.setText("Stop is closed!");
    translatedString.addTranslation(translation);
    alert.setDescriptionText(translatedString);

    alert.setHeaderText(translatedString);

    GtfsRealtime.EntitySelector.Builder entitySelector = 
    alert.addInformedEntityBuilder();
    entitySelector.setStopId("22126");

    entity.setAlert(alert);
    feedMessageBuilder.addEntity(entity);
    feedMessage = feedMessageBuilder.build();
    return feedMessage;
  }

  public void run(Graph graph){
    AlertsUpdateHandler updateHandler = new AlertsUpdateHandler();
    updateHandler.setEarlyStart(1);
    updateHandler.setFeedId("1");
    updateHandler.setAlertPatchService(new AlertPatchServiceImpl(graph));
    updateHandler.setFuzzyTripMatcher(new 
    GtfsRealtimeFuzzyTripMatcher(graph.index));
    updateHandler.update(feedMessage);

  }
}

ASCII представление моего оповещения

header {
  gtfs_realtime_version: "1.0"
  incrementality: FULL_DATASET
  timestamp: 1493520112381
}
  entity {
    id: "0"
    alert {
      active_period {
        start: 1493520112415
        end: 1493692912415
      }
    informed_entity {
      stop_id: "22126"
    }
    cause: UNKNOWN_CAUSE
    effect: STOP_MOVED
    header_text {
      translation {
        text: "Stop is closed!"
        language: "en"
      }
    }
    description_text {
      translation {
        text: "Stop is closed!"
        language: "en"
      }
    }
  }
}

Затем я загружаю его в otp после построения графа в классе OTPMain.java

ServiceAlertStop serviceAlertStop = new ServiceAlertStop(); 
serviceAlertStop.config(); 
serviceAlertStop.run(graphService.getRouter().graph);

После этого я не получаю сообщение об ошибке, но когда я начинаю планировщик, эта остановка (22126) также существует на новом маршруте ((мне нужно, чтобы otp не использовал эту остановку. Можно ли исключить остановки из маршрутизации через код?

1 ответ

Если вы используете API-интерфейс OpenTripPlanner для планирования поездки, в вызове API плана можно задать параметры bannedStops и bannedStopsHard, которые заставят маршрутизатор игнорировать остановку.

Другие вопросы по тегам