Java 七参数计算
Posted mmsx
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 七参数计算相关的知识,希望对你有一定的参考价值。
两个不同的三维空间直角坐标系之间转换时,通常使用七参数模型(数学方程组)。在该模型中有七个未知参数,即:
(1)三个坐标平移量(△X,△Y,△Z),即两个空间坐标系的坐标原点之间坐标差值;
(2)三个坐标轴的旋转角度(△α,△β,△γ),通过按顺序旋转三个坐标轴指定角度,可以使两个空间直角坐标系的XYZ轴重合在一起。
(3)尺度因子K,即两个空间坐标系内的同一段直线的长度比值,实现尺度的比例转换。通常K值几乎等于1。 以上七个参数通常称为七参数。运用七参数进行的坐标转换称为七参数坐标转换。
下面来看布尔沙模型计算,算法来源proj4j-0.1.1.jar
七参数正算
public void transformToGeocentricFromWgs84(ProjCoordinate p)
if (this.transform.length == 3)
p.x -= this.transform[0];
p.y -= this.transform[1];
p.z -= this.transform[2];
else if (this.transform.length == 7)
double Dx_BF = this.transform[0];
double Dy_BF = this.transform[1];
double Dz_BF = this.transform[2];
double Rx_BF = this.transform[3];
double Ry_BF = this.transform[4];
double Rz_BF = this.transform[5];
double M_BF = this.transform[6];
double x_tmp = (p.x - Dx_BF) / M_BF;
double y_tmp = (p.y - Dy_BF) / M_BF;
double z_tmp = (p.z - Dz_BF) / M_BF;
p.x = (x_tmp + Rz_BF * y_tmp - Ry_BF * z_tmp);
p.y = (-Rz_BF * x_tmp + y_tmp + Rx_BF * z_tmp);
p.z = (Ry_BF * x_tmp - Rx_BF * y_tmp + z_tmp);
七参数反算
public void transformFromGeocentricToWgs84(ProjCoordinate p)
if (this.transform.length == 3)
p.x += this.transform[0];
p.y += this.transform[1];
p.z += this.transform[2];
else if (this.transform.length == 7)
double Dx_BF = this.transform[0];
double Dy_BF = this.transform[1];
double Dz_BF = this.transform[2];
double Rx_BF = this.transform[3];
double Ry_BF = this.transform[4];
double Rz_BF = this.transform[5];
double M_BF = this.transform[6];
double x_out = M_BF * (p.x - Rz_BF * p.y + Ry_BF * p.z) + Dx_BF;
double y_out = M_BF * (Rz_BF * p.x + p.y - Rx_BF * p.z) + Dy_BF;
double z_out = M_BF * (-Ry_BF * p.x + Rx_BF * p.y + p.z) + Dz_BF;
p.x = x_out;
p.y = y_out;
p.z = z_out;
以上是关于Java 七参数计算的主要内容,如果未能解决你的问题,请参考以下文章