見出し画像

ChatGPTに、地球科学の専門家になってもらいました

地球は楕円体 by ヨハネス・ケプラー 

課題

今仕事として、PLATEAU Viewなどで表示が可能な3Dタイルのデータを読み取る作業をしています。

データは上記のサイトから落とせるから、これを3D Webブラウザ上で一機能として開発しています。3D Tilesを読み取るためのライブラリは3DTilesRenderJS、とりあえずサンプルプログラムはnode.jsで開発されているのでそれを参考にここまでやってみました。

開発中のプログラム。
神奈川県川崎市の建物タイルデータ。武蔵小杉周辺から北寄りに見ている。
矢印の原点は、ちょうど横浜市港北区の日吉あたりにある。

ところで、少々厄介な問題が出てきました。
それは、地球が楕円体であるということ。

本来、地図の位置を特定するためにはいろいろな座標系が利用されるが、今回は国土地理院発行のものを使用しているため、ECEF系(地球中心・地球固定直交座標系)から、経度・緯度の情報に変換して利用しています。
どうも、素の3Dタイルデータを突っ込むだけでは、3Dモデルのメッシュ全体が一定の方向を向いておらず、が特定できないのだ。つまり、地図とメッシュの位置関係が(方角の意味で)合わないわけで。

ちなみに、このような北のことを真北(しんぽく)と言います。
なぜか、真東、真西、真南は訓読みなのに、真北だけは音読みという不思議な感じ。

解決したいことを整理する

・・・これはいかん。
私は地球科学の専門家ではないから、座標系の理解は結構あやふやだ。

ここで必要なのは、経度・緯度から真北を求めること。
もちろん、単に”経度・緯度”とすればそれは点に過ぎないので真北のベクトルを求めることは不可能なはずであるが、ここで地球儀のモデルを導入すればいけます。
ここでは仮に地球を楕円体とみなすWGS84モデルを使うことにしました。一応、これであれば解析的に北を特定できるはず・・・だったが、どうもおかしい・・・。

問題設定

日吉側から川崎市を北から見たときに、川崎市立井田病院が結構大きなランドマークであったので、それを使って考えてみたいです。

Google Earthで表示してみた川崎市立井田病院


ざっくり環境でやってみた井田病院。少なくとも3軸はバラバラな方向にある。
これを先ほどの井田病院の建物の向きと同じ向きに、3軸のどれかを合わせる必要がある。


実際、色々検討をしてみたが、問題があまりにも複雑になり過ぎて解決策の見通しが見えない状態でした。

そこで、ChatGPTが満を持して登場。一世を風靡しているAIが解決策を与えてくれるはずだ。ちなみに、学習モデルはGPT-4で、英語で相談乗ってもらってます。

ChatGPTハックタイム

質問1:北極から現在の地点までのベクトルの求め方を聞いてみる

私)
I have ECEF coordinates because cesium ion gives ECEF to identify location; then, can you simplify the formula to calculate a vector to north pole?
私は、位置関係を知るためにECEFの座標系をCesium Ionから取得していますが、北極までのベクトルを計算するために式を単純化することは出来ますか?

ChatGPT)
ポイント P の ECEF (Earth-Centered, Earth-Fixed) 座標がある場合、北極へのベクトルの計算がより簡単になります。ECEF 座標では、北極には次のデカルト座標があります。

x_NP = 0 
y_NP = 0 
z_NP = b
 (ここで、b は WGS-84 楕円体の半短軸で、約 6,356,752.3142 メートル)

ポイント P (x_P、y_P、z_P) の ECEF 座標があると仮定すると、ポイント P から北極へのベクトルは次のように計算できます。

vec_P_to_NP = (x_NP - x_P, y_NP - y_P, z_NP - z_P)

ポイント P の ECEF 座標を上記の式に代入するだけで、ポイント P から北極へのベクトルを取得できます。

vec_P_to_NP = (-x_P, -y_​​P, z_NP - z_P)

これはやらかしている!
これじゃあ北極までの差分ベクトルを求めているだけじゃないか!

認識のずれ

というわけで、情報のあやふやさを認めてくれるのはChatGPTの良いところであるが、もう少し具体的な情報を与えてあげなくてはいけない。

質問2:欲しいのは地球の曲面に沿ったベクトルなのだと指摘する

私)
oh, I think the vector seems to be just difference vector. I want to need the true north, you need to consider the earth is ellipsoid.
それは差分ベクトルじゃないか!私が欲しいのは、真北なのであって、その場合は地球が楕円体であることを考慮しなくてはいけない!

ChatGPT)
混乱をお詫び申し上げます。前の計算で差分ベクトルが得られたのは正しいですが、真北の地球の楕円体形状は考慮されていません。特定の ECEF ポイント P (x_P、y_P、z_P) で真北ベクトルを見つけるには、次の手順に従います。

ポイント P の ECEF 座標を測地緯度 (lat_P) と経度 (lon_P) に変換します。

ECEF 座標を測地緯度と経度に変換するには、ニュートン ラフソン法などの反復アルゴリズムを使用できます。ただし、これは複雑なプロセスになる可能性があるため、Proj、GeographicLib、または同様のツールなど、これらの計算を処理するライブラリまたはソフトウェア パッケージを使用することをお勧めします。

点 P でのローカル接平面 (East-North-Up) を計算します。

ローカル接平面の北 (N) と東 (E) の単位ベクトルは次のように定義されます。

N = (-sin(lat_P) * cos(lon_P), -sin(lat_P) * sin(lon_P), cos(lat_P))
E = (-sin(lon_P), cos(lon_P), 0)

真北ベクトルをローカル接平面から ECEF 座標に変換します。

ローカル接平面の真北ベクトルは、手順 2 で定義した北単位ベクトル N に等しくなります。このベクトルを ECEF 座標に戻すには、ローカル接線からベクトルを変換する回転行列 R が必要です。平面から ECEF 座標へ:

R = | E_x N_x U_x | | | E_y N_y U_y | | | E_z N_z U_z |

ここで、E、N、および U は、ECEF 座標の東、北、および上方向の単位ベクトルです。アップ (U) ベクトルは、北ベクトルと東ベクトルの外積として計算できます。

U = N×E

ここで、回転行列 R にローカル接平面の真北ベクトル N を掛けて、ECEF 座標の真北ベクトルを取得します。

true_north_ECEF = R * N

この true_north_ECEF ベクトルは、地球の楕円体形状を考慮して、指定された点 P における真北ベクトルの ECEF 座標になります。

欲しかったのはこれだ!!
ChatGPTが偉いのは、「楕円体」「真北」と言った自分が望んでいる具体的な単語を与えるだけで、楕円体に沿う平面の求め方をちゃんと教えてくれるところです!
最初におまけとして、ニュートン・ラフソン法による反復数値計算の事例を挙げているのは、私が考えている系がWGS84と呼ばれる地球が楕円体である特性をさらに超えている場合を考慮しているのが理由と予想されまして、確かに地軸の概念もあればモデル誤差の概念もあるはずなので、そこまで深く教えてくれることに感動しました。

質問3.なぜ緯度・経度を使って計算するのかを考えてもらう

私)
Why is azimuth method more effective than ecef?
方位角を使った方法が、ECEFによる方法よりも効果的なのはなぜですか?

ChatGPT)
真北方向と水平面内の特定のベクトル (地球表面上の 2 点間の視線など) との間の角度を計算する方位角法は、ECEF 座標を直接操作するよりも効果的な場合があります。これは、地球の表面上の方向と角度の表現を単純化するためです。Azimuth法がより効果的であるいくつかの理由を以下に示します。

  1. 直感的な表現: 方位角は通常、真北から時計回りに測定されるため、地球の表面上の方向を直感的に表現できます。これにより、地球上のポイントまたはオブジェクト間の相対的な方向を理解し、伝達することが容易になります。

  2. 複雑でない計算: 水平面内の角度と距離を扱う場合 (地球の表面上の 2 点間の方向を見つける場合など)、方位法は、3 次元の ECEF 座標ではなく 2 次元の平面のみを考慮することで計算を簡素化します。システム。これにより、計算がより速く、より簡単に実行できるようになります。

  3. ナビゲーションに適している: 方位法は、地表の方向と角度を直接測定して表す方法を提供するため、多くの場合、ナビゲーション目的により適しています。これは、測量、マッピング、GPS ナビゲーションなどのアプリケーションで特に役立ちます。ユーザーは、ECEF システムでの正確な 3 次元位置ではなく、地球表面上のポイント間の相対的な方向を理解することに関心があります。

  4. 楕円体地球モデルへの適応性: 方位角法は、WGS-84 のような楕円体モデルを含むさまざまな地球モデルで動作するように適応させることができます。これにより、地球の表面の方向と角度をより正確に表現できるようになり、完全な球体ではない地球の形状を考慮できます。

ただし、Azimuth法の有効性は特定のアプリケーションとコンテキストに依存することに注意することが不可欠です。場合によっては、衛星測位を扱う場合、3 次元で正確な距離を計算する場合、または地球中心の参照フレームを操作する場合など、ECEF 座標を直接操作する方が適している場合があります。

こういう回答してくれるの、凄くないですか?
ECEF座標は直交座標系なのですが、ChatGPTが提案しているのは方位角を使ったやり方なわけです。地球の座標系の正確性を無視してまで、方位角を使って計算することの効果性を答えてくれる辺り、すでにChatGPTが地球科学の専門家のように見えてきます。恐ろしい・・・・

質問4. ECEF座標の方が有効な場合がどのようなときかを教えてもらう

私)
The rare case seems to be what can't be ignored as ellipsoid curved surface, doesn't it?
レアケースというのは、楕円曲面を仮定出来ない場合だと思われますが、どうでしょうか?

ChatGPT)
はい、あなたは正しいです。地球の楕円体の形状は、地球表面の座標、方向、および距離を扱う際に考慮すべき重要な要素です。地球は完全な球体ではなく、その形状は、WGS-84 楕円体などの偏楕円体によってより正確に表されます。地球の楕円体の形状を無視すると、特に遠距離や高精度のアプリケーションで、計算にエラーや不正確さが生じる可能性があります。

地球の表面の方向、角度、および距離を操作する場合、正確な結果を得るには、地球の楕円体形状を考慮することが重要です。楕円体の形状を処理するには、次のようないくつかの方法があります。

  1. 測地計算: Vincenty アルゴリズムや Karney アルゴリズムなどの測地法を使用して、楕円体地球モデル上のポイント間の正確な距離、方位、およびその他のプロパティを計算できます。これらの方法は、地球の曲率を考慮し、長距離にわたって正確な結果を提供できます。

  2. 楕円体補正による方位角法: 前の回答で述べたように、方位角法は楕円体地球モデルで動作するように適合させることができます。楕円体補正を方位角の計算に組み込むことで、地表のより正確な方向と角度を取得できます。

  3. 適切な座標系の使用: 地理データを扱う場合、地球の楕円体形状を考慮した適切な座標系を使用することが不可欠です。たとえば、WGS-84 システムで使用される測地緯度と経度の座標は楕円体モデルに基づいており、球面座標よりも地球の表面上の位置をより正確に表現します。

結論として、特に高精度のアプリケーションや遠距離で、地球表面の方向、角度、距離を扱う場合、地球の楕円体形状を考慮することが不可欠です。地球の楕円体形状を考慮した適切な方法と座標系を使用することで、正確で信頼できる結果を得ることができます。

地球モデルの数値計算の方式や有効性まで熟知しているとは驚いた・・・!

結果



川崎市井田病院の面を基準に方向を揃えてみた結果(自分のプログラム)


PLATEAU View上での表示

完璧にアジャストしていることが判明しました。
ちゃんと見渡しても問題なし!です。

ちなみにこのプログラムで、横浜も一緒に重ねてみることも試してみました。うん、特に問題なさそうだ。

川崎市井田病院の近辺と横浜の日吉の近辺を一緒に重ねてみた


まとめ

ChatGPTを使うと優秀な専門家が一人増えた感じがして非常に頼もしいですね!
分からないことがあれば、たくさん聞いてみたくなります。

この記事が気に入ったらサポートをしてみませんか?