fanvanzh / 3dtiles

The fastest tools for 3dtiles convert in the world!

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

请问40680631590769和40408299984661.4数值的来源?

Hisos opened this issue · comments

这两个数值来自以下函数:
std::vector transfrom_xyz(double radian_x, double radian_y, double height_min){
// 定义椭球体参数
double ellipsod_a = 40680631590769;
double ellipsod_b = 40680631590769;
double ellipsod_c = 40408299984661.4;

const double pi = std::acos(-1);
// 计算坐标转换中的各个分量
double xn = std::cos(radian_x) * std::cos(radian_y);
double yn = std::sin(radian_x) * std::cos(radian_y);
double zn = std::sin(radian_y);

double x0 = ellipsod_a * xn;
double y0 = ellipsod_b * yn;
double z0 = ellipsod_c * zn;
double gamma = std::sqrt(xn*x0 + yn*y0 + zn*z0);    // 几何意义为物体在地面上的投影点到地心距离的开方
double px = x0 / gamma;
double py = y0 / gamma;
double pz = z0 / gamma;
....

}

从cesium里抄过来的

这段代码计算的(x0, y0, z0)逻辑上是ECEF坐标系下的坐标, 但参与计算的ellipsod_a,ellipsod_b和ellipsod_c并不是地球椭球模型的长半轴,长半轴和短半轴,而近似长半轴的平方,长半轴的平方和短半轴的平方。如40680631590769和地球半径(6,378,137 )的平方40,678,361,153,989是同一个数据级,数值上看起来接近。

疑问: ellipsod_a不应该是地球的长半轴吗?为什么取值更像地球长半轴的平方呢?