LoginSignup
2
3

More than 5 years have passed since last update.

世界中の飛行機の情報をFreeでリアルタイムに入手する方法

Posted at

やろうと思った背景

リアルタイムで現実世界の情報を入手、可視化したいと思ったため

準備

EC2スポットインスタンス準備

デスクトップを起動し続けるより、クラウドでサーバを借りたほうが安いです。
※うちのデスクトップを動かすと400円/日 かかると怒られました。

OpenSkyへの登録

OpenSkyでIDをとりましょう。正確にはとらなくてもデータは取得できる。
https://opensky-network.org/

もし、固定IPを持っている人がいれば、OpenSkyに協力してあげてほしいなぁ。

NiFiのダウンロード&実行

Download→Download Nifi→nifi-1.7.1-bin.tar.gz
そのあと表示される一覧からお好きなリンクをどうぞ。

SnapCrab_NoName_2018-9-23_22-35-53_No-00.png

ダウンロードしたら、ファイルを展開して、以下を実行するだけ。

tar zxfv nifi-1.7.1-bin.tar.gz
nifi-1.7.1/bin/nifi.sh

PostgreSQLインストール

PostgreSQLインストールしましょう。

sudo yum install -y postgresql96-server
/etc/init.d/postgresql96 initdb
vi /var/lib/pgsql96/data/postgresql.conf
追加:listen_addresses = '*'

Metabaseインストール

可視化ツールとして、今回はMetabase使ってみましょう。
Dockerであれば楽勝です。

docker run -d -p 3000:3000 --name metabase metabase/metabase

情報取得 & レコード保存

あとは、APIの仕様に従って、リアルタイム情報を取得するだけです。
https://opensky-network.org/apidoc/

Rest APIが公開されているので、
https://ユーザ名:パスワード@opensky-network.org/api/states/all

私の場合、プログラムが面倒なので、NiFiを用いて、データ取得からPostgreSQLに突っ込むところまでやります。

SnapCrab_NoName_2018-9-23_22-23-27_No-00.png

SnapCrab_NoName_2018-9-23_22-41-5_No-00.png

最後にDBに突っ込めばいいと思います。

SnapCrab_NoName_2018-9-23_22-44-53_No-00.png

対象のテーブルは以下のように作成すればよいかと思います。

テーブル作成
create table ADSB(
    time int,
    icao24 text,
    callsign text ,
    origin_country text ,
    time_position int ,
    last_contact int ,
    longitude float ,
    latitude float ,
    geo_altitude float ,
    on_ground boolean ,
    velocity float ,
    true_track float ,
    vertical_rate float ,
    sensors int ,
    baro_altitude float ,
    squawk text ,
    spi boolean ,
    position_source int
);

可視化

Metabaseに接続しましょう。
ポートは3000です。

sshでのポートフォワーディングが楽でしょう。

Metabaseの初期化が始まります。(しばらくかかります)

SnapCrab_NoName_2018-9-23_11-52-12_No-00.png

途中、Databaseの設定などあるので、ホスト側のPostgreSQLへの接続設定を行いましょう。

host: ホストサーバのIPアドレス。(Docker LANのIPでいいです)
Port、Database、ユーザ名、パスワードはPostgreSQL、またはDBの設定に合わせてください。

SnapCrab_NoName_2018-9-23_23-10-1_No-00.png

あとは、SQLを適当に実行してMAP表示すると、最新の飛行機の位置が表示されます。
※この時、表示件数が多すぎると表示されないため500程度に絞ったほうがよいでしょう。

500台の飛行機の位置表示
select 
 distinct callsign ,latitude,  longitude, avg(Velocity)
from
 adsb
where
 time = (select max(time) from adsb)  
group by 
 callsign, latitude, longitude
 limit 500

SnapCrab_NoName_2018-9-23_14-46-15_No-00.png

Pin表示しかできないのが残念ですね。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3