c++xyz转换blh
时间: 2023-08-04 15:13:36 浏览: 142
C++中的XYZ坐标转换为BLH坐标的方式如下:
```c++
// 输入参数为XYZ坐标和椭球参数a、b
void xyz2blh(double x, double y, double z, double a, double b, double &B, double &L, double &H) {
double e = sqrt(a * a - b * b) / a; // 第一偏心率
double e2 = e * e; // 第二偏心率
double p = sqrt(x * x + y * y); // 平面投影距离
double theta = atan(z * a / p * b); // 地心纬度
double N;
do {
N = a / sqrt(1 - e2 * sin(theta) * sin(theta)); // 卯酉圈半径
H = p / cos(theta) - N; // 高程
theta = atan(z / p / (1 - e2 * N / (N + H))); // 更新地心纬度
} while(fabs(theta - atan(z * a / p * b)) > 1e-10); // 迭代计算直到收敛
B = theta * 180 / acos(-1); // 转化为度数
L = atan2(y, x) * 180 / acos(-1);
}
```
其中,输入参数为XYZ坐标和椭球参数a、b,输出参数为BLH坐标。
阅读全文