上一篇介绍了坐标转换。本篇文章我们将以实例来介绍七参数的转换过程。
七参数转换法
七参数法(包括布尔莎模型,一步法模型,海尔曼特等)是解决此问题的比较严密和通用的方法1。其涉及到的七个参数为:X平移,Y平移,Z平移,X旋转,Y旋转,Z旋转,尺度变化m。此七个参数可以通过在需要转化的区域里选取3个以上的转换控制点对而获取。
如果区域范围不大,最远点间的距离不大于30Km,可以用三参数(莫洛登斯基模型),即X平移,Y平移,Z平移,而此时将X旋转,Y旋转,Z旋转,尺度变化m视为0。所以三参数只是七参数的一种特例。三参数只需通过1个控制点对就能获取。
七参数公式如下:
$$
\begin{bmatrix} {X}\\ {Y}\\ {Z} \end{bmatrix}=\begin{bmatrix} {\Delta X}\\ {\Delta Y}\\ {\Delta Z} \end{bmatrix}+(1+m)\begin{bmatrix} {1}&{\theta_z}&{-\theta_y} \\ {-\theta_z}&{1}&{\theta_x}\\ {\theta_y}&{-\theta_x}&{1} \end{bmatrix}\begin{bmatrix} {X_0}\\ {Y_0}\\ {Z_0} \end{bmatrix}
$$
式中, $\Delta X$, $\Delta Y$, $\Delta Z$为三个平移参数; $θ_x$, $θ_y$, $θ_z$为3个旋转参数,m为尺度参数。将七参数作为未知数,并且按参数线性化,则可以转换为:
$$
\begin{bmatrix}
{X - X(X_0)}\\ {Y - Y(Y_0)}\\ {Z - Z(Z_0)}
\end{bmatrix}
\begin{bmatrix}
{1}&{0}&{0}&{0}&{-(1+m)Z_0}&{(1+m)Y_0}&{X_0+\theta_zY_0-\theta_yZ_0} \\ {0}&{1}&{0}&{(1+m)Z_0}&{0}&{-(1+m)X_0}&{-\theta_zX_0 +Y_0+\theta_xZ_0} \\ {0}&{0}&{1}&{-(1+m)Y_0}&{(1+m)X_0}&{0}&{\theta_yX_0-\theta_xY_0+Z_0}
\end{bmatrix}
\begin{bmatrix} {\Delta X}\\ {\Delta Y}\\ {\Delta Z}\\ {\theta_x}\\ {\theta_y}\\ {\theta_z}\\ {m}\end{bmatrix}
$$
其中,X(X0),Y(Y0),Z(Z0)由七参数公式给出,利用最小二乘法法即可对该线性化的方程进行迭代求解。
七参数转换法实例
下面以python代码为例2,利用已有四个控制点坐标,根据最小二乘来求解七参数模型的参数,并利用一个检查点来验证其转换精度。
导入数据
使用4个同名点的原坐标(x, y, z)和目标坐标(x’, y’, z’)来求解七参数
1 | import numpy as np |
正向计算
根据坐标转换公式来列立系数方程定义函数返回系数矩阵。使用4个同名点的坐标转换公式作为误差方程进行最小二乘平差,根据坐标转换公式来列立系数方程 $W x = b$ :
1 | # 定义函数返回系数矩阵 B, l |
系数求解
组成法方程 (W’W) x = (W’b) 并利用最小二乘求解x
1 | Args = np.array([0, 0, 0, 0, 0, 0, 0], dtype='float64') |
七参数输出结果为
$$
[-0. -0. -0. -0. 0. -0.072 -0.215]
$$
模型精度评定和结果验证
评定最小二乘模型的精度结果,并使用预留的已知坐标同名点来验证七参数模型的效果
1 | # 检查点坐标 |
精度检查
目标点与预测值对比
1 | 单位权中误差: 162.711 |
结束语
坐标系系列的文章在此就告一段落了。坐标系以及与其相关的信息处理一直与我们测绘工作者息息相关。因此我们有必要了解相关概念。祝大家工作顺利!
1: 七参数转换是针对将地理坐标系所对应的空间直角坐标转换为另一坐标系的空间直接坐标。空间直角坐标系的原点位于地球参考椭球的中心,Z轴与地球自转轴平行并指向参考椭球的北极,X轴指向参考椭球的本初子午线,Y轴与X轴和Z轴相互垂直最终构成一个右手系。大地坐标系是以大地基准为基础建立起来的,大地基准又以参考椭球为基础,由此大地坐标系又被称为椭球坐标系。
2: 代码存在中文注释,在Python3中可正常运行,若使用Python2,则需要去掉中文注释来正常运行。
(作者:廖溥昀,孙玉峰,陈关州)

