Можно ли исключить остановки при маршрутизации через код в 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, которые заставят маршрутизатор игнорировать остановку.