star-code.net

乗換案内(最少通過区間)を作った

はじめに

乗換案内って,便利ですよね. そこで,役に立たない乗換案内を作ってみました.

作ったもの

こちらからアクセスできます.

乗換案内ですが,「通過区間」のみを評価指標にしています.駅同士の距離だとか,経過時間だとか,列車の本数だとかは一切考慮していません.ただ通過する区間の数が最も少ないルートを出します.

例えば,池袋駅から上野駅への経路を調べると,以下のようなルートが出ます.この時の通過区間は 3 区間となります.

  • 池袋 (湘南新宿ライン)赤羽(宇都宮線)尾久(宇都宮線)上野

実際にこの区間を移動するなら山手線を使った方が早いし楽ですが,距離や乗換回数は一切気にせず,通過区間の数だけを数えます.

経路は 01-BFS で計算しています.JavaScript に Deque が存在しないので適当なリングバッファで実装.

データ

駅データ.jpのデータを加工して使用しています.課金すると新幹線の情報が得られるのですが,していないので新幹線の情報がありません.在来線旅はたのしいよ.

本 Web アプリでは,アクセスしている皆さんのブラウザ(端末)上で経路検索などの処理を行っています.サーバー側で答えを用意して送り返しているわけではないのですね. こちらにアクセスしたのちに,インターネットから切断しても Web アプリが動くことからもこれが確認できます.

基本的に端末上で完結するアプリにしています.その方が楽なので.

さて,端末上で完結させるためには,路線網の情報を知っておく必要があります.アクセスするたびに路線網の情報が送られているのです. データそのものはこちら(ekidata_jp.json)からアクセスできます.795 KB なのでそんなに大きくもない.

しかし,これはデータを配ってしまうことになります.幸いなことに駅データ.jpの利用規約は寛容なのでこれが許されます(2026 年 4 月 22 日現在). データを扱うときにはライセンスに注意なのです.

路線

駅データ.jpのデータをそのまま使っています.

所々変な路線があったりします.中央線快速はあるけれど常磐線快速は無かったり.基本的に特急は存在しないけれど成田エクスプレスだけは存在したり. 新幹線は(課金していないので)無いですが,海峡線が存在していて,木古内 - 奥津軽いまべつ - 中小国 と繋がっていることになっているので東京から札幌が検索できたりします.

JR中央本線(東京~塩尻) の立川以東の停車駅が謎だったり.多分特急が停車したことのある駅っぽい?

色々気になるところはあるのですが,直しだすとキリがないし直す基準を設けるのも困難だと思っているので,現状で良しとしています.

おわりに

思いもよらない経路が現れるので面白いです. 特急とか急行とか快速とか全部含めたデータベースがあったら,サンライズ瀬戸・出雲で浜松から姫路まで 1 駅とか言えて面白い気がしますが,そんなデータベースは無いし作るのも大変すぎる. 誰か作ったら教えてください.