Railway Map

昔からあったらいいなと思っていた俯瞰で見た路線図を試作してみました。時刻表や乗り換えのアプリはたくさんありますが、シミュレーションゲームのように路線全体を視覚化したようなものは見たことがありません。次の電車やその次の電車が今どの辺にあるか把握できればタイミングよく会社を出てスムーズに電車に乗ることが出来るだろうなと思うことがよくあります。

現在京都に住んでいるので自分がよく利用する阪急京都本線、阪急嵐山線、地下鉄烏丸線を再現してみました。

 

Webスクレイピング

きっと時刻表のAPIやXMLはどこかに公開されているだろうと思っていたのですが、これが全然見つからず・・・。ネット上で同じようなことをやろうとしている方々の情報を見た限り、どうも時刻表のサイトからスクレイピングするしか方法がなさそうなので、PHPを使ってHTML構造から必要な情報を取ってきてXML形式に書き換えるコードを書いてみました。(PHPは大学生の頃にウェブデザインに使っていました。いろいろと言われている言語ですが、なんとなく書いたいい加減なコードでもなんとなく動くのでこういう時は便利です。)

いろんな時刻表サイトがありますが路線時刻表がある「えきから時刻表」を利用しました。(サーバー負荷を考えると罪悪感がありますが、スクレイピングするのは時刻表データを取得するための一度きりです!)

xml_format_20160102

こんな感じで止まる駅とその時刻をHTMLのテーブルから抜き出してXML形式に変換しました。京都本線の上りだけでも時刻だけで1万行近くのデータになったのでウェブサイト見ながら手打ちで時刻を入力するのは考えただけでも気が遠くなりますね。

 

プログラミング開始

駅の情報を配列にしたXMLデータとスクレイピングした路線時刻表を整理した車両のXMLデータを使って車両を路線上に配置します。

 

class_stations

駅クラスは名前や座標などの情報を格納してあります。

 

class_trains

電車クラスは止まる駅や通過する駅、その時刻などの情報を起動時に計算して格納してあります。通過時刻はさすがに時刻表からはわからないので、距離から補完した時刻を計算しました。

 

railway_20151223031238

時間のスライダーを動かしてその時刻通りの座標に電車が配置されるようにしてとりあえずの目標は達成です。電車の動きは駅と駅の間を線形補完して移動させていますが、サインカーブを使って停車している感じを出しています。

普通列車が待ち合わせして快速や急行に抜かされていく様は面白いし、よくスケジュールされているなと感心します。同一時刻の線路上に何本の電車が走っているか確認できただけでもなんだか嬉しくなりました。想像以上に短い間隔で電車は動かされているものなんですね。

つづく

 

開発環境:VIsual Studio Express 2008, XNA 3.1

コメントを残す