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 七参数计算的主要内容,如果未能解决你的问题,请参考以下文章

805484坐标系七参数转换算法及Java代码

SIFT尺度参数,解释

GIS开发之计算四参数,七参数

想问一个关于数学旋转的问题,就是在直角坐标系中,某个点绕原点旋转某个度数,应该怎么求出旋转后的度数

3.4 两样本尺度参数的秩检验法——python实战

C语言 用直角边长 计算角度