[PROJ] Differences in coordinate transforms from proj 9.1 to 9.2

Erixen Cruz erixen_cruz at earthbrain.com
Sun Jan 7 19:54:57 PST 2024


I think https://github.com/OSGeo/PROJ/pull/3621. Before that PR, PROJ did a shift with a geotiff between GDA2020<->GDA94 as an intermediate step for transforming to WGS84. Now, WGS84 to either GDA is null (no operation). I remember reading some bulletin published by an Australian government or agency that confirms this behaviour is "correct"? That geotiff grid shift is intended only for conversion between 94 and 2020 and not as a more accurate way to get to WGS84.
________________________________
From: PROJ <proj-bounces at lists.osgeo.org> on behalf of Jonathan Johansen via PROJ <proj at lists.osgeo.org>
Sent: Sunday, January 7, 2024 8:12:57 PM
To: Robert Denham <Robert.Denham at des.qld.gov.au>
Cc: proj at lists.osgeo.org <proj at lists.osgeo.org>
Subject: Re: [PROJ] Differences in coordinate transforms from proj 9.1 to 9.2

Oh, I'd be interested in the cause of this too, please, as a user located in Aus who updated to PROJ 9 not too long ago.

On Mon, Jan 8, 2024 at 10:47 AM Robert Denham via PROJ <proj at lists.osgeo.org<mailto:proj at lists.osgeo.org>> wrote:
This is probably just an improvement, but I was wondering if someone could help explain minor differences we're observing when transforming coordinates from WGS 84 geographic coordinates to projected coordinates in Australia.

For example, if I do:

echo -27.495159464576993 153.02971160860926|
        docker run -i --rm --env PROJ_DEBUG=4 --env PROJ_NETWORK=ON  osgeo/proj:9.2.0 \
        cs2cs epsg:4326 +to epsg:28356

I get:

pj_open_lib(proj.ini): call fopen(/usr/share/proj/proj.ini) - succeeded
pj_open_lib(proj.db): call fopen(/usr/share/proj/proj.db) - succeeded
pj_open_lib(au_icsm_GDA94_GDA2020_conformal_and_distortion.tif): call fopen(/usr/share/proj/au_icsm_GDA94_GDA2020_conformal_and_distortion.tif) - succeeded
pj_open_lib(au_icsm_GDA94_GDA2020_conformal_and_distortion.tif): call fopen(/usr/share/proj/au_icsm_GDA94_GDA2020_conformal_and_distortion.tif) - succeeded
502934.82       6958719.00 0.00
Using coordinate operation Inverse of GDA94 to WGS 84 (1) + Map Grid of Australia zone 56

But if I do the same with version 9.1.1:

echo -27.495159464576993 153.02971160860926|
        docker run -i --rm --env PROJ_DEBUG=4 --env PROJ_NETWORK=ON  osgeo/proj:9.1.1 \
        cs2cs epsg:4326 +to epsg:28356

I get a slightly different output:

502934.23       6958717.61 0.00


And a large amount of output (see below)

I just wanted to check whether this was expected behaviour, and if the difference in the coordinate transformation could be interpreted as an improvement?
I checked other projected coordinates systems, including

* GDA2020 Zone 56 (EPSG:7856)
* Australian Albers GDA94 (EPSG:3755)
* Australian Albers GDA2020 (EPSG:9473)

Each of these give slightly different results under proj 9.1.1 and 9.2.0. The only relevant change I could see in proj was EPSG updated to EPSG 10.082 in proj 9.2. I assume this is the source of the differences?


Thanks
Robert



(output from cs2cs with proj 9.1.1 follows)

pj_open_lib(proj.ini): call fopen(/usr/share/proj/proj.ini) - succeeded
pj_open_lib(proj.db): call fopen(/usr/share/proj/proj.db) - succeeded
pj_open_lib(au_icsm_GDA94_GDA2020_conformal_and_distortion.tif): call fopen(/usr/share/proj/au_icsm_GDA94_GDA2020_conformal_and_distortion.tif) - succeeded
pipeline: pj_ellipsoid - final: a=6378137.000 f=1/298.257, errno=0
pipeline: pj_ellipsoid - final:    ellps=GRS80
pipeline: pj_ellipsoid - final: a=6378137.000 f=1/298.257, errno=0
pipeline: pj_ellipsoid - final:
pipeline: Pipeline: Building arg list for step no. 0
pipeline: Pipeline: init - proj=axisswap, 2
pipeline:     order=2,1
axisswap: pj_ellipsoid - final: a=6378137.000 f=1/298.257, errno=0
axisswap: pj_ellipsoid - final:    ellps=GRS80
pipeline: Pipeline: Step 0 (proj=axisswap) at 0x562104a31020
pipeline: Pipeline at [0x562104bc7f60]:    step at [0x562104a31020] (proj=axisswap) done
pipeline: Pipeline: Building arg list for step no. 1
pipeline: Pipeline: init - proj=unitconvert, 3
pipeline:     xy_in=deg
pipeline:     xy_out=rad
unitconvert: pj_ellipsoid - final: a=6378137.000 f=1/298.257, errno=0
unitconvert: pj_ellipsoid - final:    ellps=GRS80
unitconvert: xy_in unit: Degree
unitconvert: xy_out unit: Radian
pipeline: Pipeline: Step 1 (proj=unitconvert) at 0x56210470c510
pipeline: Pipeline at [0x562104bc7f60]:    step at [0x56210470c510] (proj=unitconvert) done
pipeline: Pipeline: Building arg list for step no. 2
pipeline: Pipeline: init - proj=utm, 4
pipeline:     zone=56
pipeline:     south
pipeline:     ellps=GRS80
utm: pj_ellipsoid - final: a=6378137.000 f=1/298.257, errno=0
utm: pj_ellipsoid - final:    ellps=GRS80
pipeline: Pipeline: Step 2 (proj=utm) at 0x562104b90340
pipeline: Pipeline at [0x562104bc7f60]:    step at [0x562104b90340] (proj=utm) done
pipeline: Pipeline: 3 steps built. Determining i/o characteristics
axisswap: pj_ellipsoid - final: a=6378137.000 f=1/298.257, errno=0
axisswap: pj_ellipsoid - final:    ellps=GRS80
pipeline: pj_ellipsoid - final: a=6378137.000 f=1/298.257, errno=0
pipeline: pj_ellipsoid - final:    ellps=GRS80
pipeline: pj_ellipsoid - final: a=6378137.000 f=1/298.257, errno=0
pipeline: pj_ellipsoid - final:
pipeline: Pipeline: Building arg list for step no. 0
pipeline: Pipeline: init - proj=unitconvert, 3
pipeline:     xy_in=deg
pipeline:     xy_out=rad
unitconvert: pj_ellipsoid - final: a=6378137.000 f=1/298.257, errno=0
unitconvert: pj_ellipsoid - final:    ellps=GRS80
unitconvert: xy_in unit: Degree
unitconvert: xy_out unit: Radian
pipeline: Pipeline: Step 0 (proj=unitconvert) at 0x562104bc82a0
pipeline: Pipeline at [0x562104b87920]:    step at [0x562104bc82a0] (proj=unitconvert) done
pipeline: Pipeline: Building arg list for step no. 1
pipeline: Pipeline: init - proj=utm, 4
pipeline:     zone=56
pipeline:     south
pipeline:     ellps=GRS80
utm: pj_ellipsoid - final: a=6378137.000 f=1/298.257, errno=0
utm: pj_ellipsoid - final:    ellps=GRS80
pipeline: Pipeline: Step 1 (proj=utm) at 0x562104b94000
pipeline: Pipeline at [0x562104b87920]:    step at [0x562104b94000] (proj=utm) done
pipeline: Pipeline: 2 steps built. Determining i/o characteristics
pipeline: pj_ellipsoid - final: a=6378137.000 f=1/298.257, errno=0
pipeline: pj_ellipsoid - final:    ellps=GRS80
pipeline: pj_ellipsoid - final: a=6378137.000 f=1/298.257, errno=0
pipeline: pj_ellipsoid - final:
pipeline: Pipeline: Building arg list for step no. 0
pipeline: Pipeline: init - proj=axisswap, 2
pipeline:     order=2,1
axisswap: pj_ellipsoid - final: a=6378137.000 f=1/298.257, errno=0
axisswap: pj_ellipsoid - final:    ellps=GRS80
pipeline: Pipeline: Step 0 (proj=axisswap) at 0x562104ac94a0
pipeline: Pipeline at [0x562104c029b0]:    step at [0x562104ac94a0] (proj=axisswap) done
pipeline: Pipeline: Building arg list for step no. 1
pipeline: Pipeline: init - proj=unitconvert, 3
pipeline:     xy_in=deg
pipeline:     xy_out=rad
unitconvert: pj_ellipsoid - final: a=6378137.000 f=1/298.257, errno=0
unitconvert: pj_ellipsoid - final:    ellps=GRS80
unitconvert: xy_in unit: Degree
unitconvert: xy_out unit: Radian
pipeline: Pipeline: Step 1 (proj=unitconvert) at 0x562104b94d60
pipeline: Pipeline at [0x562104c029b0]:    step at [0x562104b94d60] (proj=unitconvert) done
pipeline: Pipeline: Building arg list for step no. 2
pipeline: Pipeline: init - proj=utm, 4
pipeline:     zone=56
pipeline:     south
pipeline:     ellps=GRS80
utm: pj_ellipsoid - final: a=6378137.000 f=1/298.257, errno=0
utm: pj_ellipsoid - final:    ellps=GRS80
pipeline: Pipeline: Step 2 (proj=utm) at 0x562104b952a0
pipeline: Pipeline at [0x562104c029b0]:    step at [0x562104b952a0] (proj=utm) done
pipeline: Pipeline: 3 steps built. Determining i/o characteristics
pipeline: pj_ellipsoid - final: a=6378137.000 f=1/298.257, errno=0
pipeline: pj_ellipsoid - final:    ellps=WGS84
pipeline: pj_ellipsoid - final: a=6378137.000 f=1/298.257, errno=0
pipeline: pj_ellipsoid - final:
pipeline: Pipeline: Building arg list for step no. 0
pipeline: Pipeline: init - proj=axisswap, 2
pipeline:     order=2,1
axisswap: pj_ellipsoid - final: a=6378137.000 f=1/298.257, errno=0
axisswap: pj_ellipsoid - final:    ellps=GRS80
pipeline: Pipeline: Step 0 (proj=axisswap) at 0x562104b976f0
pipeline: Pipeline at [0x562104b96660]:    step at [0x562104b976f0] (proj=axisswap) done
pipeline: Pipeline: Building arg list for step no. 1
pipeline: Pipeline: init - proj=unitconvert, 3
pipeline:     xy_in=deg
pipeline:     xy_out=rad
unitconvert: pj_ellipsoid - final: a=6378137.000 f=1/298.257, errno=0
unitconvert: pj_ellipsoid - final:    ellps=GRS80
unitconvert: xy_in unit: Degree
unitconvert: xy_out unit: Radian
pipeline: Pipeline: Step 1 (proj=unitconvert) at 0x562104b97cc0
pipeline: Pipeline at [0x562104b96660]:    step at [0x562104b97cc0] (proj=unitconvert) done
pipeline: Pipeline: Building arg list for step no. 2
pipeline: Pipeline: init - proj=push, 2
pipeline:     v_3
push: pj_ellipsoid - final: a=6378137.000 f=1/298.257, errno=0
push: pj_ellipsoid - final:    ellps=GRS80
pipeline: Pipeline: Step 2 (proj=push) at 0x562104b98290
pipeline: Pipeline at [0x562104b96660]:    step at [0x562104b98290] (proj=push) done
pipeline: Pipeline: Building arg list for step no. 3
pipeline: Pipeline: init - proj=cart, 2
pipeline:     ellps=WGS84
cart: pj_ellipsoid - final: a=6378137.000 f=1/298.257, errno=0
cart: pj_ellipsoid - final:    ellps=WGS84
pipeline: Pipeline: Step 3 (proj=cart) at 0x562104b98810
pipeline: Pipeline at [0x562104b96660]:    step at [0x562104b98810] (proj=cart) done
pipeline: Pipeline: Building arg list for step no. 4
pipeline: Pipeline: init - inv, 10
pipeline:     proj=helmert
pipeline:     x=0.06155
pipeline:     y=-0.01087
pipeline:     z=-0.04019
pipeline:     rx=-0.0394924
pipeline:     ry=-0.0327221
pipeline:     rz=-0.0328979
pipeline:     s=-0.009994
pipeline:     convention=coordinate_frame
helmert: pj_ellipsoid - final: a=6378137.000 f=1/298.257, errno=0
helmert: pj_ellipsoid - final:    ellps=GRS80
helmert: Helmert parameters:
helmert: x=   0.06155  y=  -0.01087  z=  -0.04019
helmert: rx= -0.03949  ry= -0.03272  rz= -0.03290
helmert: s=  -0.00999  exact=0  convention=coordinate_frame
helmert: dx=  0.00000  dy=  0.00000  dz=  0.00000
helmert: drx= 0.00000  dry= 0.00000  drz= 0.00000
helmert: ds=  0.00000  t_epoch= 0.00000
helmert: Transformation parameters for observation t_obs=0 (t_epoch=0):
helmert: x: 0.06155
helmert: y: -0.01087
helmert: z: -0.04019
helmert: s: -9.994e-09
helmert: rx: -1.91465e-07
helmert: ry: -1.58641e-07
helmert: rz: -1.59494e-07
helmert: theta: 0
helmert: Rotation Matrix:
helmert:   |      1  -1.59494e-07   1.58641e-07 |
helmert:   |  1.59494e-07       1  -1.91465e-07 |
helmert:   | -1.58641e-07   1.91465e-07       1 |
pipeline: Pipeline: Step 4 (inv) at 0x562104b98e90
pipeline: Pipeline at [0x562104b96660]:    step at [0x562104b98e90] (inv) done
pipeline: Pipeline: Building arg list for step no. 5
pipeline: Pipeline: init - inv, 3
pipeline:     proj=cart
pipeline:     ellps=GRS80
cart: pj_ellipsoid - final: a=6378137.000 f=1/298.257, errno=0
cart: pj_ellipsoid - final:    ellps=GRS80
pipeline: Pipeline: Step 5 (inv) at 0x562104b99560
pipeline: Pipeline at [0x562104b96660]:    step at [0x562104b99560] (inv) done
pipeline: Pipeline: Building arg list for step no. 6
pipeline: Pipeline: init - proj=pop, 2
pipeline:     v_3
pop: pj_ellipsoid - final: a=6378137.000 f=1/298.257, errno=0
pop: pj_ellipsoid - final:    ellps=GRS80
pipeline: Pipeline: Step 6 (proj=pop) at 0x562104b99ac0
pipeline: Pipeline at [0x562104b96660]:    step at [0x562104b99ac0] (proj=pop) done
pipeline: Pipeline: Building arg list for step no. 7
pipeline: Pipeline: init - proj=utm, 4
pipeline:     zone=56
pipeline:     south
pipeline:     ellps=GRS80
utm: pj_ellipsoid - final: a=6378137.000 f=1/298.257, errno=0
utm: pj_ellipsoid - final:    ellps=GRS80
pipeline: Pipeline: Step 7 (proj=utm) at 0x562104b9a070
pipeline: Pipeline at [0x562104b96660]:    step at [0x562104b9a070] (proj=utm) done
pipeline: Pipeline: 8 steps built. Determining i/o characteristics
pipeline: pj_ellipsoid - final: a=6378137.000 f=1/298.257, errno=0
pipeline: pj_ellipsoid - final:    ellps=GRS80
pipeline: pj_ellipsoid - final: a=6378137.000 f=1/298.257, errno=0
pipeline: pj_ellipsoid - final:
pipeline: Pipeline: Building arg list for step no. 0
pipeline: Pipeline: init - proj=axisswap, 2
pipeline:     order=2,1
axisswap: pj_ellipsoid - final: a=6378137.000 f=1/298.257, errno=0
axisswap: pj_ellipsoid - final:    ellps=GRS80
pipeline: Pipeline: Step 0 (proj=axisswap) at 0x562104b9b790
pipeline: Pipeline at [0x562104b9a890]:    step at [0x562104b9b790] (proj=axisswap) done
pipeline: Pipeline: Building arg list for step no. 1
pipeline: Pipeline: init - proj=unitconvert, 3
pipeline:     xy_in=deg
pipeline:     xy_out=rad
unitconvert: pj_ellipsoid - final: a=6378137.000 f=1/298.257, errno=0
unitconvert: pj_ellipsoid - final:    ellps=GRS80
unitconvert: xy_in unit: Degree
unitconvert: xy_out unit: Radian
pipeline: Pipeline: Step 1 (proj=unitconvert) at 0x562104b9bd60
pipeline: Pipeline at [0x562104b9a890]:    step at [0x562104b9bd60] (proj=unitconvert) done
pipeline: Pipeline: Building arg list for step no. 2
pipeline: Pipeline: init - inv, 3
pipeline:     proj=hgridshift
pipeline:     grids=au_icsm_GDA94_GDA2020_conformal_and_distortion.tif
hgridshift: pj_ellipsoid - final: a=6378137.000 f=1/298.257, errno=0
hgridshift: pj_ellipsoid - final:    ellps=GRS80
pipeline: Pipeline: Step 2 (inv) at 0x562104b9c380
pipeline: Pipeline at [0x562104b9a890]:    step at [0x562104b9c380] (inv) done
pipeline: Pipeline: Building arg list for step no. 3
pipeline: Pipeline: init - proj=utm, 4
pipeline:     zone=56
pipeline:     south
pipeline:     ellps=GRS80
utm: pj_ellipsoid - final: a=6378137.000 f=1/298.257, errno=0
utm: pj_ellipsoid - final:    ellps=GRS80
pipeline: Pipeline: Step 3 (proj=utm) at 0x562104b9c950
pipeline: Pipeline at [0x562104b9a890]:    step at [0x562104b9c950] (proj=utm) done
pipeline: Pipeline: 4 steps built. Determining i/o characteristics
Using coordinate operation Inverse of GDA94 to WGS 84 (3) + Map Grid of Australia zone 56
pj_open_lib(au_icsm_GDA94_GDA2020_conformal_and_distortion.tif): call fopen(/usr/share/proj/au_icsm_GDA94_GDA2020_conformal_and_distortion.tif) - succeeded
502934.23       6958717.61 0.00









R

------------------------------
The information in this email together with any attachments is intended only for the person or entity to which it is addressed and may contain confidential and/or privileged material. There is no waiver of any confidentiality/privilege by your inadvertent receipt of this material.
Any form of review, disclosure, modification, distribution and/or publication of this email message is prohibited, unless as a necessary part of Departmental business.
If you have received this message in error, you are asked to inform the sender as quickly as possible and delete this message and any copies of this message from your computer and/or your computer system network.
------------------------------
_______________________________________________
PROJ mailing list
PROJ at lists.osgeo.org<mailto:PROJ at lists.osgeo.org>
https://lists.osgeo.org/mailman/listinfo/proj
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/proj/attachments/20240108/7589a3d1/attachment-0001.htm>


More information about the PROJ mailing list