Skip to content

gie: initialising operations using crs_src and crs_dst fail when several candidates are available #4740

@kbevers

Description

@kbevers

Using the (unfortunately undocumented) crs_src/crs_dst way of initialising an operation in gie, it seems that any time a grid is required in the transformation results in an error.

Running the file below

<gie-strict>

# ETRS89 -> ETRS89/UTM32
crs_src         EPSG:4258
crs_dst         EPSG:25832

accept          55.0            12.0
expect          691875.6321     6098907.8250


# ETRS89 -> ETRS89+DVR90(2023)
crs_src         EPSG:4937
crs_dst         EPSG:10488
tolerance       1 cm
require_grid    dk_sdfi_dvr90_2023.tif

accept          55.0        12.0        40.0
expect          55.0        12.0        2.39

</gie-strict>

through gie results in an error in the last test case. Output here:

> set PROJ_NETWORK=ON
> gie epsg_verification_dk.gie
-------------------------------------------------------------------------------
Reading file 'epsg_verification_dk.gie'
     -----
     FAILURE in epsg_verification_dk.gie(18):
     expected: 55.0 12.0 2.39
     got:      inf   inf   inf
     deviation:  999999999.999000 mm,  expected:  10.000000 mm
-------------------------------------------------------------------------------
total:  1 tests succeeded,  0 tests skipped,  1 tests FAILED!
-------------------------------------------------------------------------------

> echo 55.0 12.0 40.0 | cs2cs EPSG:4937 EPSG:10488
55.00   12.00 2.39 

Using cs2cs, the transformation goes through as expected, so something seems to be going wrong in gie. Not sure what, but seems to be related to needing the grid.

Below the same file is processed with full debug output. Here it looks like the grid file is picked up but somehow the resulting coordinates end up as a bunch of infs.

I've tested this with both PROJ 9.7.1 and 9.8.0 with similar results.

> set PROJ_DEBUG=3
> gie epsg_verification_dk.gie
-------------------------------------------------------------------------------
Reading file 'epsg_verification_dk.gie'
pj_open_lib(proj.ini): call fopen(C:\Users\b012349\AppData\Local\mambaforge\envs\transformo-dev\Library\share\proj\proj.ini) - succeeded
pj_open_lib(proj.db): call fopen(C:\Users\b012349\AppData\Local\mambaforge\envs\transformo-dev\Library\share\proj\proj.db) - 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 00000247F1D41420
pipeline: Pipeline at [00000247F1D410C0]:    step at [00000247F1D41420] (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 00000247F1DC8160
pipeline: Pipeline at [00000247F1D410C0]:    step at [00000247F1DC8160] (proj=unitconvert) done
pipeline: Pipeline: Building arg list for step no. 2
pipeline: Pipeline: init - proj=utm, 3
pipeline:     zone=32
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 00000247F1DC8660
pipeline: Pipeline at [00000247F1D410C0]:    step at [00000247F1DC8660] (proj=utm) done
pipeline: Pipeline: 3 steps built. Determining i/o characteristics
pj_open_lib(dk_sdfi_dvr90_2023.tif): call fopen(C:\Users\b012349\AppData\Local/proj\dk_sdfi_dvr90_2023.tif) - succeeded
pj_open_lib(dk_sdfi_dvr90_2023.tif): call fopen(C:\Users\b012349\AppData\Local/proj\dk_sdfi_dvr90_2023.tif) - succeeded
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 00000247F1DC8A30
pipeline: Pipeline at [00000247F1DC8D90]:    step at [00000247F1DC8A30] (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 00000247F1DC86D0
pipeline: Pipeline at [00000247F1DC8D90]:    step at [00000247F1DC86D0] (proj=unitconvert) done
pipeline: Pipeline: Building arg list for step no. 2
pipeline: Pipeline: init - inv, 4
pipeline:     proj=vgridshift
pipeline:     grids=dk_sdfi_dvr90_2023.tif
pipeline:     multiplier=1
vgridshift: pj_ellipsoid - final: a=6378137.000 f=1/298.257, errno=0
vgridshift: pj_ellipsoid - final:    ellps=GRS80
pipeline: Pipeline: Step 2 (inv) at 00000247F1DC90F0
pipeline: Pipeline at [00000247F1DC8D90]:    step at [00000247F1DC90F0] (inv) done
pipeline: Pipeline: Building arg list for step no. 3
pipeline: Pipeline: init - proj=unitconvert, 3
pipeline:     xy_in=rad
pipeline:     xy_out=deg
unitconvert: pj_ellipsoid - final: a=6378137.000 f=1/298.257, errno=0
unitconvert: pj_ellipsoid - final:    ellps=GRS80
unitconvert: xy_in unit: Radian
unitconvert: xy_out unit: Degree
pipeline: Pipeline: Step 3 (proj=unitconvert) at 00000247F1DC9B10
pipeline: Pipeline at [00000247F1DC8D90]:    step at [00000247F1DC9B10] (proj=unitconvert) done
pipeline: Pipeline: Building arg list for step no. 4
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 4 (proj=axisswap) at 00000247F1E7F760
pipeline: Pipeline at [00000247F1DC8D90]:    step at [00000247F1E7F760] (proj=axisswap) done
pipeline: Pipeline: 5 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
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:
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 00000247F1E80840
pipeline: Pipeline at [00000247F1E804E0]:    step at [00000247F1E80840] (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 00000247F1E81260
pipeline: Pipeline at [00000247F1E804E0]:    step at [00000247F1E81260] (proj=unitconvert) done
pipeline: Pipeline: Building arg list for step no. 2
pipeline: Pipeline: init - inv, 4
pipeline:     proj=vgridshift
pipeline:     grids=dk_sdfi_dvr90_2023.tif
pipeline:     multiplier=1
vgridshift: pj_ellipsoid - final: a=6378137.000 f=1/298.257, errno=0
vgridshift: pj_ellipsoid - final:    ellps=GRS80
pipeline: Pipeline: Step 2 (inv) at 00000247F1E80BA0
pipeline: Pipeline at [00000247F1E804E0]:    step at [00000247F1E80BA0] (inv) done
pipeline: Pipeline: Building arg list for step no. 3
pipeline: Pipeline: init - proj=unitconvert, 3
pipeline:     xy_in=rad
pipeline:     xy_out=deg
unitconvert: pj_ellipsoid - final: a=6378137.000 f=1/298.257, errno=0
unitconvert: pj_ellipsoid - final:    ellps=GRS80
unitconvert: xy_in unit: Radian
unitconvert: xy_out unit: Degree
pipeline: Pipeline: Step 3 (proj=unitconvert) at 00000247F1E815C0
pipeline: Pipeline at [00000247F1E804E0]:    step at [00000247F1E815C0] (proj=unitconvert) done
pipeline: Pipeline: Building arg list for step no. 4
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 4 (proj=axisswap) at 00000247F1E7FE20
pipeline: Pipeline at [00000247F1E804E0]:    step at [00000247F1E7FE20] (proj=axisswap) done
pipeline: Pipeline: 5 steps built. Determining i/o characteristics
noop: pj_ellipsoid - final: a=6378137.000 f=1/298.257, errno=0
noop: pj_ellipsoid - final:    ellps=GRS80
pj_open_lib(dk_sdfi_dvr90_2023.tif): call fopen(C:\Users\b012349\AppData\Local/proj\dk_sdfi_dvr90_2023.tif) - succeeded
pj_open_lib(dk_sdfi_dvr90_2023.tif): call fopen(C:\Users\b012349\AppData\Local/proj\dk_sdfi_dvr90_2023.tif) - succeeded
     -----
     FAILURE in epsg_verification_dk.gie(18):
     expected: 55.0 12.0 2.39
     got:      inf   inf   inf
     deviation:  999999999.999000 mm,  expected:  10.000000 mm
-------------------------------------------------------------------------------
total:  1 tests succeeded,  0 tests skipped,  1 tests FAILED!
-------------------------------------------------------------------------------

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions