アプリ:PAPI改修のためにAIPから全国の滑走路の情報を調べる必要が出てきました。
作業は全国の滑走路のPAPIの位置やGPの位置、ILSの設置状況を全国の滑走路毎にEXCELの表にするイメージです。
これによって、アプリPAPIで手入力していた情報が、滑走路を選択するだけで一発で入力されることになります。しかし、情報量は膨大です。
毎日少しずつ手作業で調べるのはつらいし、どうしようと思っていたところ以前試したRを使ったスクレイピングを実践してみようと考えました。
AIPはIDとパスワードを入力する必要がありますので、少しやっかいですが下記を参考にしました。
https://qiita.com/hoxo_m/items/59bedbf7e4c7c99cbf5a
試しにRORAの運用時間の表(RORA AD 2.3 OPERATIONAL HOURS)を表示させてみます。
Rのコード(核心部分)は以下のようになっています。
login_page <- html_session(“https://aisjapan.mlit.go.jp/Login.do”)
login_form <- html_form(login_page)[[1]] %>%
set_values(userID=”*****”, password=”*****”)
session <- submit_form(login_page, login_form)
session %>%
jump_to(“https://aisjapan.mlit.go.jp/html/AIP/html/20210617/eAIP/20210617/JP-AD-2-RORA-en-JP.html#RORA-AD-2.1”) %>%
html_node(xpath = ‘/html/body/div[2]/div/div[3]/table’) %>%
html_table
上記の結果は
これはAIPの下表の内容そのままです。
ちなみに黄色いアンダーラインマーカーの所にfull Pathを指定するのがポイントです。
Copy full XPath ですね。
この試行で光が差してきました。
PAPIの位置の情報は各空港のAD2.14表にあるので、これを全空港に対してループを回して自動取得すればいいのです。
試行錯誤しつつ(詳細は省きます)、PAPIが3°に設定されている空港に限定したCSV形式のテーブルを作成できました。上記がそれです。ちなみにテーブルの冒頭は下記のようになっております。
ID_RWY | airport_id | airport_name | NAME_RWY | ID_NAME_RWY | RWY_XX | papi_angle | papi_location | papi_meht | ILS | GP_m | Ref_Datum_ft | GP_angle | RWY_true | RWY_length | RWY_width | TH_lat | TH_lon | TH_elevation | MAG_VAR |
RORA01 | RORA | 粟国 | 粟国01 | RORA粟国01 | 1 | 3 | 183.7 | 28 | FALSE | NA | NA | NA | 4.88 | 800 | 25 | 26.3521 | 127.1424 | 44 | 5 |
RORA19 | RORA | 粟国 | 粟国19 | RORA粟国19 | 19 | 3 | 142.7 | 28 | FALSE | NA | NA | NA | 184.88 | 800 | 25 | 26.35469 | 127.1426 | 26 | 5 |
RJSK10 | RJSK | 秋田 | 秋田10 | RJSK秋田10 | 10 | 3 | 420 | 74 | FALSE | NA | NA | NA | 96.61 | 2500 | 60 | 39.3701 | 140.1215 | 288.5 | 8 |
RJSK28 | RJSK | 秋田 | 秋田28 | RJSK秋田28 | 28 | 3 | 429 | 66 | TRUE | 351 | 54 | 3 | 276.61 | 2500 | 60 | 39.36517 | 140.1359 | 313.6 | 8 |
RJDA13 | RJDA | 天草 | 天草13 | RJDA天草13 | 13 | 3 | 133.2 | 24 | FALSE | NA | NA | NA | 124.55 | 1000 | 30 | 32.29062 | 130.0916 | 330 | 7 |
RJDA31 | RJDA | 天草 | 天草31 | RJDA天草31 | 31 | 3 | 133.2 | 24 | FALSE | NA | NA | NA | 304.55 | 1000 | 30 | 32.28478 | 130.0948 | 330 | 7 |
RJKA03 | RJKA | 奄美 | 奄美03 | RJKA奄美03 | 3 | 3 | 415 | 61 | TRUE | 333 | 54 | 3 | 25.75 | 2000 | 45 | NA | NA | 27 | 5 |
RJKA21 | RJKA | 奄美 | 奄美21 | RJKA奄美21 | 21 | 3 | 374 | 61 | FALSE | NA | NA | NA | 205.75 | 2000 | 45 | NA | NA | 14 | 5 |
RJSA06 | RJSA | 青森 | 青森06 | RJSA青森06 | 6 | 3 | 423 | 74 | FALSE | NA | NA | NA | 51.91 | 3000 | 60 | 40.43298 | 140.4029 | 647 | 9 |
RJSA24 | RJSA | 青森 | 青森24 | RJSA青森24 | 24 | 3 | 440 | 66 | TRUE | 334 | 54 | 3 | 231.91 | 3000 | 60 | 40.44298 | 140.4209 | 664 | 9 |
RJEC16 | RJEC | 旭川(Civil) | 旭川(Civil)16 | RJEC旭川(Civil)16 | 16 | 3 | 400.2 | 74 | FALSE | NA | NA | NA | 154.17 | 2500 | 60 | 43.4051 | 142.2627 | 660 | 9 |
RJEC34 | RJEC | 旭川(Civil) | 旭川(Civil)34 | RJEC旭川(Civil)34 | 34 | 3 | 499.2 | 66 | TRUE | 368 | 54 | 3 | 334.17 | 2500 | 60 | 43.39381 | 142.2716 | 721 | 9 |
RJTF35 | RJTF | 調布 | 調布35 | RJTF調布35 | 35 | 3 | 98 | 18 | FALSE | NA | NA | NA | 343.2 | 800 | 30 | 35.40051 | 139.3145 | 137 | 7 |
RJGG18 | RJGG | 中部国際 | 中部国際18 | RJGG中部国際18 | 18 | 3 | 416 | 66 | TRUE | 311.5 | 54 | 3 | 169 | 3500 | 60 | 34.5226 | 136.4806 | 15 | 6.58 |
RJGG36 | RJGG | 中部国際 | 中部国際36 | RJGG中部国際36 | 36 | 3 | 416 | 66 | TRUE | 311.5 | 53 | 3 | 349 | 3500 | 60 | 34.50346 | 136.4833 | 15 | 6.58 |
なお、滑走路の緯度経度は~度~分~秒の形式のようです。
例えば一番先頭の粟国RWY01のTH_lat 26.3521 は北緯26度25分21秒です。
通常の形式にする為には26+35/60+21/3600のように計算する必要があります。
これが出来あがりますとアプリ「PAPI」へのPAPI位置やGPの位置などの手入力が不要になるのです。
次はアプリPAPIの改修に取りかかろうと思います。
最後にPAPIが3°以外の滑走路も含めたテーブルも掲載しましょう。(上記より列が少ないのですがご容赦ください)
下記がそれですが、統計にしてみますと結構面白いものです。
追記
2021/8/19 にこのデータを使ってアプリを一新しました。
効果は抜群。
スクレイピング技術の有効性を改めて認識しました。