作成中の駅データベースは、日本の全路線・全駅をカバーしていて、駅の位置情報や、位置情報サービスでチェックインするための情報を保持している。一方、作成した列車時刻表の路線・駅のデータは、駅データベースとは別立てになっている。(また、時刻表データを登録した路線・駅のみデータを保持しているので、データ的にも全路線をカバーしているわけではない。)
そこで、2つのデータを関連付けるツールを作成する。
時刻データベース(TT_xxx) <- 時刻表データ
| (駅)
駅データベース (RW_xxx) <- 駅データ.jp
駅データベースのほうがカバー範囲が広いので、参照の向きは時刻データベース->駅データベースとし、時刻データベースの駅テーブル(kind: TTStation)に新しいフィールド(property: rw_station_cd)を設けて、ここに駅データベースの「駅」のIDを保持する。
- 画面イメージ: xttrwst01.html
他の画面を流用して作成。
- 時刻表の路線データ(TT路線データ)をロード・表示する
上右パネルに表示する。時刻表の路線データは、時刻データを登録した路線のみ。 - 路線(TTデータ)を選択すると、対応する駅データベースの路線(RWデータ)を検索する
選択(クリック)したTT路線に対応するRW路線を検索する。まだ路線同士の関連付けが行われていない場合は、searchRWLine()で関連付けを実施する。すでに関連付けが完了している場合は、駅リストを表示する。// JavaScript function pickupTTLine(ttLine){ // TT路線がRW路線と関連付けされているかを判断 if ( !(parseInt(ttLine.rw_line_cd) > 0) ){ // 関連付けられていない場合 searchRWLine(ttLine); } else { // ... } }
- TT路線データをRW路線データに関連付ける
結果が1路線だった場合は、RW路線の路線コードをTT路線に保存する。複数だった場合は、(このアプリではなく)手動で関連付けを実施する。
現状、路線名で検索しているが、’磐越西線’のように類似の名称で複数の路線が登録されている場合がある。 - TT駅データをRW駅データに関連付ける
選択されている路線に含まれる駅(TT駅データ)に対応するRW駅を検索する。対応する駅が1つだった場合は、TT駅データにRW駅データの駅コードを保存する。
現状、駅名で検索しているが、’安子ヶ島’と’安子ケ島’のように、両者で微妙に異なっている場合があり、自動マッチしないケースがある。// JavaScript // 対応するRW路線(駅DBデータ)の処理 gRWCurLine = getLineByCode(ttLine.rw_line_cd); //// RW駅リストを取得 gRWCurStations = filterStationByID(ttLine.rw_line_cd); for (var i = 0; i < gTTCurStations.length; i++) { if ( parseInt(gTTCurStations[i].rw_station_cd) > 0 ){ // 対応するRW駅を紐付け済の場合 } else { // 未処理の場合は対応するRW駅を検索する var _RWStation = searchRWStation(gRWCurStations, gTTCurStations[i]); if (_RWStation){ // 見つかった場合はTT駅にRW駅の駅コードを保存する addRWStationcd(gTTCurStations[i], _RWStation.station_cd); } } }
- 画面例
ページを開くと、時刻表の路線データをロードする。路線を選択したタイミングで対応する駅データベースの路線データとの関連付けを実施する。