2017-10-28 17 views
0

異なるGTFS &のフィードを使用して、このデータをSQLデータベースに保存します。静的GTFSとGTFS-RTのトリップ更新を一致させる方法

スタティックGTFSデータをGTFS-RTのトリップ更新とどのようにマッチングさせるべきですか?

特定のstop_idの停止時間を表示しようとしています。私は静的なGTFSから停止時間を得ることができますが、私はGTFS-RTのトリップ更新時間の更新でこれらの時間を "パッチ"したいと思います。

GTFS-RTが非常にゆるやかに指定されているように見えますが、ほとんどのフィールドが必須です。使用しているGTFS-RTフィードの1つで、トリップアップデートでtrip_idがあり、別のフィードにtrip_idがありません。

アップデート2017年4月11日

私は、以下のクエリを使用して、静的なGTFSにGTFS-RTの旅の更新を一致させることに成功しました。何らかの理由で、すべての旅行の更新に対してtrip_idを取得できませんでした。おそらく問題はデータそのものにあります。クエリに何か問題がありますか?

const trip = await knex('trips') 
    .select('trips.trip_id') 
    .innerJoin('routes', 'routes.route_id', 'trips.route_id') 
    .innerJoin('stop_times', 'stop_times.trip_id', 'trips.trip_id') 
    .whereIn('trips.service_id', *day active service ids*) 
    .andwhere('routes.route_id', tripUpdate.route_id) 
    .andWhere('stop_times.departure_time', tripUpdate.trip_start_time) 
    .andWhere('trips.direction_id', tripUpdate.direction_id) 
    .orderBy('stop_times.stop_sequence') 
    .first(); 
+0

はい、それはゆるく定義された標準です。最近のGTFS-rt 2.0仕様はこれを明らかにしていますが、これはまだ許されています。どうして?短期間の混乱のためにサービス情報を提供できるユースケースがあります。これは、それを正常にするいくつかのフィードによって悪用されます。 フィードとGTFSのマッチングを行うロジックを記述する必要があります。しかし、あなたが話している餌を知らなくてもそれが可能かどうかは言い難いです。 –

+0

どの[DBMS](https://en.wikipedia.org/wiki/DBMS)製品を使用していますか? Postgres?オラクル? "_SQL_"はクエリ言語であり、特定のデータベース製品の名前ではありません。 –

+0

mariadbを使用しています。 – devha

答えて

0

問題は、SELECT文の

.andWhere('stop_times.departure_time', tripUpdate.trip_start_time) 

句である可能性があります。

gtfs仕様の状態時刻はHH:MM:SS形式で8桁でなければなりません(時が0で始まる場合はH:MM:SSも受け入れます)スケジュールが5:37:00 TripUpdatesのstart_timeが05:37:00の場合、ステートメントはトリップIDを返しません。これが問題の場合は、stop_times.txtからデータベースに追加するときにこのような時間を "0"にするか、上記の節を調整する必要があります。

+0

私の場合、問題はtrip_idがなく、trip_idを使ってGTFS-RT TripUpdateと静的GTFSを一致させようとしています。最初の投稿にクエリを追加して、どのように試合を試しているかを説明しました。 – devha

関連する問題