0

我试图排除通过代码路由的停止。我创建 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 不要使用这个停靠点。是否可以通过代码排除停靠点?

4

1 回答 1

0

如果您使用 OpenTripPlanner API 进行旅行计划,您可以在计划 API 调用中设置“bannedStops”和“bannedStopsHard”参数,这将强制路由器忽略停靠点。

于 2017-04-30T23:22:52.337 回答