首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >java中将ECEF转换为lla (lat,lon,alt)

java中将ECEF转换为lla (lat,lon,alt)
EN

Stack Overflow用户
提问于 2013-08-15 21:20:26
回答 3查看 20K关注 0票数 5

我已经浏览了网站上的帖子,但没有发现我的问题……正如标题所说的,我正在尝试从ecef转换到lla。

我在直接公式中使用这个文档:Conversion article,而不是迭代公式,这个站点用于结果比较:ECEF2LLA

我是用java开发的,所以我的代码如下:

代码语言:javascript
运行
复制
public static final double a = 6378137;
public static final double f = 1/298.257223563;
public static final double b = a*(1-f);
public static final double e = Math.sqrt((Math.pow(a, 2)-Math.pow(b, 2))/Math.pow(a, 2));
public static final double e2 = Math.sqrt((Math.pow(a, 2)-Math.pow(b, 2))/Math.pow(b, 2));
public static double[] ecef2lla(double x , double y , double z){
    double[] lla = {0,0,0};
    double lon,lat,height,N;
    double p = Math.sqrt(Math.pow(x, 2)+Math.pow(y, 2));
    double theta = Math.atan((z*a)/(p*b));
    lon = Math.atan(y/x);
    lon = lon*180/Math.PI;

    lat = Math.atan(((z+Math.pow(e2, 2)*b*Math.pow(Math.sin(theta), 3))/((p-Math.pow(e,2)*a*Math.pow(Math.cos(theta), 3)))));
    lat = (lat*180)/Math.PI;

    N= a/(Math.sqrt(1-Math.pow(e*Math.sin(lat), 2)));
    height = (p/Math.cos(theta)) - N;
    lla[0] = lon;
    lla[1] = lat;
    lla[2] = height;
    return lla;

}

我得到了错误的身高数据。我试着移动到弧度和度数等等。

提前谢谢你!

EN

Stack Overflow用户

发布于 2016-09-07 01:23:24

如果您对使用已发布的java库在笛卡尔坐标系和大地坐标系之间进行转换感兴趣,您可以使用java轨道传播库orekit

虽然Orekit提供了一些高级功能,但它并不是很容易深入研究。为了帮助你入门,我写了一个样例代码来做一些转换。我的代码是用Scala编写的,但它使用的是java库,所以它应该还是有帮助的。请参阅示例代码here

票数 2
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18253546

复制
相关文章

相似问题

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