Python pyproj将ecef转换为lla

时间:2015-05-18 15:32:47

标签: python coordinate-transformation

我想使用pyproj在python中使用WGS84将x / y / z-ECEF位置转换为lla(lat / lon / alt),但似乎转换失败。

示例代码在这里:

import pyproj

# Example position data, should be somewhere in Germany
x = 652954.1006
y = 4774619.7919
z = -2217647.7937

ecef = pyproj.Proj(proj='geocent', ellps='WGS84', datum='WGS84')
lla = pyproj.Proj(proj='latlong', ellps='WGS84', datum='WGS84')
lon, lat, alt = pyproj.transform(ecef, lla, x, y, z, radians=True)

print lat, lon, alt

有人能看出问题所在吗?

编辑:到现在为止,我猜计算是正确的,只是我从接收器获得的数据似乎有问题。有人可以证实吗?

3 个答案:

答案 0 :(得分:5)

我用自己的自制坐标转换程序测试了它,并且必须说正确的顺序是:

lon, lat, alt = pyproj.transform(ecef, lla, x, y, z, radians=True)

我认为在设计库时,他们更喜欢将经度视为x轴,将纬度视为y轴,因此他们按顺序返回。

我更喜欢使用学位,所以我更容易阅读它:

lon, lat, alt = pyproj.transform(ecef, lla, x, y, z, radians=False)
print lat, lon, alt

输出是:

-24.8872207779 82.2128095674 -1069542.17232

我更改了z值以获得更合理的值,该值位于“靠近”表面:

x= 652954.1006
y = 4774619.7919
z =-4167647.7937

然后我得到:

-41.0445318235 82.2128095674 2274.39966936

您还可以看到只有纬度值在变化且经度与z值无关。这是因为z轴指向北极。

如果您想了解有关如何完成此转换的更多信息,请参阅以下简短说明: https://en.wikipedia.org/wiki/Geographic_coordinate_conversion#From_geodetic_to_ECEF_coordinates

答案 1 :(得分:1)

最新的pyproj版本样式

import pyproj

transformer = pyproj.Transformer.from_crs(
    {"proj":'geocent', "ellps":'WGS84', "datum":'WGS84'},
    {"proj":'latlong', "ellps":'WGS84', "datum":'WGS84'},
    )
x = 652954.1006
y = 4774619.7919
z = -2217647.7937
lon1, lat1, alt1 = transformer.transform(x,y,z,radians=False)
print (lat1, lon1, alt1 )

你有 -24.887220848803032 82.2128095673836 -1069542.1692923503

答案 2 :(得分:-2)

lon, lat, alt = pyproj.transform(ecef, lla, x, y, z, radians=True)

应该是:

lat, lon, alt = pyproj.transform(ecef, lla, x, y, z, radians=True)

由于lla = pyproj.Proj(proj='latlong', ellps='WGS84', datum='WGS84')指定了latlong订单