python - 如何将经度、纬度、高程转换为直角坐标?

标签 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

一个答案here Daphna Shezaf 使用不同的公式。但是,它不使用高程。 如果有人能消除我的困惑,我将不胜感激,是否应该使用高程从 long/lat 转换?什么是正确的公式?我试图比较我的代码在这个 website 上的结果通过使用特定的 long、lat、elev。我上面的两种方法的结果都与从网站上获得的结果相去甚远

更新

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

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

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

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

最佳答案

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

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

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

The WGS 84 datum surface is an oblate spheroid (ellipsoid) with major (equatorial) radius a = 6378137 m at the equator and flattening f = 1/298.257223563.[6] The polar semi-minor axis b then equals a times (1−f), or 6356752.3142 m

关于python - 如何将经度、纬度、高程转换为直角坐标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31365848/

相关文章:

python - PyQt4 - QString 对象没有属性 'isEmpty' '

java - 数学、坐标

cocoa - CALayer坐标系

python - Airflow:如何确保 DAG 每 5 分钟运行一次?

python - Django 项目上的 SSL(django-sslserver) 问题

python - numpy 格式字符串中的转义 % 符号

python - 查找行的匹配值并分别提取,无需指定匹配值(key)

python - 将长字符串分解为整数

geospatial - 我如何猜测哪个地理投影系统用于数据集?

python - 如何保存OpenCV检测到的面部