5

ダウンロードした気象データには、経度 (10 進数)、緯度 (10 進数)、標高 (m) の値が含まれています。使用される座標系に関する情報はありません。どうすればデカルト座標に変換できますか?. 私の試みは以下のとおりです。しかし、私の問題は正しい式を見つけることです

def cartesian(self,longitude,latitude, elevation):
    R = 6378137.0 + elevation  # relative to centre of the earth
    X = R * math.cos(longitude) * math.sin(latitude)
    Y = R * math.sin(longitude) * math.sin(latitude)
    Z = R * math.cos(latitude)

def cartesian3(self,longitude,latitude, elevation):

    X = longitude * 60 * 1852 * math.cos(latitude)
    Y = latitude * 60 * 1852

    Z = elevation

    return X,Y,Z

ここでのDaphna Shezaf による回答では、さまざまな式が使用されています。ただし、標高は使用しません。誰かが私の混乱を解消してくれれば幸いです。経度/緯度からの変換に標高を使用する必要がありますか?. 正しい式は何ですか?. 特定の long、lat、elev を使用して、このWeb サイトでコードの結果を比較しようとしました。上記の私の両方の方法は、ウェブサイトから得られた結果とはかけ離れた結果​​を持っています

アップデート

私の問題の解決策を共有したいと思います。私は Pythonでここにあるように、Matlab から lla2ecef 関数を実装しました。ラジアンの経度、緯度、標高 (m 単位の高さ) を直交座標に変換できます。緯度と経度をラジアンに変換する必要があるのは、それらが 10 進数である場合のみです。

latitude = (lat * math.pi) / 180  #latitude in radian, and lat in decimal

私の計算を検証するために。上のサイト( website)とこちらの変換結果を比較してみました。どちらもほぼ同じ結果になります。

注: 簡単にするために地球が球体であると考える場合は、使用できますdef cartesian(私はそれを更新しました。Sasha の修正に感謝します)。地球が楕円体 (WGS 84 Geodetic System) であると考える場合は、 のように変換を実装できますlla2ecefdef cartesian地図投影用です (rodrigo に感謝)

4

1 に答える 1

3

標高は海面から測定されます。半径は、地球の中心を地理的な場所に接続します。これは、R = 6371km + 標高を意味します。この固定点は変動する可能性があり、正確な値はデータ プロバイダーによって指定される必要があります。最初の関数は正しいようです。R 計算を置き換えるだけです。

率直に言うと、半径 (標高) がなければ、球座標からデカルト座標に変換することはできません。少なくとも「海面の高さ」を使用することはできますが、これは完全な球体である惑星の座標しか得られません。どの地球はそうではありません。

たとえば、提供された Web サイトでは、楕円体を選択できます。WGS 84 標準については、ウィキペディアで次の情報を見つけました。

WGS 84 データム サーフェスは、主 (赤道) 半径が赤道で a = 6378137 m で、平坦化 f = 1/298.257223563 の偏球面 (楕円体) です。[6] 極半短軸 b は、(1-f) 倍、つまり 6356752.3142 m に等しくなります。

于 2015-07-12T08:42:04.437 に答える