
前回の記事では、東京公共交通オープンデータチャレンジへ応募したアプリ の概要をご紹介しました。
今回は、アプリがどのような仕組みで動作しているのか、その裏側をご紹介します。
また、アプリのソースコードは、Esriジャパンの GitHub で公開しています。記事とあわせて、ぜひご参照ください。
リアルタイム列車遅延マップ
前回の記事でもご紹介した通り、東京公共交通オープンデータチャレンジへ応募したリアルタイム列車遅延マップは、遅延している路線を地図上に表示することで、通勤、退勤のタイミングの判断に役立ててもらうことを目的に作成しました。
遅延している路線の情報は、東京公共交通オープンデータチャレンジが公開している東京メトロ 列車ロケーション情報を利用しました。
列車ロケーション情報には、列車が出発した駅(fromStation)と列車が向かっている駅(toStation)、そして遅延時間(delay)が含まれています。これらの情報をもとに地図に遅延情報を可視化する、という機能を実装するところからアプリの開発はスタートしました。
遅延情報の取得
列車ロケーション情報の変換
アプリの大枠は決まりましたが、どのようにして遅延情報を地図に表示するのか?というのが大きな課題でした。
なぜならば、列車ロケーション情報に含まれる位置情報は、緯度経度やフィーチャというような、普段私たちが扱いなれている GIS データではなく、列車が出発した駅と列車が向かっている駅という、列車がいる駅区間のテキスト データだったからです。
そのために、列車ロケーション情報を路線のライン データに変換し、GIS で扱えるようにするところからはじめました。
列車ロケーション情報をライン データへ変換するベースとして、国土数値情報の鉄道データが役立ちました。
まず鉄道データを整理し、路線のネットワーク データと駅のポイント データを作成します。
また、変換した遅延路線のライン データの保存先も作成しておきます。
データ作成には ArcGIS Desktop を使用し、作成したデータはネットワークを介してアクセスできるよう ArcGIS Enterprise へ公開しました。
つづいて、列車ロケーション情報の出発駅と向かっている駅をもとに、遅延路線のライン データを作成します。
作成の流れは以下です。
1. 列車ロケーション情報の取得
- 列車ロケーション情報(JSON)を取得し、CSV へ書き出す
2. 遅延列車の抽出
- CSV から東京メトロの路線で遅延(delay)している列車を抽出
3. 駅ポイントの取得
- 出発した駅(fromStation)と列車が向かっている駅(toStation)の駅名から、駅ポイント データを属性検索し、駅のポイントを取得
4. ルート検索
- 手順 3 で取得した駅ポイント間の最短ルートを、ネットワーク解析機能を利用して取得
5. ラインの作成
- 取得したルートをコピーし、ライン データとして保存

これで、遅延している列車がいる駅間の路線のライン データが作成されます。
ここまでの処理は ArcPy を使用して実装しました。
遅延情報の更新
駅間のテキスト データをもとに、ライン データを作成することで、遅延情報を GIS で扱うことができるようになりました。
次の課題は、どのように遅延情報を更新し続けるか、です。
リアルタイムに遅延情報を地図上に可視化するには、常に最新の列車ロケーション情報を取得し、遅延路線を更新し続けなければなりません。
そこで、リアルタイム性を保持するため、Esri が公開している Aggregated Live Feeds と呼ばれる仕組みを参考に、遅延路線を更新することにしました。
この仕組みは、遅延路線のライン データを配信するサービスが参照するデータベースに対して処理を行います。
データベースに格納されている既存のライン データ(前回の処理で取得した遅延路線)を削除し、新たに作成したライン データを保存します。
そのため、ArcGIS Enterprise で公開しているサービスの REST エンドポイントを変更せずに、データのみを更新することができます。
先ほどの処理に 、遅延路線を更新する、という作業を追加します。
6. データベースの更新
- データベースから前回の遅延路線を削除し、今回、取得したライン データを保存
最後に、作成した ArcPy のスクリプトを ArcGIS Enterprise へ公開します。
公開されたスクリプトは Windows タスクスケジューラから実行可能です。
そこで、一連の処理の定期的な実行はタスクとして登録しました。

これで、常に最新の遅延情報が配信されるようになりました。
遅延路線の可視化
さて、いよいよ、遅延路線を地図上に可視化してみます。
可視化の部分は、ArcGIS API for JavaScript(以下、「API」)を使用して、Web アプリを作成しました。
最新の遅延情報を表示させるために、ここでも、遅延情報の更新方法が課題となりました。
どのようにするかを開発チーム内で検討した結果、タイマー処理を実装することにしました。
一定の間隔で、遅延路線を配信するサービスに対してリクエストを送り、データを取得します。そして、取得したデータをマップに再描画します。
この方法で、遅延路線を更新し、常に最新の情報を表示することができました。
しかし、再描画する際に、それまで描画されていた路線を削除し、新しく取得した路線を追加する、という処理を行っているため、更新時に一時的に遅延路線が消えてしまうという課題が残りました。
なお、ArcGIS Enterprise バージョン 10.6.1 では、WebGL を使用した、より高速で軽量な描画が実現される予定ですので、更新時の再描画もよりスムーズに実現できるのではないかと思います。
さらに、今回は使用しませんでしたが、WebSocketを活用したリアルタイム GIS ソリューションも提供されています。
ArcGIS GeoEvent Server というリアルタイム データ配信に特化したサーバーを使用することで、WebSocket を利用したストリーム サービスを公開することができます。
API は、一度ストリーム サービスを読み込むだけで、今回実装したようにサービスに対してリクエストを送信しなくても、常にサービスが配信するデータを取得することが可能となります。
さて、Web アプリでは、遅延路線のほかに、遅延予測に役立つよう、ESRIジャパン データコンテンツの気象オンラインサービス(ベータ版)を使用した降水強度予測のメッシュ表示や、Twitter API を利用した遅延に関するつぶやきの検索機能も実装しました。
API は、気象オンラインサービスのような ArcGIS サービスのほかに、Twitter API のような外部のサービスとも簡単にマッシュアップすることができ、地図に関連する様々な機能を簡単に追加することができます。

オープンデータチャレンジを通して、データの作成から変換、可視化まで、GIS の機能をフルに活用したアプリを作成することができました。
ぜひ、リアルタイム列車遅延情報マップにアクセスしてみてください!!
※ 2018年5月15日でオープンデータチャレンジは終了しましたので、本アプリの公開も終了いたしました。アクセスいただきましてありがとうございます。
関連リンク