ChatGPT4にはお世話になっております。このコラムでは有料バージョンのChatGPT4を使って全世界の空港の大まかな3度パスを30分で作ってしまう方法を紹介します。
最初に滑走路のデータの収集ですが、下記のサイトを開きます。
https://ourairports.com/data/

上記の runways.csvからダウンロードします。
このようにデータを用意した後に、ChatGPT4に聞いてみました。

ChatGPT4の答えです。
はい、私はKML(Keyhole Markup Language)ファイルを生成するのをお手伝いすることができます。KMLは、地理的な情報を視覚化するためのフォーマットで、Google EarthやGoogle Mapsなどで使用されています。
斜め上に上昇する線を表現する基本的なKMLファイルは、次のようになります。以下に、2点間の座標を指定して、その2点を直線で結ぶ基本的なKMLを示します。
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
<Placemark>
<name>Rising Line</name>
<LineString>
<extrude>1</extrude>
<altitudeMode>absolute</altitudeMode>
<coordinates>
START_LONG,START_LAT,START_ALT
END_LONG,END_LAT,END_ALT
</coordinates>
</LineString>
</Placemark>
</Document>
</kml>
ここで、
START_LONG
,START_LAT
,START_ALT
は、線の開始点の経度、緯度、高度です。END_LONG
,END_LAT
,END_ALT
は、線の終了点の経度、緯度、高度です。
具体的な座標を教えていただければ、カスタマイズしたKMLファイルを生成するお手伝いをさせていただきます。どの地点からどの地点への線を描きたいかを教えてください。

もちろんです。次の情報を使用して、斜め上に上昇する線を示すKMLファイルを作成します。
- 開始点(東京タワーの座標とします)
- 緯度: 35.6586
- 経度: 139.7454
- 高度: 0m (海抜)
- 終了点
- 緯度: 35.6686
- 経度: 139.7454
- 高度: 1000m
以下がこの情報に基づくKMLファイルの内容となります。
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
<Placemark>
<name>Rising Line</name>
<LineString>
<extrude>1</extrude>
<altitudeMode>absolute</altitudeMode>
<coordinates>
139.7454,35.6586,0
139.7454,35.6686,1000
</coordinates>
</LineString>
</Placemark>
</Document>
</kml>
このKMLファイルをGoogle Earthで開くと、東京タワーから北に約1kmの距離、かつ高度1000mまで上昇する直線が表示されるはずです。
このKMLコードを使用して自身でKMLファイルを作成するか、もしくはファイルをダウンロードしてほしい場合はお知らせください。後者の場合、このKMLデータをファイルに保存して提供いたします。

KMLファイルを作成しました。下のリンクからダウンロードしてください。
- rising_line.kml
ダウンロードしたファイルをGoogle Earthで開くことで、指定した座標に描かれた直線を確認することができます。もし何か質問がありましたら、お気軽にお知らせください。

おっと、エラーが出てしまっているようですね。申し訳ございません。
KMLファイルの形式やタグに問題がないか再確認しましょう。問題がないか、以下のKMLデータを再度確認してみてください。
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
<Placemark>
<name>Rising Line</name>
<LineString>
<extrude>1</extrude>
<altitudeMode>absolute</altitudeMode>
<coordinates>
139.7454,35.6586,0
139.7454,35.6686,1000
</coordinates>
</LineString>
</Placemark>
</Document>
</kml>
このコードに問題がないようであれば、Google Earthのバージョンや、ファイルの開き方に問題がある可能性が考えられます。もし上記のコードに問題がないようであれば、具体的なエラーメッセージを教えていただくと、より具体的なサポートが可能かもしれません。エラーメッセージがあれば教えてください。

エラーメッセージ「XML or text declaration not at start of entity」は、XMLファイル(この場合、KMLファイル)が正しくフォーマットされていない場合に表示されることがあります。特に、XML宣言(<?xml version="1.0" encoding="UTF-8"?>
)がファイルの最初の行の最初の文字でない場合にこのエラーが起こることがあります。
私が先程生成したKMLコードを見ると、ファイルの最初に余分な改行やスペースが入っている可能性があります。それがエラーの原因かもしれません。
私はコードを修正して、新しいKMLファイルを生成します。その後、ファイルを再ダウンロードしてテストしてみてください。
修正したKMLファイルを作成しました。以下のリンクから再度ダウンロードして、Google Earthで開いてみてください。
- rising_line_corrected.kml
このファイルをダウンロードしてGoogle Earthで開くと、期待通りの挙動になることを願っています。もしまだ問題が発生する場合は、どうかご報告ください。


もちろん、お手伝いします。次の直線を描くための情報を含むファイルをアップロードしていただけますか? ファイルはテキスト形式(.txt)またはCSV形式(.csv)で、各行に次の形式でデータを含めてください:
開始緯度,開始経度,開始高度,終了緯度,終了経度,終了高度
この情報を元に、新しいKMLファイルを生成します。

ファイルを読み込むことができましたが、多くのカラムが含まれていて、具体的にどのカラムを使用して直線を描くかが明確ではありません。次の情報を教えていただけますか?
- 開始点の緯度、経度、高度に使用するカラム名
- 終了点の緯度、経度、高度に使用するカラム名
これにより、正確なKMLファイルを生成することができます。

ポイント
上記のようにChatGPTには分かり易く、正確に伝えることが肝心です。6NMの長さにしたのは約2000feetからタッチダウンまでのパスを再現したかったのが理由です。
理解しました。次の手順で進めていきます:
- 各滑走路に対して、開始点(A点)から終了点(B点)の方向を計算します。
- A点からその方向とは逆に6NM (ナウティカルマイル) 進んだ地点を新しい終了点とします。そして、この直線が3度の勾配で上昇するようにします。
- 上記の手順をB点にも適用します。
これらのステップを実行する前に、どのカラムがA点およびB点の座標に対応しているかを確認する必要があります。以下のカラムの中で、A点およびB点の座標に使用すべきものを教えていただけますか?
- A点の緯度:
le_latitude_deg
かhe_latitude_deg
? - A点の経度:
le_longitude_deg
かhe_longitude_deg
? - A点の高度:
le_elevation_ft
かhe_elevation_ft
? - B点の緯度:
le_latitude_deg
かhe_latitude_deg
? - B点の経度:
le_longitude_deg
かhe_longitude_deg
? - B点の高度:
le_elevation_ft
かhe_elevation_ft
?
この情報があれば、KMLファイルを生成する作業に進めます。

わかりました。以下の手順で進めていきます:
- A点の情報:
- 緯度:
le_latitude_deg
- 経度:
le_longitude_deg
- 高度:
le_elevation_ft
- B点の情報:
- 緯度:
he_latitude_deg
- 経度:
he_longitude_deg
- 高度:
he_elevation_ft
これらのポイントを使用して、KMLファイルを生成します。具体的には、各滑走路のA点からB点への方向を計算し、その逆方向に6ナウティカルマイル進んだ地点を新しい終了点とし、その上に3度の勾配で上昇する線を描きます。同様に、B点からA点への線も描きます。
実装に移る前に、いくつか確認事項があります:
- 1ナウティカルマイルは、おおよそ1.852キロメートルですが、これを利用して良いでしょうか?
- 高度はフィートで記載されていますが、これをメートルに変換して計算してもよろしいでしょうか?
これらの確認が取れれば、計算とKMLファイルの生成を始めます。

了解しました。それでは、次の手順で進めていきます。
- A点とB点の座標を用いて、方向ベクトルを計算します。
- 方向ベクトルを正規化し、逆方向を求めます。
- A点から逆方向に6ナウティカルマイル (約11.112km) 進んだ地点を求め、それを新しい終了点とします。同様にB点についても計算します。
- 新しい終了点の高度は、A点(またはB点)の高度 + 3度の勾配で6NM上昇した高度とします。
この計算を行い、結果をKMLファイルに書き出します。計算を開始しますので、少々お待ちください。
新しい座標点と高度を計算しました。次に、この情報をKMLファイルに書き出します。
KMLファイルは大量のLineString要素を含むことになりますが、すべての線を一つのファイルに含めることになり、そのファイルが非常に大きくなる可能性があります。この点に問題がないか確認したいと思います。大丈夫でしょうか?それとも特定の範囲のデータのみを出力する方が良いでしょうか?

了解しました。”RJ”で始まる識別子を持つ滑走路のみをフィルタリングして、そのデータを使用してKMLファイルを生成します。少々お待ちください。
日本の滑走路に関して230本の直線を計算しました。次に、この情報を使用してKMLファイルを生成します。少々お待ちください。
KMLファイルを生成しました。以下のリンクからダウンロードして、Google Earthで開いてみてください。
- runways_japan.kml
もし何か他にお手伝いできることがありましたら、お知らせください。



全世界の滑走路に対して直線を生成するには、先ほどと同様の手法を使用しますが、データ量が多くなるため、ファイルサイズも大きくなります。これが問題なければ進めますが、どうでしょうか?
もし問題なければ、同様の手法でKMLファイルを生成します。確認いただければ、計算を開始します。

了解しました。それでは全世界の滑走路について、前述の手順で直線を計算し、KMLファイルを生成します。データ量が多いため、少し時間がかかるかもしれません。計算を開始しますので、お待ちください。
全世界の滑走路について、合計で22,630本の直線を計算しました。次に、この情報を使用してKMLファイルを生成します。少々お待ちください。
KMLファイルを生成しました。以下のリンクからダウンロードして、Google Earthで開いてみてください。
- runways_world.kml
ファイルサイズが大きいため、ロードに時間がかかる可能性があります。もし何か他にお手伝いできることがありましたら、お知らせください。
ダウンロードは下記のような感じになります


世界中の滑走路についてパスが引かれました。アメリカを見ると大変なことになっています。興味がある方は下記からダウンロードして下さい。
ChatGPT、恐るべしという感じです。
しかしながら日本の滑走路のKMLを見てみるとやや物足りません。
それは元データの位置座標の精度が悪いのか、計算が甘いのか、滑走路からズレているのです。
また、この方法ではスレッシュホールドから3度パスの線が引かれてしまっていて、エイミングから引かれていません。
今回は生成AIによって、いとも簡単に意図したKMLデータを作成できる事がわかりましたので、次回は正確な日本の滑走路データを元に30分以内を目標に作って見たいと思います。