3つの緯度と経度から世界への座標アルゴリズム

1.はじめに

Threeを使用して3次元の地球(球)を作成し、緯度と経度をデカルト座標に変換して球に表示します。

第二に、プロセス

1、SphereGeometry生成

SphereGeometryのコンストラクターは次のとおりです

SphereGeometry(radius : Float, widthSegments : Integer, heightSegments : Integer, phiStart : Float, phiLength : Float, thetaStart : Float, thetaLength : Float)
radius — 球体半径,默认为1。
widthSegments — 水平分段数(沿着经线分段),最小值为3,默认值为8。
heightSegments — 垂直分段数(沿着纬线分段),最小值为2,默认值为6。
phiStart — 指定水平(经线)起始角度,默认值为0。。
phiLength — 指定水平(经线)扫描角度的大小,默认值为 Math.PI * 2。
thetaStart — 指定垂直(纬线)起始角度,默认值为0。
thetaLength — 指定垂直(纬线)扫描角度大小,默认值为 Math.PI。

主に、球の水平方向と垂直方向の開始点であるphiStartとthetaStartを確認します。図に示すように、水平方向の開始点はX軸の負の半軸であり、垂直方向の開始点はY軸の正の半軸です。これは、球がマップされている場合、テクスチャの左半分を意味します。は、開始点に対応するX軸の負の半分です。軸、テクスチャの上側は、Y軸の正の半軸に対応します。これを知った後、球をマッピングできます。

2.球形のテクスチャ

テクスチャはメルカトル図法の世界地図を使用しています

マップを貼り付けると、図に示すように、左半分が球のx軸の負の半軸に対応していることがわかります。ここでは、本初子午線の位置に注意する必要があります(つまり、メルカトル0度線)

3.経度と緯度から世界の座標(デカルト座標)

計算する前に、下の図に示すように、緯​​度と経度の意味を理解する必要があります。

子午線から始めて、A(50)度を右に回して東経50度に到達し、次に赤道を出発点としてB(40)度を上に回して北緯40度に到達します。経度と緯度を理解した後が計算されたら、導出を開始できます。式は、球の半径をRに設定し、R * sin(B)は点のY軸座標を計算できます。R * cos(B)点をZX軸によって形成される平面に投影して、点A1を取得します。A1* COS(A)はZ軸座標を取得でき、A1 * sin(A)はX軸座標を取得できます。コードは以下のように表示されます

function getPosition(longitude, latitude, radius) {
    var lg = THREE.Math.degToRad(longitude);
    var lt = THREE.Math.degToRad(latitude);
    var temp = radius * Math.cos(lt);
    var x = temp * Math.sin(lg);
    var y = radius * Math.sin(lt);
    var z = temp * Math.cos(lg);
    return {
        x: x,
        y: y,
        z: z
    }
}

緯度と経度の座標(50、40)を入力します。結果を図に示します。質問がある場合があります。ポイント位置の実際の効果は、上の例の画像とは大きく異なります。この問題については、次のことを確認する必要があります。元に戻る子午線の位置が計算されます。アルゴリズムの計算は、開始点としてZ軸の正の半軸に基づいています。実際、マッピング後の元の子午線は正の半軸上にあります。 X軸の、それらの間の90度の違いがあるので、計算では、計算のために経度に90を追加する必要があります。

入力(140、40)、出力結果は図のようになり、現在のポイントが正しいポイントになります

おすすめ

転載: blog.csdn.net/oneKnow/article/details/106891238