如何将经度、纬度、高程转换为笛卡尔坐标?

Yas*_*min 6 python coordinate-systems python-2.7 cartesian-coordinates

我下载了天气数据,它有经度(十进制)、纬度(十进制)和海拔(米)值。没有有关所使用的坐标系的信息。我如何将其转换为笛卡尔坐标?我的尝试如下。但是,我的问题是找到正确的公式

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
Run Code Online (Sandbox Code Playgroud)

Daphna Shezaf的回答使用了不同的公式。但是,它不使用高程。如果有人能消除我的困惑,我将不胜感激,是否应该使用海拔来从长/纬度转换?正确的公式是什么?我尝试使用特定的经度、纬度、海拔来比较我在该网站上的代码的结果。我上面的两种方法的结果与从网站获得的结果相差甚远

更新

我想分享我的问题的解决方案。我已经在Python中实现了Matlab中的lla2ecef函数。它允许将弧度经度、纬度和海拔(高度以米为单位)转换为笛卡尔坐标。我只需要将纬度和经度转换为弧度,前提是它们是十进制的:

latitude = (lat * math.pi) / 180  #latitude in radian, and lat in decimal
Run Code Online (Sandbox Code Playgroud)

为了验证我的计算。我将转换结果与上面的网站(网站)和这个网站进行了比较。两者都给了我几乎相同的结果。

注意:如果您考虑简单起见,地球是球体,您可以使用def cartesian(我更新了它;感谢 Sasha 的更正)。如果您认为地球是椭球体(WGS 84 大地测量系统),您可以按照 中的方式实现转换lla2ecefdef cartesian用于地图投影(感谢罗德里戈)

Sas*_*sha 3

海拔是从海平面开始测量的。半径将地球中心与您的地理位置连接起来。这意味着 R = 6371km + 海拔。该固定点可能会有所不同,确切的值应由数据提供者指定。你的第一个函数似乎是正确的,只需替换 R 计算即可。

\n\n

直言不讳:如果没有半径(高程),就不可能从球坐标转换为笛卡尔坐标。至少你可以做的是使用“海平面高度”,但这只会给你一个完美球体的行星上的坐标。哪个地球不是。

\n\n

例如,在您提供的网站上,您可以选择椭球体。对于 WGS 84 标准,我在维基百科中找到了以下内容;

\n\n
\n

WGS 84 基准面是一个扁球体(椭球体),赤道处的主(赤道)半径 a = 6378137 m,扁平化 f = 1/298.257223563。[6] 极短半轴 b 等于 a 乘以 (1\xe2\x88\x92f),即 6356752.3142 m

\n
\n