0

私はこれに対する解決策を研究するために1週間以上を費やしましたが、これまでのところ何もありません。

開始位置と方向として単位行列を指定します。次に、geotransと、開始位置の既知のlat、long、およびheightを使用して、x、y、zの地心座標を取得します。(0,0,0)の原点からの正規化されたベクトルは、行列のアップと変換の両方を提供します。ただし、原点から変換行列にメートル単位の距離を渡して、ほぼ正確なGCCを取得できるように、前方と右側が必要です。右とフォワードを計算するために必要なすべての入力がありますか?

入力
オリジン:0、0、0
グローバル:-1645380、-4885138、3752889
アップ(正規化):グローバル-オリジン

必要な出力の
権利:???
前方: ???

4

1 に答える 1

0

この回答と他の2つの回答もここにあります。
https://gis.stackexchange.com/questions/30448/local-coordinate-to-geocentric

測地座標(GDC)の単一の入力が与えられた

最初の2つのステップは、少なくともC /C++とJavaで使用可能なgeotransによって「バックグラウンドで」多くのことを実行しました。それは地球の楕円体の性質を説明し、ある座標系から別の座標系への多くの変換を行うことができます。
1)GDCを地心座標(GCC)= vector3 Originに変換します
。2)原点から100m上のポイントのGCCを取得します= vector3AboveOrigin

マトリックスの「上」コンポーネントは非常に簡単で、原点の上の点から原点までの単なるベクトルです。これを実装している間、それは逆方向であり、AboveOrigin-Originである必要があると思いましたが、理由により、説明どおりであることがわかりません。
3)vector3 Up = Origin-AboveOrigin
4)正規化アップ

真の前方または北のベクトルと真の右の両方に垂直なベクトルが必要です。geotransのGCCの軸を通る、真のアップとストレートアップの正のZの外積は、一時的な右ベクトルを提供します。
5)vector3 temp = vector3(0,0,1)とアップクロス
6)tempを正規化

これが最後の前方または北のベクトルです
7)vector3 forward = Up cross temp
8)前方に正規化

次に、右または東のベクトルを再計算します
。8)vector3 right = Up cross temp
9)正規化右
10)4x4行列を前方、右、上、および原点で初期化します。

例:マップには、マップの上端、下端、左端、および右端を10進角で表すタグがあります。そこから中心を取得し、中心の上を指します。

中央-(-1645379.875、-4885137.5、3752889)
上-(-1645406、-4885214、3752948)

これらの2つのポイントだけで、手順に従って行列を取得できます。これをローカルスペースの座標に適用して、GCCでかなり正確なポイントを取得できます。

これをテストするために、geotransを介してマップ全体に9つのポイント、マップの中心、4つのコーナー、および各エッジの中央に沿った4つのポイントを見つけました。地球の湾曲を無視し、これが小さな地図であることを知って、GCCの地図の中心から4つの端のそれぞれまでの平均距離を取りました。次に、そのX / Y距離を使用して、マトリックスを通過する9つのローカル座標を生成し、geotransで検出されたポイントと比較しました。変換されたポイントとジオトランスポイントの距離をテストしたところ、最悪の結果は上部中央と右上で57.3cmの不正確さで、左中央は0または0に近いものでした。

于 2012-08-01T20:24:44.133 に答える