Polynomial Transformations
The Polynomial datum transformation methods use a collection of parameters which define a high order mathematical function for transforming between two horizontal datums. These equations are usually created by local and regional geodetic authorities. They generally provide high accuracy transformations, but are limited to specific areas of use. In many cases, the accuracy of these transformations is around 1 meter.
For a detailed description of generalized polynomial datum transformations, please refer to the IOGP guidance notes. These are freely available from http://www.epsg.org
Note: Polynomial datum transformations are generally computed for specific areas of use. Since the derivations of the formula are based on a limited number of reference points, using the transformation for data outside of the pre-determined envelopes may cause unreliable results.
Affine Transform
Given a set of Control points and their subsequent Observed points, the corresponding Affine Transform is generated:
x_in, y_in : input point coordinates
x_out, y_out : output point coordinates
x = (x_in + Xshift_in) * scale_in
y = (y_in + Yshift_in) * scale_in
x' = (Xx * x) + (Xy * y) + X1
y' = (Yx * x) + (Yy * y) + Y1
x_out = (x' * scale_out) + Xshift_out
y_out = (y' * scale_out) + Yshift_out
The Affine math transform has the following parameters:
Parameter Name |
Parameter String |
input point scale |
scale_in |
input x-coordinate shift |
Xshift_in |
input y-coordinate shift |
Yshift_in |
output point scale |
scale_out |
output x-coordinate shift |
Xshift_out |
output y-coordinate shift |
Yshift_out |
x' x coefficient |
Xx |
x' y coefficient |
Xy |
x' delta |
X1 |
y' x coefficient |
Yx |
y' y coefficient |
Yy |
y' delta |
Y1 |
Second Order Polynomial Transform
Given a set of Control points and their subsequent Observed points, the corresponding Second Order Polynomial Transform is generated:
x_in, y_in : input point coordinates
x_out, y_out : output point coordinates
x = (x_in + Xshift_in) * scale_in
y = (y_in + Yshift_in) * scale_in
x' = (Xx * x) + (Xy * y) + X1 + (Xxy * x * y) + (Xx2 * x * x) + (Xy2 * y * y)
y' = (Yx * x) + (Yy * y) + Y1 + (Yxy * x * y) + (Yx2 * x * x) + (Yy2 * y * y)
x_out = (x' * scale_out) + Xshift_out
y_out = (y' * scale_out) + Yshift_out
The Second Order Polynomial math transform has the following parameters:
Parameter Name |
Parameter String |
input point scale |
scale_in |
input x-coordinate shift |
Xshift_in |
input y-coordinate shift |
Yshift_in |
output point scale |
scale_out |
output x-coordinate shift |
Xshift_out |
output y-coordinate shift |
Yshift_out |
x' x coefficient |
Xx |
x' y coefficient |
Xy |
x' delta |
X1 |
x' (x * y) coefficient |
Xxy |
x' x2 coefficient |
Xx2 |
x' y2 coefficient |
Xy2 |
y' x coefficient |
Yx |
y' y coefficient |
Yy |
y' delta |
Y1 |
y' (x * y) coefficient |
Yxy |
y' x2 coefficient |
Yx2 |
y' y2 coefficient |
Yy2 |
Third Order Polynomial Transform
Given a set of Control points and their subsequent Observed points, the corresponding Third Order Polynomial Transform is generated:
x_in, y_in : input point coordinates
x_out, y_out : output point coordinates
x = (x_in + Xshift_in) * scale_in
y = (y_in + Yshift_in) * scale_in
x' = (Xx * x) + (Xy * y) + X1 + (Xxy * x * y) + (Xx2 * x * x) + (Xy2 * y * y) + (Xx3 * x * x * x) + (Xx2y * x * x * y) + (Xxy2 * x * y * y) + (Xy3 * y * y * y)
y' = (Yx * x) + (Yy * y) + Y1 + (Yxy * x * y) + (Yx2 * x * x) + (Yy2 * y * y) + (Yx3 * x * x * x) + (Yx2y * x * x * y) + (Yxy2 * x * y * y) + (Yy3 * y * y * y)
x_out = (x' * scale_out) + Xshift_out
y_out = (y' * scale_out) + Yshift_out
The Third Order Polynomial math transform has the following parameters:
Parameter Name |
Parameter String |
input point scale |
scale_in |
input x-coordinate shift |
Xshift_in |
input y-coordinate shift |
Yshift_in |
output point scale |
scale_out |
output x-coordinate shift |
Xshift_out |
output y-coordinate shift |
Yshift_out |
x' x coefficient |
Xx |
x' y coefficient |
Xy |
x' delta |
X1 |
x' (x * y) coefficient |
Xxy |
x' x2 coefficient |
Xx2 |
x' y2 coefficient |
Xy2 |
x' x3 coefficient |
Xx3 |
x' (x2 * y) coefficient |
Xx2y |
x' (x * y2) coefficient |
Xxy2 |
x' y3 coefficient |
Xy3 |
y' x coefficient |
Yx |
y' y coefficient |
Yy |
y' delta |
Y1 |
y' (x * y) coefficient |
Yxy |
y' x2 coefficient |
Yx2 |
y' y2 coefficient |
Yy2 |
y' x3 coefficient |
Yx3 |
y' (x2 * y) coefficient |
Yx2y |
y' (x * y2) coefficient |
Yxy2 |
y' y3 coefficient |
Yy3 |
Fourth Order Polynomial Transform
Given a set of Control points and their subsequent Observed points, the corresponding Fourth Order Polynomial Transform is generated:
x_in, y_in : input point coordinates
x_out, y_out : output point coordinates
x = (x_in + Xshift_in) * scale_in
y = (y_in + Yshift_in) * scale_in
x' = (Xx * x) + (Xy * y) + X1 + (Xxy * x * y) + (Xx2 * x * x) + (Xy2 * y * y) + (Xx3 * x * x * x) + (Xx2y * x * x * y) + (Xxy2 * x * y * y) + (Xy3 * y * y * y) + (Xx4 * x * x * x * x) + (Xx3y * x * x * x * y) + (Xx2y2 * x * x * y * y) + (Xxy3 * x * y * y * y) + (Xy4 * y * y * y * y)
y' = (Yx * x) + (Yy * y) + Y1 + (Yxy * x * y) + (Yx2 * x * x) + (Yy2 * y * y) + (Yx3 * x * x * x) + (Yx2y * x * x * y) + (Yxy2 * x * y * y) + (Yy3 * y * y * y) + (Yx4 * x * x * x * x) + (Yx3y * x * x * x * y) + (Yx2y2 * x * x * y * y) + (Yxy3 * x * y * y * y) + (Yy4 * y * y * y * y)
x_out = (x' * scale_out) + Xshift_out
y_out = (y' * scale_out) + Yshift_out
The Fourth Order Polynomial math transform has the following parameters:
Parameter Name |
Parameter String |
input point scale |
scale_in |
input x-coordinate shift |
Xshift_in |
input y-coordinate shift |
Yshift_in |
output point scale |
scale_out |
output x-coordinate shift |
Xshift_out |
output y-coordinate shift |
Yshift_out |
x' x coefficient |
Xx |
x' y coefficient |
Xy |
x' delta |
X1 |
x' (x * y) coefficient |
Xxy |
x' x2 coefficient |
Xx2 |
x' y2 coefficient |
Xy2 |
x' x3 coefficient |
Xx3 |
x' (x2 * y) coefficient |
Xx2y |
x' (x * y2) coefficient |
Xxy2 |
x' y3 coefficient |
Xy3 |
x' x4 coefficient |
Xx4 |
x' (x3 * y) coefficient |
Xx3y |
x' (x2 * y2) coefficient |
Xx2y2 |
x' (x * y3) coefficient |
Xxy3 |
x' y4 coefficient |
Xy4 |
y' x coefficient |
Yx |
y' y coefficient |
Yy |
y' delta |
Y1 |
y' (x * y) coefficient |
Yxy |
y' x2 coefficient |
Yx2 |
y' y2 coefficient |
Yy2 |
y' x3 coefficient |
Yx3 |
y' (x2 * y) coefficient |
Yx2y |
y' (x * y2) coefficient |
Yxy2 |
y' y3 coefficient |
Yy3 |
y' x4 coefficient |
Yx4 |
y' (x3 * y) coefficient |
Yx3y |
y' (x2 * y2) coefficient |
Yx2y2 |
y' (x * y3) coefficient |
Yxy3 |
y' y4 coefficient |
Yy4 |
Fifth Order Polynomial Transform
Given a set of Control points and their subsequent Observed points, the corresponding Fifth Order Polynomial Transform is generated:
x_in, y_in : input point coordinates
x_out, y_out : output point coordinates
x = (x_in + Xshift_in) * scale_in
y = (y_in + Yshift_in) * scale_in
x' = (Xx * x) + (Xy * y) + X1 + (Xxy * x * y) + (Xx2 * x * x) + (Xy2 * y * y) + (Xx3 * x * x * x) + (Xx2y * x * x * y) + (Xxy2 * x * y * y) + (Xy3 * y * y * y) + (Xx4 * x * x * x * x) + (Xx3y * x * x * x * y) + (Xx2y2 * x * x * y * y) + (Xxy3 * x * y * y * y) + (Xy4 * y * y * y * y) + (Xx5 * x * x * x * x * x) + (Xx4y * x * x * x * x * y) + (Xx3y2 * x * x * x * y * y) + (Xx2y3 * x * x * y * y * y) + (Xxy4 * x * y * y * y * y) + (Xy5 * y * y * y * y * y)
y' = (Yx * x) + (Yy * y) + Y1 + (Yxy * x * y) + (Yx2 * x * x) + (Yy2 * y * y) + (Yx3 * x * x * x) + (Yx2y * x * x * y) + (Yxy2 * x * y * y) + (Yy3 * y * y * y) + (Yx4 * x * x * x * x) + (Yx3y * x * x * x * y) + (Yx2y2 * x * x * y * y) + (Yxy3 * x * y * y * y) + (Yy4 * y * y * y * y) + (Yx5 * x * x * x * x * x) + (Yx4y * x * x * x * x * y) + (Yx3y2 * x * x * x * y * y) + (Yx2y3 * x * x * y * y * y) + (Yxy4 * x * y * y * y * y) + (Yy5 * y * y * y * y * y)
x_out = (x' * scale_out) + Xshift_out
y_out = (y' * scale_out) + Yshift_out
The Fifth Order Polynomial math transform has the following parameters:
Parameter Name |
Parameter String |
input point scale |
scale_in |
input x-coordinate shift |
Xshift_in |
input y-coordinate shift |
Yshift_in |
output point scale |
scale_out |
output x-coordinate shift |
Xshift_out |
output y-coordinate shift |
Yshift_out |
x' x coefficient |
Xx |
x' y coefficient |
Xy |
x' delta |
X1 |
x' (x * y) coefficient |
Xxy |
x' x2 coefficient |
Xx2 |
x' y2 coefficient |
Xy2 |
x' x3 coefficient |
Xx3 |
x' (x2 * y) coefficient |
Xx2y |
x' (x * y2) coefficient |
Xxy2 |
x' y3 coefficient |
Xy3 |
x' x4 coefficient |
Xx4 |
x' (x3 * y) coefficient |
Xx3y |
x' (x2 * y2) coefficient |
Xx2y2 |
x' (x * y3) coefficient |
Xxy3 |
x' y4 coefficient |
Xy4 |
x' x5 coefficient |
Xx5 |
x' (x4 * y) coefficient |
Xx4y |
x' (x3 * y2) coefficient |
Xx3y2 |
x' (x2 * y3) coefficient |
Xx2y3 |
x' (x * y4) coefficient |
Xxy4 |
x' y5 coefficient |
Xy5 |
y' x coefficient |
Yx |
y' y coefficient |
Yy |
y' delta |
Y1 |
y' (x * y) coefficient |
Yxy |
y' x2 coefficient |
Yx2 |
y' y2 coefficient |
Yy2 |
y' x3 coefficient |
Yx3 |
y' (x2 * y) coefficient |
Yx2y |
y' (x * y2) coefficient |
Yxy2 |
y' y3 coefficient |
Yy3 |
y' x4 coefficient |
Yx4 |
y' (x3 * y) coefficient |
Yx3y |
y' (x2 * y2) coefficient |
Yx2y2 |
y' (x * y3) coefficient |
Yxy3 |
y' y4 coefficient |
Yy4 |
y' x5 coefficient |
Yx5 |
y' (x4 * y) coefficient |
Yx4y |
y' (x3 * y2) coefficient |
Yx3y2 |
y' (x2 * y3) coefficient |
Yx2y3 |
y' (x * y4) coefficient |
Yxy4 |
y' y5 coefficient |
Yy5 |