如何将经度、纬度、海拔高度转换成笛卡尔坐标?

6

我下载了气象数据,其中包含经度(十进制)、纬度(十进制)和高程(米)值。没有关于使用的坐标系统的信息。我该如何将其转换为笛卡尔坐标?我的尝试如下,但我的问题是找到正确的公式。

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提供,使用不同的公式。然而,这个回答没有使用高程数据。 我很感激如果有人能解释一下,转换经纬度时是否应该考虑高程?正确的公式是什么?我试着比较了我的代码在这个网站上使用特定的经、纬、高进行转换,但我的两种方法得到的结果与网站得到的结果相差甚远。

更新

我想分享我的问题的解决方案。我在Python中实现了来自Matlab的lla2ecef函数作为(链接)。它可以将弧度经度、纬度和海拔高度(以米为单位)转换为笛卡尔坐标。我只需要将经度和纬度转换为弧度,如果它们是十进制的,就像这样:

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

为了验证我的计算结果,我将转换结果与上述网站(网站)以及此网站进行了比较,并得到了几乎相同的结果。
注意:如果你认为地球是个球体,你可以使用def cartesian(我已更新它;感谢Sasha的更正)。如果你认为地球是椭球体(WGS 84大地测量系统),你可以按照lla2ecef中所述实现转换。而def cartesian则适用于制图投影(感谢rodrigo)。

1
笛卡尔坐标是什么意思?第一个公式给出了相对于地球中心的三维坐标。第二个公式是一种地图投影,相对于地图。 - rodrigo
我已经更新了问题和解决方案。你是对的,第二个公式是用于地图而不是地球。 - Yasmin
1
@Yasmin 看起来公式中有三处错误。正确格式如下:def cartesian(self,longitude,latitude, elevation): R = 6378137.0 + elevation # 相对于地心的高度 X = R * math.cos(longitude) * math.cos(latitude) Y = R * math.sin(longitude) * math.cos(latitude) Z = R * math.sin(latitude) - Ali
1个回答

3
海拔高度是从海平面测量的。半径连接地球中心和您的地理位置。这意味着 R = 6371 公里 + 海拔高度。此固定点可能会变化,确切值应由数据提供者指定。您的第一个函数似乎是正确的,只需替换 R 计算公式。
直言不讳地说:如果没有半径(海拔高度),就无法从球面坐标转换为笛卡尔坐标。最少可以使用“海平面高度”,但这只能给出一个完美球体上的坐标。而地球并不是完美的球体。
例如,在您提供的网站上,您可以选择椭球体。对于 WGS 84 标准,我在维基百科上找到了以下信息:
WGS 84 基准面是一个扁球体(椭球体),其主轴(赤道)半径 a = 6378137 米,在赤道处,扁率 f = 1/298.257223563.[6] 极半短轴 b 等于 a 乘以 (1−f),即 6356752.3142 米。

谢谢,但我又将我的结果与我参考的网站进行了比较,发现不同。我想知道是否有任何验证方式,可以输入经纬度和高程,然后获得笛卡尔坐标以及反过来,这样我就可以比较我的结果了。 - Yasmin
我认为数据提供者使用WGS 84。我在http://www.colorado.edu/geography/gcraft/notes/datum/gif/llhxyz.gif找到了另一种WGS 84的公式。你有使用它们的经验吗? - Yasmin
很遗憾,我正在处理太空中飞行的东西。我从未使用过地理坐标。 - Sasha

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接