1

Unityで0、0にプロットされた経度と緯度に基づいて、経度と緯度をUnity 3D座標に変換するにはどうすればよいですか?

これを行う方法については多くの提案がなされていますが、この質問に対する完全かつ簡潔な回答をまだ見ていません。

マップ上に描かれた線を表す一連のポリラインを Unity 3D でプロットする必要があります。ポリラインの各ポイントは、緯度と経度で表されます。座標は EPSG:4269 NAD83 として表されます。

シナリオは、ユーザーの経度と緯度が空間クエリとして MongoDB サーバーに送信され、サーバーがポリラインの各ポイントを表す座標の配列を含む geojson フィードで応答するときに始まります。

Unity3D のユーザーは、マップの中心 (0, 0) に直接配置されます。ユーザーのデバイス内のコンパスは、Z 軸を北に向けます。X 軸は東西を表します。Y 軸は高度を表します。

目標は、ユーザーを参照して地理空間オブジェクトを表す線を画面上に描画することです。プログラムはリクエストを正しく作成し、geojson フィードを解析し、線をプロットすることができますが、緯度/経度から Unity3D デカルトへの正しい変換がなければ、線は明らかに正しく配置されません。

この式は基本的にパズルの最後のピースです。C#を使ってUnity3Dのプログラムを書いています。

これは、ラインがオンライン マップでどのように表示されるかを表したものです。青いピンはユーザーの場所を表します:

ここに画像の説明を入力

ユーザーのモバイル デバイスで UI がどのように表示されるかを次に示します (線は正しくプロットされていません)。

ここに画像の説明を入力

すべてを機能させようとしている間に、私がなんとかやり遂げたコードサンプル:

//
// Longitude and Latitude to Unity
//
public Vector3 LatLonUnity(double longitude, float elevation, double latitude){
    // code based on http://stackoverflow.com/questions/32311647/converting-gps-coordinates-to-x-y-z-coordinates

    float u_lat = Convert.ToSingle ((latitude - DrawLines.user_latitude) / 0.00001 * 0.12179047095976932582726898256213);

    float u_lon = Convert.ToSingle ((longitude - DrawLines.user_longitude) / 0.000001 * 0.00728553580298947812081345114627);

    Vector3 geo_unity = new Vector3 (-u_lon, elevation, -u_lat);

    return geo_unity;

}
4

1 に答える 1