ダウンロードした気象データには、経度 (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) であると考える場合は、 のように変換を実装できますlla2ecef
。def cartesian
地図投影用です (rodrigo に感謝)