<div dir="ltr">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.</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Jan 8, 2024 at 10:47 AM Robert Denham via PROJ <<a href="mailto:proj@lists.osgeo.org">proj@lists.osgeo.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">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. <br>
<br>
For example, if I do:<br>
<br>
echo -27.495159464576993 153.02971160860926|<br>
        docker run -i --rm --env PROJ_DEBUG=4 --env PROJ_NETWORK=ON  osgeo/proj:9.2.0 \<br>
        cs2cs epsg:4326 +to epsg:28356<br>
<br>
I get:<br>
<br>
pj_open_lib(proj.ini): call fopen(/usr/share/proj/proj.ini) - succeeded<br>
pj_open_lib(proj.db): call fopen(/usr/share/proj/proj.db) - succeeded<br>
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<br>
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<br>
502934.82       6958719.00 0.00<br>
Using coordinate operation Inverse of GDA94 to WGS 84 (1) + Map Grid of Australia zone 56<br>
<br>
But if I do the same with version 9.1.1:<br>
<br>
echo -27.495159464576993 153.02971160860926|<br>
        docker run -i --rm --env PROJ_DEBUG=4 --env PROJ_NETWORK=ON  osgeo/proj:9.1.1 \<br>
        cs2cs epsg:4326 +to epsg:28356<br>
<br>
I get a slightly different output:<br>
<br>
502934.23       6958717.61 0.00<br>
<br>
<br>
And a large amount of output (see below)<br>
<br>
I just wanted to check whether this was expected behaviour, and if the difference in the coordinate transformation could be interpreted as an improvement?<br>
I checked other projected coordinates systems, including <br>
<br>
* GDA2020 Zone 56 (EPSG:7856)<br>
* Australian Albers GDA94 (EPSG:3755)<br>
* Australian Albers GDA2020 (EPSG:9473)<br>
<br>
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?<br>
<br>
<br>
Thanks<br>
Robert<br>
<br>
<br>
<br>
(output from cs2cs with proj 9.1.1 follows)<br>
<br>
pj_open_lib(proj.ini): call fopen(/usr/share/proj/proj.ini) - succeeded<br>
pj_open_lib(proj.db): call fopen(/usr/share/proj/proj.db) - succeeded<br>
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<br>
pipeline: pj_ellipsoid - final: a=6378137.000 f=1/298.257, errno=0<br>
pipeline: pj_ellipsoid - final:    ellps=GRS80<br>
pipeline: pj_ellipsoid - final: a=6378137.000 f=1/298.257, errno=0<br>
pipeline: pj_ellipsoid - final:    <br>
pipeline: Pipeline: Building arg list for step no. 0<br>
pipeline: Pipeline: init - proj=axisswap, 2<br>
pipeline:     order=2,1<br>
axisswap: pj_ellipsoid - final: a=6378137.000 f=1/298.257, errno=0<br>
axisswap: pj_ellipsoid - final:    ellps=GRS80<br>
pipeline: Pipeline: Step 0 (proj=axisswap) at 0x562104a31020<br>
pipeline: Pipeline at [0x562104bc7f60]:    step at [0x562104a31020] (proj=axisswap) done<br>
pipeline: Pipeline: Building arg list for step no. 1<br>
pipeline: Pipeline: init - proj=unitconvert, 3<br>
pipeline:     xy_in=deg<br>
pipeline:     xy_out=rad<br>
unitconvert: pj_ellipsoid - final: a=6378137.000 f=1/298.257, errno=0<br>
unitconvert: pj_ellipsoid - final:    ellps=GRS80<br>
unitconvert: xy_in unit: Degree<br>
unitconvert: xy_out unit: Radian<br>
pipeline: Pipeline: Step 1 (proj=unitconvert) at 0x56210470c510<br>
pipeline: Pipeline at [0x562104bc7f60]:    step at [0x56210470c510] (proj=unitconvert) done<br>
pipeline: Pipeline: Building arg list for step no. 2<br>
pipeline: Pipeline: init - proj=utm, 4<br>
pipeline:     zone=56<br>
pipeline:     south<br>
pipeline:     ellps=GRS80<br>
utm: pj_ellipsoid - final: a=6378137.000 f=1/298.257, errno=0<br>
utm: pj_ellipsoid - final:    ellps=GRS80<br>
pipeline: Pipeline: Step 2 (proj=utm) at 0x562104b90340<br>
pipeline: Pipeline at [0x562104bc7f60]:    step at [0x562104b90340] (proj=utm) done<br>
pipeline: Pipeline: 3 steps built. Determining i/o characteristics<br>
axisswap: pj_ellipsoid - final: a=6378137.000 f=1/298.257, errno=0<br>
axisswap: pj_ellipsoid - final:    ellps=GRS80<br>
pipeline: pj_ellipsoid - final: a=6378137.000 f=1/298.257, errno=0<br>
pipeline: pj_ellipsoid - final:    ellps=GRS80<br>
pipeline: pj_ellipsoid - final: a=6378137.000 f=1/298.257, errno=0<br>
pipeline: pj_ellipsoid - final:    <br>
pipeline: Pipeline: Building arg list for step no. 0<br>
pipeline: Pipeline: init - proj=unitconvert, 3<br>
pipeline:     xy_in=deg<br>
pipeline:     xy_out=rad<br>
unitconvert: pj_ellipsoid - final: a=6378137.000 f=1/298.257, errno=0<br>
unitconvert: pj_ellipsoid - final:    ellps=GRS80<br>
unitconvert: xy_in unit: Degree<br>
unitconvert: xy_out unit: Radian<br>
pipeline: Pipeline: Step 0 (proj=unitconvert) at 0x562104bc82a0<br>
pipeline: Pipeline at [0x562104b87920]:    step at [0x562104bc82a0] (proj=unitconvert) done<br>
pipeline: Pipeline: Building arg list for step no. 1<br>
pipeline: Pipeline: init - proj=utm, 4<br>
pipeline:     zone=56<br>
pipeline:     south<br>
pipeline:     ellps=GRS80<br>
utm: pj_ellipsoid - final: a=6378137.000 f=1/298.257, errno=0<br>
utm: pj_ellipsoid - final:    ellps=GRS80<br>
pipeline: Pipeline: Step 1 (proj=utm) at 0x562104b94000<br>
pipeline: Pipeline at [0x562104b87920]:    step at [0x562104b94000] (proj=utm) done<br>
pipeline: Pipeline: 2 steps built. Determining i/o characteristics<br>
pipeline: pj_ellipsoid - final: a=6378137.000 f=1/298.257, errno=0<br>
pipeline: pj_ellipsoid - final:    ellps=GRS80<br>
pipeline: pj_ellipsoid - final: a=6378137.000 f=1/298.257, errno=0<br>
pipeline: pj_ellipsoid - final:    <br>
pipeline: Pipeline: Building arg list for step no. 0<br>
pipeline: Pipeline: init - proj=axisswap, 2<br>
pipeline:     order=2,1<br>
axisswap: pj_ellipsoid - final: a=6378137.000 f=1/298.257, errno=0<br>
axisswap: pj_ellipsoid - final:    ellps=GRS80<br>
pipeline: Pipeline: Step 0 (proj=axisswap) at 0x562104ac94a0<br>
pipeline: Pipeline at [0x562104c029b0]:    step at [0x562104ac94a0] (proj=axisswap) done<br>
pipeline: Pipeline: Building arg list for step no. 1<br>
pipeline: Pipeline: init - proj=unitconvert, 3<br>
pipeline:     xy_in=deg<br>
pipeline:     xy_out=rad<br>
unitconvert: pj_ellipsoid - final: a=6378137.000 f=1/298.257, errno=0<br>
unitconvert: pj_ellipsoid - final:    ellps=GRS80<br>
unitconvert: xy_in unit: Degree<br>
unitconvert: xy_out unit: Radian<br>
pipeline: Pipeline: Step 1 (proj=unitconvert) at 0x562104b94d60<br>
pipeline: Pipeline at [0x562104c029b0]:    step at [0x562104b94d60] (proj=unitconvert) done<br>
pipeline: Pipeline: Building arg list for step no. 2<br>
pipeline: Pipeline: init - proj=utm, 4<br>
pipeline:     zone=56<br>
pipeline:     south<br>
pipeline:     ellps=GRS80<br>
utm: pj_ellipsoid - final: a=6378137.000 f=1/298.257, errno=0<br>
utm: pj_ellipsoid - final:    ellps=GRS80<br>
pipeline: Pipeline: Step 2 (proj=utm) at 0x562104b952a0<br>
pipeline: Pipeline at [0x562104c029b0]:    step at [0x562104b952a0] (proj=utm) done<br>
pipeline: Pipeline: 3 steps built. Determining i/o characteristics<br>
pipeline: pj_ellipsoid - final: a=6378137.000 f=1/298.257, errno=0<br>
pipeline: pj_ellipsoid - final:    ellps=WGS84<br>
pipeline: pj_ellipsoid - final: a=6378137.000 f=1/298.257, errno=0<br>
pipeline: pj_ellipsoid - final:    <br>
pipeline: Pipeline: Building arg list for step no. 0<br>
pipeline: Pipeline: init - proj=axisswap, 2<br>
pipeline:     order=2,1<br>
axisswap: pj_ellipsoid - final: a=6378137.000 f=1/298.257, errno=0<br>
axisswap: pj_ellipsoid - final:    ellps=GRS80<br>
pipeline: Pipeline: Step 0 (proj=axisswap) at 0x562104b976f0<br>
pipeline: Pipeline at [0x562104b96660]:    step at [0x562104b976f0] (proj=axisswap) done<br>
pipeline: Pipeline: Building arg list for step no. 1<br>
pipeline: Pipeline: init - proj=unitconvert, 3<br>
pipeline:     xy_in=deg<br>
pipeline:     xy_out=rad<br>
unitconvert: pj_ellipsoid - final: a=6378137.000 f=1/298.257, errno=0<br>
unitconvert: pj_ellipsoid - final:    ellps=GRS80<br>
unitconvert: xy_in unit: Degree<br>
unitconvert: xy_out unit: Radian<br>
pipeline: Pipeline: Step 1 (proj=unitconvert) at 0x562104b97cc0<br>
pipeline: Pipeline at [0x562104b96660]:    step at [0x562104b97cc0] (proj=unitconvert) done<br>
pipeline: Pipeline: Building arg list for step no. 2<br>
pipeline: Pipeline: init - proj=push, 2<br>
pipeline:     v_3<br>
push: pj_ellipsoid - final: a=6378137.000 f=1/298.257, errno=0<br>
push: pj_ellipsoid - final:    ellps=GRS80<br>
pipeline: Pipeline: Step 2 (proj=push) at 0x562104b98290<br>
pipeline: Pipeline at [0x562104b96660]:    step at [0x562104b98290] (proj=push) done<br>
pipeline: Pipeline: Building arg list for step no. 3<br>
pipeline: Pipeline: init - proj=cart, 2<br>
pipeline:     ellps=WGS84<br>
cart: pj_ellipsoid - final: a=6378137.000 f=1/298.257, errno=0<br>
cart: pj_ellipsoid - final:    ellps=WGS84<br>
pipeline: Pipeline: Step 3 (proj=cart) at 0x562104b98810<br>
pipeline: Pipeline at [0x562104b96660]:    step at [0x562104b98810] (proj=cart) done<br>
pipeline: Pipeline: Building arg list for step no. 4<br>
pipeline: Pipeline: init - inv, 10<br>
pipeline:     proj=helmert<br>
pipeline:     x=0.06155<br>
pipeline:     y=-0.01087<br>
pipeline:     z=-0.04019<br>
pipeline:     rx=-0.0394924<br>
pipeline:     ry=-0.0327221<br>
pipeline:     rz=-0.0328979<br>
pipeline:     s=-0.009994<br>
pipeline:     convention=coordinate_frame<br>
helmert: pj_ellipsoid - final: a=6378137.000 f=1/298.257, errno=0<br>
helmert: pj_ellipsoid - final:    ellps=GRS80<br>
helmert: Helmert parameters:<br>
helmert: x=   0.06155  y=  -0.01087  z=  -0.04019<br>
helmert: rx= -0.03949  ry= -0.03272  rz= -0.03290<br>
helmert: s=  -0.00999  exact=0  convention=coordinate_frame<br>
helmert: dx=  0.00000  dy=  0.00000  dz=  0.00000<br>
helmert: drx= 0.00000  dry= 0.00000  drz= 0.00000<br>
helmert: ds=  0.00000  t_epoch= 0.00000<br>
helmert: Transformation parameters for observation t_obs=0 (t_epoch=0):<br>
helmert: x: 0.06155<br>
helmert: y: -0.01087<br>
helmert: z: -0.04019<br>
helmert: s: -9.994e-09<br>
helmert: rx: -1.91465e-07<br>
helmert: ry: -1.58641e-07<br>
helmert: rz: -1.59494e-07<br>
helmert: theta: 0<br>
helmert: Rotation Matrix:<br>
helmert:   |      1  -1.59494e-07   1.58641e-07 |<br>
helmert:   |  1.59494e-07       1  -1.91465e-07 |<br>
helmert:   | -1.58641e-07   1.91465e-07       1 |<br>
pipeline: Pipeline: Step 4 (inv) at 0x562104b98e90<br>
pipeline: Pipeline at [0x562104b96660]:    step at [0x562104b98e90] (inv) done<br>
pipeline: Pipeline: Building arg list for step no. 5<br>
pipeline: Pipeline: init - inv, 3<br>
pipeline:     proj=cart<br>
pipeline:     ellps=GRS80<br>
cart: pj_ellipsoid - final: a=6378137.000 f=1/298.257, errno=0<br>
cart: pj_ellipsoid - final:    ellps=GRS80<br>
pipeline: Pipeline: Step 5 (inv) at 0x562104b99560<br>
pipeline: Pipeline at [0x562104b96660]:    step at [0x562104b99560] (inv) done<br>
pipeline: Pipeline: Building arg list for step no. 6<br>
pipeline: Pipeline: init - proj=pop, 2<br>
pipeline:     v_3<br>
pop: pj_ellipsoid - final: a=6378137.000 f=1/298.257, errno=0<br>
pop: pj_ellipsoid - final:    ellps=GRS80<br>
pipeline: Pipeline: Step 6 (proj=pop) at 0x562104b99ac0<br>
pipeline: Pipeline at [0x562104b96660]:    step at [0x562104b99ac0] (proj=pop) done<br>
pipeline: Pipeline: Building arg list for step no. 7<br>
pipeline: Pipeline: init - proj=utm, 4<br>
pipeline:     zone=56<br>
pipeline:     south<br>
pipeline:     ellps=GRS80<br>
utm: pj_ellipsoid - final: a=6378137.000 f=1/298.257, errno=0<br>
utm: pj_ellipsoid - final:    ellps=GRS80<br>
pipeline: Pipeline: Step 7 (proj=utm) at 0x562104b9a070<br>
pipeline: Pipeline at [0x562104b96660]:    step at [0x562104b9a070] (proj=utm) done<br>
pipeline: Pipeline: 8 steps built. Determining i/o characteristics<br>
pipeline: pj_ellipsoid - final: a=6378137.000 f=1/298.257, errno=0<br>
pipeline: pj_ellipsoid - final:    ellps=GRS80<br>
pipeline: pj_ellipsoid - final: a=6378137.000 f=1/298.257, errno=0<br>
pipeline: pj_ellipsoid - final:    <br>
pipeline: Pipeline: Building arg list for step no. 0<br>
pipeline: Pipeline: init - proj=axisswap, 2<br>
pipeline:     order=2,1<br>
axisswap: pj_ellipsoid - final: a=6378137.000 f=1/298.257, errno=0<br>
axisswap: pj_ellipsoid - final:    ellps=GRS80<br>
pipeline: Pipeline: Step 0 (proj=axisswap) at 0x562104b9b790<br>
pipeline: Pipeline at [0x562104b9a890]:    step at [0x562104b9b790] (proj=axisswap) done<br>
pipeline: Pipeline: Building arg list for step no. 1<br>
pipeline: Pipeline: init - proj=unitconvert, 3<br>
pipeline:     xy_in=deg<br>
pipeline:     xy_out=rad<br>
unitconvert: pj_ellipsoid - final: a=6378137.000 f=1/298.257, errno=0<br>
unitconvert: pj_ellipsoid - final:    ellps=GRS80<br>
unitconvert: xy_in unit: Degree<br>
unitconvert: xy_out unit: Radian<br>
pipeline: Pipeline: Step 1 (proj=unitconvert) at 0x562104b9bd60<br>
pipeline: Pipeline at [0x562104b9a890]:    step at [0x562104b9bd60] (proj=unitconvert) done<br>
pipeline: Pipeline: Building arg list for step no. 2<br>
pipeline: Pipeline: init - inv, 3<br>
pipeline:     proj=hgridshift<br>
pipeline:     grids=au_icsm_GDA94_GDA2020_conformal_and_distortion.tif<br>
hgridshift: pj_ellipsoid - final: a=6378137.000 f=1/298.257, errno=0<br>
hgridshift: pj_ellipsoid - final:    ellps=GRS80<br>
pipeline: Pipeline: Step 2 (inv) at 0x562104b9c380<br>
pipeline: Pipeline at [0x562104b9a890]:    step at [0x562104b9c380] (inv) done<br>
pipeline: Pipeline: Building arg list for step no. 3<br>
pipeline: Pipeline: init - proj=utm, 4<br>
pipeline:     zone=56<br>
pipeline:     south<br>
pipeline:     ellps=GRS80<br>
utm: pj_ellipsoid - final: a=6378137.000 f=1/298.257, errno=0<br>
utm: pj_ellipsoid - final:    ellps=GRS80<br>
pipeline: Pipeline: Step 3 (proj=utm) at 0x562104b9c950<br>
pipeline: Pipeline at [0x562104b9a890]:    step at [0x562104b9c950] (proj=utm) done<br>
pipeline: Pipeline: 4 steps built. Determining i/o characteristics<br>
Using coordinate operation Inverse of GDA94 to WGS 84 (3) + Map Grid of Australia zone 56<br>
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<br>
502934.23       6958717.61 0.00<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
R<br>
<br>
------------------------------<br>
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. <br>
Any form of review, disclosure, modification, distribution and/or publication of this email message is prohibited, unless as a necessary part of Departmental business.<br>
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.<br>
------------------------------<br>
_______________________________________________<br>
PROJ mailing list<br>
<a href="mailto:PROJ@lists.osgeo.org" target="_blank">PROJ@lists.osgeo.org</a><br>
<a href="https://lists.osgeo.org/mailman/listinfo/proj" rel="noreferrer" target="_blank">https://lists.osgeo.org/mailman/listinfo/proj</a><br>
</blockquote></div>