我下载了天气数据,它有经度(十进制)、纬度(十进制)和海拔(米)值。没有关于使用的坐标系的信息。我如何将其转换为笛卡尔坐标?我的尝试如下。但是,我的问题是找到正确的公式
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来比较我在这个网站上的代码的结果。我上述两种方法的结果与从网站获得的结果相差甚远
更新
我想分享我的问题的解决方案。我已经在python中实现了来自 Matlab 的 lla2ecef 函数。它允许将弧度经度、纬度和海拔(以米为单位的高度)转换为笛卡尔。我只需要将纬度和经度转换为弧度,如果它们是十进制的:
latitude = (lat * math.pi) / 180 #latitude in radian, and lat in decimal
来验证我的计算。我将转换结果与上面的网站(网站)和这个网站进行了比较。两者都给了我几乎相同的结果。
注意:如果您为简单起见考虑地球是球体,您可以使用def cartesian
(我更新了它;感谢 Sasha 的更正)。如果您认为地球是椭球体(WGS 84 大地测量系统),您可以实现转换,如lla2ecef
. def cartesian
用于制图投影(感谢罗德里戈)