如何将经度,纬度,海拔转换为笛卡尔坐标?

时间:2015-07-12 08:22:32

标签: python python-2.7 coordinate-systems 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

Daphna Shezaf的回答here使用不同的公式。但是,它不使用高程。 如果有人可以清除我的困惑,我是否会感激,如果从long / lat转换使用是否升高?什么是正确的公式?我试图通过使用特定的long,lat,elev来比较我website上的代码结果。我上述两种方法的结果与网站

的结果相差甚远

更新

我想与我的问题分享解决方案。我在Matlab中实现了lla2ecef函数,在python中为here。它允许将弧度经度,纬度和高程(以m为单位)转换为笛卡尔坐标。我只需将纬度和经度转换为弧度iff它们是十进制的:

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

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

注意:如果您考虑简单,则earth是sphere,您可以使用def cartesian(我更新了它;感谢Sasha进行更正)。如果您认为地球是椭圆体(WGS 84大地测量系统),您可以像lla2ecef中那样实现转换。 def cartesian用于制图投影(感谢rodrigo)

1 个答案:

答案 0 :(得分:2)

海拔是从海平面测量的。半径将地球中心连接到您的地理位置。这意味着R = 6371km +海拔。此固定点可以变化,确切的值应由数据提供者指定。你的第一个函数似乎是正确的,只需替换R计算。

要生硬:没有半径(高程),就无法从球形坐标转换为笛卡尔坐标。你能做的最少就是使用“海平面高度”,但这只会给你一个完美球体的行星上的坐标。哪个地球不是。

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

  

WGS 84基准面是一个扁球体(椭圆体),在赤道处主要(赤道)半径a = 6378137 m并且展平f = 1 / 298.257223563。[6]然后极半短轴b等于(1-f),或6356752.3142 m