【问题标题】:Is it possible to exclude stops from routing through the code in OpenTripPlanner?是否可以通过 OpenTripPlanner 中的代码排除停靠点?
【发布时间】:2017-04-30 18:11:23
【问题描述】:

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

【问题讨论】:

    标签: java gtfs opentripplanner


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-24
      • 2015-07-19
      • 2020-06-23
      • 2023-03-08
      相关资源
      最近更新 更多