首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python pyproj将ecef转换为lla

Python pyproj将ecef转换为lla
EN

Stack Overflow用户
提问于 2015-05-18 23:32:47
回答 3查看 16.3K关注 0票数 10

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

示例代码如下:

代码语言:javascript
运行
复制
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

有人能看到问题出在哪里吗?

编辑:到目前为止,我猜计算是正确的,只是我从接收器得到的数据似乎是错误的。有人能证实这一点吗?

EN

回答 3

Stack Overflow用户

发布于 2016-03-15 16:13:44

我用我自己的坐标转换程序测试了它,并不得不说正确的顺序是:

代码语言:javascript
运行
复制
lon, lat, alt = pyproj.transform(ecef, lla, x, y, z, radians=True)

我想在设计库的时候,他们更愿意把经度看作x轴,把纬度看作y轴,所以他们按照这个顺序返回了它。

我更喜欢使用degree,这样对我来说更容易阅读:

代码语言:javascript
运行
复制
lon, lat, alt = pyproj.transform(ecef, lla, x, y, z, radians=False)
print lat, lon, alt

这里的输出是:

代码语言:javascript
运行
复制
-24.8872207779 82.2128095674 -1069542.17232

我更改了z值,以获得一个更合理的值,该值被放置在“靠近”曲面的位置:

代码语言:javascript
运行
复制
x= 652954.1006
y = 4774619.7919
z =-4167647.7937

然后我得到:

代码语言:javascript
运行
复制
-41.0445318235 82.2128095674 2274.39966936

您还可以看到,只有纬度值在变化,而经度与z值无关。这是由于z轴指向北极的事实。

如果您想了解更多有关此转换是如何完成的信息,请查看下面的简短描述:https://en.wikipedia.org/wiki/Geographic_coordinate_conversion#From_geodetic_to_ECEF_coordinates

票数 8
EN

Stack Overflow用户

发布于 2020-11-28 17:49:43

最新pyproj版本样式

代码语言:javascript
运行
复制
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

票数 4
EN

Stack Overflow用户

发布于 2015-08-26 07:58:32

代码语言:javascript
运行
复制
lon, lat, alt = pyproj.transform(ecef, lla, x, y, z, radians=True)

应该是:

代码语言:javascript
运行
复制
lat, lon, alt = pyproj.transform(ecef, lla, x, y, z, radians=True)

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

票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30307311

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档