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

Jonathan Johansen jonathan at t3rra.com
Sun Jan 7 17:12:57 PST 2024


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>
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
> https://lists.osgeo.org/mailman/listinfo/proj
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/proj/attachments/20240108/1f7e48e9/attachment-0001.htm>


More information about the PROJ mailing list