我在网站上查阅了文章,但没有找到解决我的问题的方法......正如标题所说,我正在尝试将坐标从ECEF转换为LLA。
我使用的是这份文档:转换文章中的直接公式,而不是迭代公式,并使用ECEF2LLA网站进行结果比较。
我在Java中编写的代码如下:
我使用的是这份文档:转换文章中的直接公式,而不是迭代公式,并使用ECEF2LLA网站进行结果比较。
我在Java中编写的代码如下:
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;
}
我得到了错误的高度数据。 我已经尝试过转换成弧度和角度等方法。
提前感谢您!