Opened 15 years ago

Closed 10 years ago

# Add TOWGS[] coefficients to Pulkovo 1942 (SK-42) coordinate system (EPSG 4284)

Reported by: Owned by: dron warmerdam normal OGR_SRS 1.7.0 minor datum shift, pulkovo

## Description

There is no TOWGS transformation defined for "Pulkovo 1942" CS in EPSG tables. But this transformation is specified in appropriate Russian official documents. I am attaching such a document. It is a GOST (An Official State Standard) number "P 51794-2001". It is written in Russian, but the part interesting for us contains mostly math, so it is pretty readable. I will translate some parts of this document below.

Page 1:

```GOST P 51794-2001

THE STATE STANDARD OF THE RUSSIAN FEDERATION

positioning system.

COORDINATE SYSTEMS.

Methods of points coordinates transformations

Introduced 2002/07/01

1. Scope of usage

This document defines: coordinate systems included in the systems of geodesic
parameters "Earth Parameters", "World Geodetic System" and coordinate system of the
Russian Federation; methods of coordinate and coordinate increments transformations
from system to another one, and usage of numerical values of coordinate system
transformation parameters in geodesic, navigational, cartographic activities using

2. Terms and abbreviations

...skipped...
```

Page 4:

```... skipped ...

4.2 Coordinate transformation

Users of GLONASS and GPS navigation systems should perform the coordinate
transformations from PZ coordinate system into WGS and back, as well as from PZ
and WGS into reference ccoordinate system of the Russian Federation. These
coordinate transformations should be performed using 7-parametric transformation.

Parameters of the transformation between coordinate systems PZ and WGS are listed
in Appendix B.

Transformation from WGS system into the reference system of the Russian Federation
is being performed by sequential transformation into PZ system and then into
reference system coordinates.

Transformation of the Cartesian coordinates performed using formula:

|X|               | 1  +RZ -RY | |X|   |DX|
|Y|  = (1 + DS) * |-RZ  1  +RX |.|Y| + |DY|
|Z|               |+RY -RX  1  | |Z|   |DZ|
b                                a

where DX, DY, DZ --- linear parameters of the transformation, m;
RX, RY, RZ --- angular parameters of the transformation, radians;
DS --- difference in scale parameters of the coordinate systems;
a,b --- coordinate systems.
```

... and continues on page 5:

```Reverse transformation of the cartesian coordinates performed using formula

|X|               | 1  -RZ +RY | |X|   |DX|
|Y|  = (1 - DS) * |+RZ  1  -RX |.|Y| - |DY|
|Z|               |-RY +RX  1  | |Z|   |DZ|
a                                b

... the rest is skipped ...
```

Now lets look at the appendixes.

Page 9:

```GOST P 51794-2001

APPENDIX A
(mandatory)

Parameters of transformation between coordinate system PZ ("Earth Parameters")
and national reference systems of Russia

Transformation from the reference Coordinate System 1942 into system PZ-90

DX = (+25 +/-2) m; RX = 0.00" +/-0.1";
DY = (-141 +/-2) m; RY = -0.35" +/-0.1;
DZ = (-80 +/-3) m; RZ = -0.66" +/-0,1";
DS = (0.00 +/-0.25) * 10^-6;

|X|      | 1          -3.3*10^-6 +1.8*10^-6| |X|      | 25 |
|Y|   =  |+3.3*10^-6   1          0        |.|Y|   +  |-141|
|Z|      |-1.8*10^-6   0          1        | |Z|      |-80 |
PZ-90                                        SK-42

Transformation from the PZ-90 coordinate system into the reference
Coordinate System 1942

|X|      | 1          +3.3*10^-6 -1.8*10^-6| |X|      | 25 |
|Y|   =  |-3.3*10^-6   1          0        |.|Y|   -  |-141|
|Z|      |+1.8*10^-6   0          1        | |Z|      |-80 |
SK-42                                        PZ-90

Transformation from the reference Coordinate System 1995 into system PZ-90

DX = +25.90 m;
DY = -130.94 m;
DZ = -81.76 m;

|X|      |X|      | 25.90 |
|Y|   =  |Y|   +  |-130.94|
|Z|      |Z|      |-81.76 |
PZ-90    SK-95

Transformation from the PZ-90 coordinate system into reference
Coordinate System 1995

|X|      |X|      | 25.90 |
|Y|   =  |Y|   -  |-130.94|
|Z|      |Z|      |-81.76 |
SK-95    PZ-90
```

Page 10

```GOST P 51794-2001

APPENDIX B
(mandatory)

Parameters of transformation between coordinate system PZ ("Earth Parameters")
and WGS coordinate system

Transformation from the coordinate system PZ-90 into WGS-84

DX = (-1.08 +/-0.2) m; RX = 0;
DY = (-0.27 +/-0.2) m; RY = 0;
DZ = (-0.90 +/-0.3) m; RZ = -0.16" +/-0,01";
DS = (-0.12 +/-0.06) * 10^-6;

|X|                       | 1          -0.82*10^-6 0| |X|      |-1.1|
|Y|   =  (1-0.12*10^-6) * |0.82*10^-6   1          0|.|Y|   +  |-0.3|
|Z|                       |0            0          1| |Z|      |-0.9|
WGS-84                                                PZ-90

Transformation from the coordinate system WGS-84 into PZ-90

|X|                       | 1          0.82*10^-6 0| |X|        |-1.1|
|Y|   =  (1+0.12*10^-6) * |-0.82*10^-6 1          0|.|Y|     -  |-0.3|
|Z|                       | 0          0          1| |Z|        |-0.9|
PZ-90                                                 WGS-84

```

The document states that in order to transform coordinates from the SK-42 into WGS-84 systems they should be transformed into PZ-90 first and afterward to WGS-84. After a trivial matrix math I've got the following formula for transformation from SK-42 to WGS-84:

```|X|                       | 1          -4.12*10^-6 1.8*10^-6| |X|        | 23.9 |
|Y|   =  (1-0.12*10^-6) * | 4.12*10^-6  1          0        |.|Y|     +  |-141.3|
|Z|                       |-1.8*10^-6   0          1        | |Z|        |-80.9 |
WGS-84                                                        SK-42
```

After conversion to arc seconds we can get:

```+towgs84=23.9,-141.3,-80.9,0,-0.37,-0.85,-0.12
```

Finally what I am suggesting to do is to apply the following patch

```--- gcs.override.csv	(revision 17777)
+++ gcs.override.csv	(working copy)
@@ -25,4 +25,9 @@
# From Jan: http://bugzilla.remotesensing.org/show_bug.cgi?id=1336
#
4313,Belge 1972,6313,Reseau National Belge 1972,6313,9122,7022,8901,1,0,6422,9606,106.868628,-52.297783,103.723893,-0.336570,0.456955,-1.842183,1.0000012747
+#
+# Seven-parameter transformation for Pulkovo 1942
+# as defined by the GOST P 51794-2001
+#
+4284,Pulkovo 1942,6284,Pulkovo 1942,6284,9122,7024,8901,1,0,6422,9607,23.9,-141.3,-80.9,0,-0.37,-0.85,-0.12
```

and propagate this parameters in PROJ.4 data files.

Please, note that this issue is very important for Russia, because Pulkovo 1942 (SK-42) Coordinate System was used more than a half of the century in USSR and virtually every map produced here was made in that system. Also a very few people feel themselves confident with this datum conversion staff, so the chances that someone else will raise this issue are quite small.

Best regards, Andrey

### by dron, 15 years ago

GOST P 51794-2001 (The Russian State Standard)

### comment:1 by dron, 15 years ago

Resolution: → fixed new → closed

There were no objections so I have applied the patch in r17853. Also I will send the appropriate request to EPSG people to update the tables.

### comment:2 by warmerdam, 15 years ago

I have upstreamed these changes into libgeotiff, and pulled back down with a new message in the *.override.csv headers indicating that these files are owned by the libgeotiff project (r17854).

### comment:3 by dron, 15 years ago

Keywords: datum shift pulkovo added fixed major → minor closed → reopened defect → enhancement unspecified → 1.7.0

Well, this isn't an end of the story. There is a newer document called GOST P 51794-2008 introduced September 01, 2009. That new official standard contains updated transformation coefficients and obsoletes the older GOST P 51794-2001, described above.

To make the long story short I will only translate the parts, containing parameters.

Page 11:

```GOST P 51794-2008

APPENDIX A
(mandatory)

Parameters of transformation between coordinate system PZ ("Earth Parameters")
and national reference systems of Russia

Transformation from the reference Coordinate System 1942 into system PZ-90.02

DX = +23.93 m; RX = 0.00";
DY = -141.03 m; RY = -0.35";
DZ = -79.98 m; RZ = -0.79";
DS = -0.22 * 10^-6;

|X|                         | 1            -3.8300*10^-6 +1.6968*10^-6| |X|      | 23.93 |
|Y|   =   (1+(-0.22)*10^-6) |+3.8300*10^-6  1             0           |.|Y|   +  |-141.03|
|Z|                         |-1.6968*10^-6  0             1           | |Z|      |-79.98 |
PZ-90.02                                                                SK-42

Transformation from the PZ-90.02 coordinate system into the reference
Coordinate System 1942

|X|                       | 1            +3.8300*10^-6 -1.6968*10^-6| |X|        | 23.93   |
|Y|   = (1-(-0.22)*10^-6) |-3.8300*10^-6  1             0           |.|Y|   -    |-141.03|
|Z|                       |+1.6968*10^-6  0             1           | |Z|        |-79.98 |
SK-42                                                                 PZ-90.02

Transformation from the reference Coordinate System 1995 into system PZ-90.02

DX = +24.83 m; RX = 0.00";
DY = -130.97 m; RY = 0.00";
DZ = -81.74 m; RZ = -0.13";
DS = (-0.22)*10^-6;

|X|                       |1             -0.6302*10^-6 0| |X|     | 24.83 |
|Y|   = (1+(-0.22)*10^-6) |+0.6302*10^-6  1            0|.|Y|   + |-130.97|
|Z|                       |0              0            1| |Z|     |-81.74 |
PZ-90.02                                                  SK-95

Transformation from the PZ-90.02 coordinate system into reference
Coordinate System 1995

|X|                       |1             +0.6302*10^-6 0| |X|        | 24.83 |
|Y|   =  (1-(-0.22)*10^-6)|-0.6302*10^-6  1            0|.|Y|   -    |-130.97|
|Z|                       |0              0            1| |Z|        |-81.74 |
SK-95                                                     PZ-90.02

```

Page 13:

```GOST P 51794-2008

APPENDIX C
(mandatory)

Parameters of transformation between verified coordinate system PZ ("Earth Parameters") and WGS coordinate system

Transformation from the coordinate system PZ-90.02 into WGS-84

DX = -0.36 m; RX = 0;
DY = +0.08 m; RY = 0;
DZ = +0.18 m; RZ = 0;
DS = 0;

|X|             |X|        |-0.36|
|Y|   =         |Y|   +    |+0.08|
|Z|             |Z|        |+0.18|
WGS-84(G1150)   PZ-90.02

Transformation from the coordinate system WGS-84 into PZ-90.02

|X|        |X|             |-0.36|
|Y|   =    |Y|     -       |+0.08|
|Z|        |Z|             |+0.18|
PZ-90.02   WGS-84(G1150)
```

So the updated formula for SK-42 to WGS-84 transformation is

```|X|      | 1            -3.8300*10^-6 1.6968*10^-6| |X|        | 24.29 |
|Y|   =  | 3.8300*10^-6  1            0           |.|Y|     +  |-141.06|
|Z|      |-1.6968*10^-6  0            1           | |Z|        |-80.11 |
WGS-84                                              SK-42

```

and after conversion to arc seconds:

```+towgs84=24.29,-141.06,-80.11,0,-0.35,-0.79,0
```

There is a subtle deviation from the previously computed values and for practical usage there is no a big difference because the difference is beyond the accuracy of SK-42 coordinate system determination. But for the sake of clarity and standardization there is a patch:

```--- gcs.override.csv	(revision 18682)
+++ gcs.override.csv	(working copy)
@@ -35,8 +35,8 @@
4313,Belge 1972,6313,Reseau National Belge 1972,6313,9122,7022,8901,1,0,6422,9606,106.868628,-52.297783,103.723893,-0.336570,0.456955,-1.842183,1.0000012747
#
# Seven-parameter transformation for Pulkovo 1942
-# as defined by the GOST P 51794-2001.
+# as defined by GOST P 51794-2008.
# See http://trac.osgeo.org/gdal/ticket/3176 for details.
#
-4284,Pulkovo 1942,6284,Pulkovo 1942,6284,9122,7024,8901,1,0,6422,9607,23.9,-141.3,-80.9,0,-0.37,-0.85,-0.12
+4284,Pulkovo 1942,6284,Pulkovo 1942,6284,9122,7024,8901,1,0,6422,9607,24.29,-141.06,-80.11,0,-0.35,-0.79,0
```

### by dron, 15 years ago

GOST P 51794-2008 (The Russian State Standard)

### comment:4 by dron, 15 years ago

I've made a small mistake in calculations, the final formula is

```|X|      | 1            -3.8300*10^-6 1.6968*10^-6| |X|        | 23.57 |
|Y|   =  | 3.8300*10^-6  1            0           |.|Y|     +  |-141.0 |
|Z|      |-1.6968*10^-6  0            1           | |Z|        |-79.85 |
WGS-84                                              SK-42

```

and PROJ.4 line is

```+towgs84=23.57,-141.0,-79.85,0,-0.35,-0.79,0
```

The updated patch:

```--- gcs.override.csv	(revision 18682)
+++ gcs.override.csv	(working copy)
@@ -35,8 +35,8 @@
4313,Belge 1972,6313,Reseau National Belge 1972,6313,9122,7022,8901,1,0,6422,9606,106.868628,-52.297783,103.723893,-0.336570,0.456955,-1.842183,1.0000012747
#
# Seven-parameter transformation for Pulkovo 1942
-# as defined by the GOST P 51794-2001.
+# as defined by GOST P 51794-2008.
# See http://trac.osgeo.org/gdal/ticket/3176 for details.
#
-4284,Pulkovo 1942,6284,Pulkovo 1942,6284,9122,7024,8901,1,0,6422,9607,23.9,-141.3,-80.9,0,-0.37,-0.85,-0.12
+4284,Pulkovo 1942,6284,Pulkovo 1942,6284,9122,7024,8901,1,0,6422,9607,23.57,-141.0,-79.85,0,-0.35,-0.79,0
```

### by dron, 15 years ago

Maxima batch file to compute SK-42 to WGS-84 transformation parameters

### comment:5 by dron, 15 years ago

...And now I know why the EPSG:4284 record does not contain a transformation. There are multiple transformations defined for that CS and coefficients mentioned in the initial bug report already contained in EPSG database as record number 1267. As per bug #3357 we don't have a way to reference multiple transformations, so there is no transformation at all.

### comment:6 by Jukka Rahkonen, 10 years ago

Recent GDAL-dev (1.11) from gisinternals.com has this proj4 string:

# Pulkovo 1942 <4284> +proj=longlat +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +no_defs <>

The first suggestion in this ticket was based on GOST P 51794-2001 +towgs84=23.9,-141.3,-80.9,0,-0.37,-0.85,-0.12 GOST P 51794-2008 version is +towgs84=23.57,-141.0,-79.85,0,-0.35,-0.79,0

What GDAL delivers with the epsg file is close to GOST standards. Closer to the older one but not far from the new either. I believe that GDAL behaves close enough with current defaults, if user know better it is possible to give the parameters as proj4 string and after all this is more a proj4 issue.

Suggestion: Close ticket as fixed.

### comment:7 by Jukka Rahkonen, 10 years ago

Resolution: → fixed reopened → closed

There are some wrong parameter values in my last comment 9 months ago because of copy-paste errors and lazy check of comma vs. point as decimal separator.

In GDAL-dev 2.0 the whole Proj4 string is:

```# Pulkovo 1942
<4284> +proj=longlat +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +no_defs  <>
```

Parameters differ a bit from both suggested sets but the projection error should be now less than a meter. I close the ticket as fixed.

Note: See TracTickets for help on using tickets.