心が折れないGoogle Earth講座 その4 動画を作ろう

その3では福岡空港のAINOSからスレッシュホールドまで線を引きましたが、その4ではその線をたどって飛行する動画にチャレンジしましょう。
このためにはその3までのようにトライアンドエラーで攻める方法もありますが、今回はいきなりサンプルコード(kmlの中身)を提示します。

その1からその3を読まれてきた方には、なんとなくわかると思いますが、
14行目のheading 150.24 というところは福岡RWY16の真方位です。
15行目のtilt 90というところはカメラの上向きの角度で、真下が0度です。
つまり6行目から20行目までの– AINOSにカメラを移動させて3秒停止する –という最初のブロックは
東経130.38414度 北緯33.68321度 海抜696mのところにカメラを置き、150.24の真方位に向けて真下から90度上にカメラを回転させて3秒間待機しなさいと指示しているのです。
次の22~34行目の– AINOSからカメラを移動開始 –は上記と同じ位置と角度から移動を開始しなさいと指示します。

最後の37~51行目– スレッシュホールドまで10秒かけてカメラを移動する–はスレッシュホールドの位置まで10秒かけて移動しなさいと指示しています。gx:duration>10</gx:durationの行ですね。

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2" xmlns:kml="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom">
<gx:Tour>
    <name>RJFF_ILS16_Movie</name>

  <!-- AINOSにカメラを移動させて3秒停止する -->
    <gx:Playlist>
        <gx:FlyTo>
            <name>AINOS</name>
            <Camera>
                <longitude>130.38414</longitude>
                <latitude>33.68321</latitude>
                <altitude>696</altitude>
                <heading>150.24</heading>
                <tilt>90</tilt>
                <roll>0</roll>
                <gx:altitudeMode>relativeToSeaFloor</gx:altitudeMode>
            </Camera>
        </gx:FlyTo>
        <gx:Wait><gx:duration>3</gx:duration></gx:Wait>
        
    <!-- AINOSからカメラを移動開始 -->
        <gx:FlyTo>    
            <gx:flyToMode>smooth</gx:flyToMode>
            <Camera>
                <longitude>130.38414</longitude>
                <latitude>33.68321</latitude>
                <altitude>696</altitude>
                <heading>150.24</heading>
                <tilt>90</tilt>
                <roll>0</roll>
                <gx:altitudeMode>relativeToSeaFloor</gx:altitudeMode>
            </Camera>
        </gx:FlyTo>

     
        <!-- スレッシュホールドまで10秒かけてカメラを移動する-->
        <gx:FlyTo>
            <name>ILS16_TH</name>
            <gx:duration>10</gx:duration>
            <gx:flyToMode>smooth</gx:flyToMode>
            <Camera>
                <longitude>130.44319</longitude>
                <latitude>33.59692</latitude>
                <altitude>19.81</altitude>
                <heading>150.24</heading>
                <tilt>90</tilt>
                <roll>0</roll>
                <gx:altitudeMode>relativeToSeaFloor</gx:altitudeMode>
            </Camera>
        </gx:FlyTo>

    </gx:Playlist>
</gx:Tour>
</kml>

上記をメモ帳にコピペして、RJFF_ILS16_Movie.txtなどの適当な名前を付けて保存して,RJFF_ILS16_Movie.kml に名前を変更した後にダブルクリックすれば動画が始まります。
ぜひチャレンジしてみてください。
なお、終了時に地面ビューに勝手に切り替わってしまう方が多いと思います。
Google検索を行ったところ、下記のように悩んでいる方がいました。

https://support.google.com/earth/thread/7652579/touring-kml-file-drops-to-ground-elevation-at-the-end?hl=en

英語で書かれていますが、下記のような設定になっていたら

下のように変更してください。地面レベルのビューに切り替えるのチェックボックスを外します。

なお、動画(ツアー)の作成方法やカメラの設定に関する公式文章は下記ですが、心が折れやすいのでご注意ください。

https://developers.google.com/kml/documentation/touring#flyto

https://developers.google.com/kml/documentation/cameras

次のセクションではこれに修正を加えます。


パイロットの観点でより現実的に変更してみましょう

上記までの再現方法は、百戦錬磨のパイロットの皆さんには今ひとつと感じられると思います。
なぜならば、やけに速く飛行しているし、しかも無風。ピッチも0°、バンクも0°です。
もう少し本格的な動画を作ってみましょう。

AINOS THR(スレッシュホールド)間は6.0nm

最初に動画の再生時間です。
AINOS~THRまでの飛行時間を実際のジェット旅客機の速度にあわせて修正しましょう。
6.0nmを標準的な速度で飛行するとしたら何秒かかりますか?
この計算にはライセンスを所持している方ならばわかると思いますが、GS:Ground Speed:対地速度を使用します。
ここではGSを140KTとして計算してみましょう。
6/140*3600=154秒です。

航空機運航との接点
飛行中を想定して、ごく大雑把に暗算で計算する事も出来ます。
GSを120ktに無理矢理仮定すると、1分間に2nm進みます。
そうしますと6nmは3分:180秒ですね。
計算したい140ktのGSは2割増しなので、時間は2割早くなると(本当は違うのですが)180-180*.2=146秒となります。少なくとも3分より少し早いという事がわかれば良いでしょう。

 次にヘディングですが、AINOSでは左からの横風を想定、WCAを左に10°取っています。
14行目、29行目のheading 140.24の箇所です。
その後スレッシュホールドでは無風になるという若干苦しい設定をしました。
46行目のheading 150.24の箇所です。
 最後にピッチ角ですが、多くのジェット旅客機では着陸フラップで3度の降下パスに乗っているときは2度~3度くらいのピッチ角であると思います。
kmlでは真下が0度なので、tiltを93度に設定すればOKです。(15行目)
最後にバンク角ですが、このように時間間隔が長い区間で変更すると不具合が発生するため、この講座では0度にしています。
このようにして出来上がったのが下記のxmlファイルです。

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2" xmlns:kml="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom">
<gx:Tour>
    <name>RJFF_ILS16_Movie_Pro</name>

  <!-- AINOSにカメラを移動させて3秒停止する -->
    <gx:Playlist>
        <gx:FlyTo>
            <name>AINOS</name>
            <Camera>
                <longitude>130.38414</longitude>
                <latitude>33.68321</latitude>
                <altitude>696</altitude>
                <heading>140.24</heading>
                <tilt>93</tilt>
                <roll>0</roll>
                <gx:altitudeMode>relativeToSeaFloor</gx:altitudeMode>
            </Camera>
        </gx:FlyTo>
        <gx:Wait><gx:duration>3</gx:duration></gx:Wait>
        
    <!-- AINOSからカメラを移動開始 -->
        <gx:FlyTo>    
            <gx:flyToMode>smooth</gx:flyToMode>
            <Camera>
                <longitude>130.38414</longitude>
                <latitude>33.68321</latitude>
                <altitude>696</altitude>
                <heading>140.24</heading>
                <tilt>93</tilt>
                <roll>0</roll>
                <gx:altitudeMode>relativeToSeaFloor</gx:altitudeMode>
            </Camera>
        </gx:FlyTo>

     
        <!-- スレッシュホールドまで154秒かけてカメラを移動する headingを徐々に150.24に変化させる-->
        <gx:FlyTo>
            <name>ILS16_TH</name>
            <gx:duration>154</gx:duration>
            <gx:flyToMode>smooth</gx:flyToMode>
            <Camera>
                <longitude>130.44319</longitude>
                <latitude>33.59692</latitude>
                <altitude>19.81</altitude>
                <heading>150.24</heading>
                <tilt>93</tilt>
                <roll>0</roll>
                <gx:altitudeMode>relativeToSeaFloor</gx:altitudeMode>
            </Camera>
        </gx:FlyTo>

    </gx:Playlist>
</gx:Tour>
</kml>

フレアを追加してみよう

ここまで出来ると最後のフレアを追加したくなるのはパイロットして当然の衝動でしょう。
方法は簡単です。
接地点の座標と標高をGoogleErathから取得して、スレッシュホールドから接地点までの動きを先ほどのテキストファイルに追加すれば良いのです。
座標の換算はこれまで述べてきた要領で行いましょう。

画面中央を接地点として右下の数字から取得します

35’34.97”N 130°26’44.99”E 標高4mと表示されています。
N33.593047 E130.445831 4m の情報を書き入れます。
また、スレッシュホールドから接地点までの所要時間も計算する必要がありますが、ここでは大雑把に9秒としました。


最後に、プロの視点から次の反映を行います。
フレアするときのピッチアップをプラス2度としてtiltを95度にします。
デクラブも完全に行ったと考え接地時の真方位は滑走路に一致させます。
バンクはGoogle Earthの設定上、ここではシンプルにゼロにします。

航空機運航との接点
3度パスで約600fpmの降下率なので、1度パスにすると約200fpmの降下率に減少します。これが(大雑把なのですが)フレアです。
そのためにはピッチを2度高くしてパスを2度高くします。
簡単に書きましたが、とても大切なパスとピッチの概念です。

53行目から追加しています

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2" xmlns:kml="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom">
<gx:Tour>
    <name>RJFF_ILS16_Movie_Pro_Flare</name>

  <!-- AINOSにカメラを移動させて3秒停止する -->
    <gx:Playlist>
        <gx:FlyTo>
            <name>AINOS</name>
            <Camera>
                <longitude>130.38414</longitude>
                <latitude>33.68321</latitude>
                <altitude>696</altitude>
                <heading>140.24</heading>
                <tilt>93</tilt>
                <roll>0</roll>
                <gx:altitudeMode>relativeToSeaFloor</gx:altitudeMode>
            </Camera>
        </gx:FlyTo>
        <gx:Wait><gx:duration>3</gx:duration></gx:Wait>
        
    <!-- AINOSからカメラを移動開始 -->
        <gx:FlyTo>    
            <gx:flyToMode>smooth</gx:flyToMode>
            <Camera>
                <longitude>130.38414</longitude>
                <latitude>33.68321</latitude>
                <altitude>696</altitude>
                <heading>140.24</heading>
                <tilt>93</tilt>
                <roll>0</roll>
                <gx:altitudeMode>relativeToSeaFloor</gx:altitudeMode>
            </Camera>
        </gx:FlyTo>

     
        <!-- スレッシュホールドまで154秒かけてカメラを移動する headingを徐々に150.24に変化させる-->
        <gx:FlyTo>
            <name>ILS16_TH</name>
            <gx:duration>154</gx:duration>
            <gx:flyToMode>smooth</gx:flyToMode>
            <Camera>
                <longitude>130.44319</longitude>
                <latitude>33.59692</latitude>
                <altitude>19.81</altitude>
                <heading>150.24</heading>
                <tilt>93</tilt>
                <roll>0</roll>
                <gx:altitudeMode>relativeToSeaFloor</gx:altitudeMode>
            </Camera>
        </gx:FlyTo>

    <!-- ここからがフレア ピッチを2度上げる(tilt 93->95) -->
        <gx:FlyTo>
            <name>ILS16_Touchdown</name>
            <gx:duration>9</gx:duration>
            <gx:flyToMode>smooth</gx:flyToMode>
            <Camera>
                <longitude>130.445831</longitude>
                <latitude>33.593047</latitude>
                <altitude>4</altitude>
                <heading>150.24</heading>
                <tilt>95</tilt>
                <roll>0</roll>
                <gx:altitudeMode>relativeToSeaFloor</gx:altitudeMode>
            </Camera>
        </gx:FlyTo>

    </gx:Playlist>
</gx:Tour>
</kml>

うまくいきましたね。

このようにやってゆくと、時間間隔をもう少し細かく設定して、例えば、AINOS->1000feetの地点->500feetの地点でそれぞれの姿勢情報を反映するということも出来ます。
また、実機の例えば1秒おきの位置や姿勢データが手に入ったら、それらをガンガン書き込んでゆくことでとてもスムースでリアルに再現できるのではないかと思いませんか?

 実はプログラムを組めばあっさりと実現できます。
またプログラムを組むことが億劫な方は手書きで入れてもいいですし、エクセルのマクロを習得すれば簡単に実現できます。
その手法はさておき、私の場合の一つの例はFlightRadar24から位置と高度データを取得して、それをもとにR言語でkmlファイルを作りました。
なんだぁ、そんなことだったのかぁと思われた方は、心が折れずにkmlファイルを理解できた証拠です。
最新テクノロジーはそのようなものです。
それが下記ページの中の動画です。

更に、自分がE170型機で飛行した時のフライトデータ(1秒おきに位置や姿勢が記録されている)を読み込んみ、自動的にKMLファイルにコンバートするプログラムを作って、動画にしています。
これも例えば航空会社で安全対策のために活用する方法の一つになります。

次回のその5では、動画の中に軌跡を入れ込む方法を紹介します。

パス、エイミングに精通されている方へ
この講座で描いたり動いているパスはパイロットが着座している状態で目の位置がたどる軌跡(エイミング)とは異なりますが、解説を簡単にするためにこのような記述にしております。




xmlファイルは下記になります。