霍纳多项式求值

5.0.0 新版功能.

在 9.1.0 版更改: 迭代多正态反演

Alias

霍纳

Domain

二维与三维

输入类型

大地坐标和投影坐标

输出类型

大地坐标和投影坐标

霍纳多项式评估方案用于参考帧之间的变换,其中一个或两个不均匀或内部失真。这通常是在引入诸如全球定位系统等空间大地测量技术之前创建的参考框架。

霍纳多项式,或多元回归方程,因为他们也被称为,有他们的力量,能够创建坐标系之间的复杂映射,同时仍然是轻量级的计算成本和磁盘空间使用。

PROJ实现了Horner求值方案的两个版本:实多项式求值和复多项式求值。下面对这两种情况进行简要描述。更多详情请咨询 [Ruffhead2016][IOGP2018] .

实数空间中的多项式求值由以下等式定义:

(1)\[\Delta X=\sum{i,j}u{i,j}u^i V^j\]

在哪里?

(2)\[U=X{in}-X{origin}\]

\(u_{{i,j}}\)\(v_{{i,j}}\) 是组成多项式的系数。

最终坐标确定为

(3)\[X{out}=X{in}+\Delta X\]

逆变换与上面的相同,但需要不同的系数集。如果只知道系数和原点的正向集合,则可以通过迭代求解一组方程来完成逆变换。通过写作 (1) 作为:

\[\begin{split}\Begin{bMatrix} \Delta X\\ \增量Y\\ \end{bMatrix}= \Begin{bMatrix} U_{0,0}\\ V_{0,0}\\ \end{bMatrix}+ \Begin{bMatrix} U_{0,1}+u_{0,2}U+...&u_{1,0}+u_{1,1}U+u_{2,0}V+...\\ V_{1,0}+V_{1,1}V+V_{2,0}U+...&V_{0,1}+V_{0,2}V \end{bMatrix} \Begin{bMatrix} U\\ V\\ \end{bMatrix}\\\end{split}\]
\[\begin{split}\Begin{bMatrix} \Delta X\\ \增量Y\\ \end{bMatrix}= \Begin{bMatrix} U_{0,0}\\ V_{0,0}\\ \end{bMatrix}+ \Begin{bMatrix} 毫安\\ MC&MD\\ \end{bMatrix} \Begin{bMatrix} U\\ V\\ \end{bMatrix}\\\end{split}\]
\[\begin{split}\Begin{bMatrix} U\\ V\\ \end{bMatrix}= \Begin{bMatrix} 毫安\\ MC&MD\\ \end{bMatrix}^{-1} \Begin{bMatrix} \增量X-u_{0,0}\\ \增量Y-v_{0,0}\\ \end{bMatrix}\end{split}\]

我们可以用初值迭代求解 \(U = 0\)\(V = 0\) 并找到 \(U\)\(V\)

备注

这种迭代逆变换是一种更一般的解 N次可逆多项式 如中所示 [IOGP2019] 。当满足某些条件时,这些方法可以在单个步骤中提供令人满意的解决方案。

复多项式的求值由以下等式定义:

(4)\[\Delta X+i\Delta Y=\sum{j=1}^n(c{2j-1}+i c{2j})(U+i V)^j\]

哪里 \(n\) 是多项式的次数。 \(U\)\(V\) 定义如下所示 (2) 并且所得到的坐标再次由 (3) 。复多项式可以像实多项式一样迭代求解。

实例

使用实数空间中的多项式在丹麦TC32和ETRS89/UTM zone 32之间映射:

+proj=horner
+ellps=intl
+range=500000
+fwd_origin=877605.269066,6125810.306769
+inv_origin=877605.760036,6125811.281773
+deg=4
+fwd_v=6.1258112678e+06,9.9999971567e-01,1.5372750011e-10,5.9300860915e-15,2.2609497633e-19,4.3188227445e-05,2.8225130416e-10,7.8740007114e-16,-1.7453997279e-19,1.6877465415e-10,-1.1234649773e-14,-1.7042333358e-18,-7.9303467953e-15,-5.2906832535e-19,3.9984284847e-19
+fwd_u=8.7760574982e+05,9.9999752475e-01,2.8817299305e-10,5.5641310680e-15,-1.5544700949e-18,-4.1357045890e-05,4.2106213519e-11,2.8525551629e-14,-1.9107771273e-18,3.3615590093e-10,2.4380247154e-14,-2.0241230315e-18,1.2429019719e-15,5.3886155968e-19,-1.0167505000e-18
+inv_v=6.1258103208e+06,1.0000002826e+00,-1.5372762184e-10,-5.9304261011e-15,-2.2612705361e-19,-4.3188331419e-05,-2.8225549995e-10,-7.8529116371e-16,1.7476576773e-19,-1.6875687989e-10,1.1236475299e-14,1.7042518057e-18,7.9300735257e-15,5.2881862699e-19,-3.9990736798e-19
+inv_u=8.7760527928e+05,1.0000024735e+00,-2.8817540032e-10,-5.5627059451e-15,1.5543637570e-18,4.1357152105e-05,-4.2114813612e-11,-2.8523713454e-14,1.9109017837e-18,-3.3616407783e-10,-2.4382678126e-14,2.0245020199e-18,-1.2441377565e-15,-5.3885232238e-19,1.0167203661e-18

使用复数多项式在丹麦System Storebælt和ETRS89/UTM区域32之间映射:

+proj=horner
+ellps=intl
+range=500000
+fwd_origin=4.94690026817276e+05,6.13342113183056e+06
+inv_origin=6.19480258923588e+05,6.13258568148837e+06
+deg=3
+fwd_c=6.13258562111350e+06,6.19480105709997e+05,9.99378966275206e-01,-2.82153291753490e-02,-2.27089979140026e-10,-1.77019590701470e-09,1.08522286274070e-14,2.11430298751604e-15
+inv_c=6.13342118787027e+06,4.94690181709311e+05,9.99824464710368e-01,2.82279070814774e-02,7.66123542220864e-11,1.78425334628927e-09,-1.05584823306400e-14,-3.32554258683744e-15

参数

建立Horner多项式需要显式地编写许多系数,即使对于低阶多项式也是如此。因此,建议将多项式定义存储在 init file 便于编写和重用。

要求的

下面列出了可以为Horner多项式变换设置的所需参数。如上所述,变换采用实多项式或复多项式的形式。下面将这些内容分为几个单独的部分。这两部分的参数是互斥的,即描述实多项式和复多项式的参数不能混合。

+ellps=<value>

内置椭球体定义的名称。

看见 椭球体 获取更多信息,或执行 proj -le 以获取内置椭圆体名称的列表。

默认为“GRS80”。

+deg=<value>

多项式次数

+fwd_origin=<northing,easting>

正演映射的原点坐标

实多项式

如果变换由实空间中的多项式组成,则必须设置以下参数。每个参数采用逗号分隔的系数列表。系数的数量取决于度数, \(d\) ,多项式的:

\[N=\frac{(d+1)(d+2)}{2}\]
+fwd_u=<u_11,u_12,...,u_ij,..,u_mn>

正向转换系数,即纬度到北距,如中所述 (1) .

+fwd_v=<v_11,v_12,...,v_ij,..,v_mn>

正向变换系数,即经度到东距,如中所述 (1) .

复多项式

如果变换由复数空间中的多项式组成,则必须设置以下参数。每个参数采用逗号分隔的系数列表。系数的数量取决于度数, \(d\) ,多项式的:

\[N=2d+2\]
+fwd_c=<c_1,c_2,...,c_N>

复正变换的系数,如中所述 (4) .

可选的

+inv_origin=<northing,easting>

在 9.1.0 版更改.

反向映射的原点坐标。如果没有此选项,则反变换将使用迭代多项式求值。

+inv_u=<u_11,u_12,...,u_ij,..,u_mn>

在 9.1.0 版更改.

逆变换的系数,即纬度到北距,如中所述 (1) 。仅适用于实多项式。如果没有此选项,则反变换将使用迭代多项式求值。

+inv_v=<v_11,v_12,...,v_ij,..,v_mn>

在 9.1.0 版更改.

逆变换的系数,即经度到东经,如中所述 (1) 。仅适用于实多项式。如果没有此选项,则反变换将使用迭代多项式求值。

+inv_c=<c_1,c_2,...,c_N>

在 9.1.0 版更改.

复逆变换的系数,如中所述 (4) 。仅适用于复多项式。如果没有此选项,则反变换将使用迭代多项式求值。

+range=<value>

有效区域的半径。

+uneg

把纬度表示为向南。只适用于复多项式。

+vneg

将经度表示为westing。只适用于复多项式。

+inv_tolerance=<value>

9.1.0 新版功能.

仅适用于迭代反演的情况。该过程在每一步都收敛到正确的结果。当结果与以前计算的结果相差小于<Value>时,迭代停止。<Value>应与相同的单位 \(U\)\(V\)(2)

默认为0.001。

进一步阅读

  1. Wikipedia