[PROJ] Problems adding geoidmodel tag

Miroslav Pikl pikl.m at czechglobe.cz
Wed Mar 4 00:53:17 PST 2026


Hello,

I also needed transformation between ETRS89UTM elipsoidic height to S-
JTSK / Krovak East North + Baltic last year to transform some airborne
data using GDAL/PDAL + PROJ.

There exists document in czech language describing the official
transformation procedure available from CUZK:
https://cuzk.gov.cz/Zememerictvi/Geodeticke-zaklady-na-uzemi-CR/GNSS/Nova-realizace-systemu-ETRS89-v-CR/Metodika-prevodu-ETRF2000-vs-S-JTSK-var2(101208).aspx

This CUZK website also provides the grid data
https://cuzk.gov.cz/Zememerictvi/Geodeticke-zaklady-na-uzemi-CR/GNSS/etrf00-jtsk-v1012-a-etrf00-jtsk-v1203.aspx

I tried to replicate the procedure in PROJ string comparing against the
points from CUZK network and their online transformation tool.

I ended up with the following section of PDAL pipeline, which was not
exactly the same as CUZK, but good enough for my purpose. Sorry, if you
find it very simple but my knowledge of geodesy and the whole concept
of how PROJ works is very basic. I hope at least the links will be
useful.

Best
Mira


 {
        "type":"filters.reprojection",
        "in_srs":"EPSG:3045",
        "out_srs":"EPSG:4936"
    },
    {
        "type":"filters.projpipeline",
        "coord_op":"+proj=pipeline +step +inv +proj=cart +ellps=GRS80
+step +proj=push +v_3 +step +proj=cart +ellps=GRS80 +step +inv
+proj=helmert +x=572.213 +y=85.334 +z=461.94 +rx=-4.9732 +ry=-1.529
+rz=-5.2484 +s=3.5378 +convention=coordinate_frame +step +inv
+proj=cart +ellps=bessel +step +proj=pop +v_3 +step +proj=mod_krovak
+axis=swu +lat_0=49.5 +lon_0=24.8333333333333 +alpha=30.2881397222222
+k=0.9999 +x_0=5000000 +y_0=5000000 +ellps=bessel
+geoidgrids=cz_cuzk_CR-2005.tif +step +proj=axisswap +order=2,1 +step
+proj=gridshift +inv +grids=table_yx_3_v1710_5513.tif +step
+proj=axisswap +order=-1,-2"
}





On Tue, 2026-03-03 at 17:06 +0100, Javier Jimenez Shaw via PROJ wrote:
> Hi
> 
> I want to do transformation in the Czech republic using the vertical
> CRS with a specific geoid model.
> For that purpose I am using a WKT2 file with the GEOIDMODEL tag to
> "PROJ cz_cuzk_CR-2005.tif" that is a file that we have in
> cdn.proj.org. (actually I have the geoid model registered with a name
> in the database, but this should be equivalent)
> 
> Side note: Czechia and Slovakia both use "Baltic 1957 height" as
> vertical system, but they define different geoid models.
> 
> The problem is that the transformation is different if I set the
> geoid model tag vs without it.
> The content of the file wkt_geoidmodel.txt is just adding that line
> with the geoid model to EPSG:5514+8357
> 
> cat wkt_geoidmodel.txt
> COMPOUNDCRS["S-JTSK / Krovak East North + Baltic 1957 height",
>     PROJCRS["S-JTSK / Krovak East North",
>         BASEGEOGCRS["S-JTSK",
>             DATUM["System of the Unified Trigonometrical Cadastral
> Network",
>                 ELLIPSOID["Bessel 1841",6377397.155,299.1528128,
>                     LENGTHUNIT["metre",1]]],
>             PRIMEM["Greenwich",0,
>                 ANGLEUNIT["degree",0.0174532925199433]],
>             ID["EPSG",4156]],
>         CONVERSION["Krovak East North (Greenwich)",
>             METHOD["Krovak (North Orientated)",
>                 ID["EPSG",1041]],
>             PARAMETER["Latitude of projection centre",49.5,
>                 ANGLEUNIT["degree",0.0174532925199433],
>                 ID["EPSG",8811]],
>             PARAMETER["Longitude of origin",24.8333333333333,
>                 ANGLEUNIT["degree",0.0174532925199433],
>                 ID["EPSG",8833]],
>             PARAMETER["Co-latitude of cone axis",30.2881397527778,
>                 ANGLEUNIT["degree",0.0174532925199433],
>                 ID["EPSG",1036]],
>             PARAMETER["Latitude of pseudo standard parallel",78.5,
>                 ANGLEUNIT["degree",0.0174532925199433],
>                 ID["EPSG",8818]],
>             PARAMETER["Scale factor on pseudo standard
> parallel",0.9999,
>                 SCALEUNIT["unity",1],
>                 ID["EPSG",8819]],
>             PARAMETER["False easting",0,
>                 LENGTHUNIT["metre",1],
>                 ID["EPSG",8806]],
>             PARAMETER["False northing",0,
>                 LENGTHUNIT["metre",1],
>                 ID["EPSG",8807]]],
>         CS[Cartesian,2],
>             AXIS["easting (X)",east,
>                 ORDER[1],
>                 LENGTHUNIT["metre",1]],
>             AXIS["northing (Y)",north,
>                 ORDER[2],
>                 LENGTHUNIT["metre",1]],
>         USAGE[
>             SCOPE["GIS."],
>             AREA["Czechia; Slovakia."],
>             BBOX[47.73,12.09,51.06,22.56]],
>         ID["EPSG",5514]],
>     VERTCRS["Baltic 1957 height",
>         VDATUM["Baltic 1957"],
>         CS[vertical,1],
>             AXIS["gravity-related height (H)",up,
>                 LENGTHUNIT["metre",1]],
>         GEOIDMODEL["PROJ cz_cuzk_CR-2005.tif"],
>         USAGE[
>             SCOPE["Geodesy, engineering survey, topographic
> mapping."],
>             AREA["Czechia; Slovakia."],
>             BBOX[47.73,12.09,51.06,22.56]],
>         ID["EPSG",8357]]]
> ------------------------
> 
> The coordinates converting from ETRS89 are different:
> 
> echo 49 17.8 0 | PROJ_NETWORK=ON cs2cs EPSG:4258 "`cat
> wkt_geoidmodel.txt`" --3d 
> -513716.51 -1191015.26 -43.12
> echo 49 17.8 0 | PROJ_NETWORK=ON cs2cs EPSG:4258  EPSG:5514+8357 --3d
> -513716.63 -1191015.32 -43.12
> 
> The pipelines are "explaining" this problem. Without specifying the
> geoid model, it uses two grid files. cz_cuzk_CR-2005.tif
> and cz_cuzk_table_-y-x_3_v1710.tif (the last one added in 9.7.1) :
> 
> PROJ_NETWORK=ON projinfo EPSG:4258 EPSG:5514+8357 --3d -o proj --bbox
> 17.8,49,17.81,49.01
> Candidate operations found: 16
> -------------------------------------
> Operation No. 1:
> 
> PROJ:ETRS89_3D_TO_S_JTSK_E_N_BALTIC_HEIGHT, ETRS89 to S-JTSK / Krovak
> East North + Baltic 1957 height, 0.05 m, Czechia.
> 
> PROJ string:
> +proj=pipeline
>   +step +proj=axisswap +order=2,1
>   +step +proj=unitconvert +xy_in=deg +xy_out=rad
>   +step +proj=push +v_3 +omit_inv
>   +step +inv +proj=vgridshift +grids=cz_cuzk_CR-2005.tif
> +multiplier=1
>   +step +proj=push +v_3 +omit_fwd
>   +step +proj=push +v_4
>   +step +proj=set +v_4=0 +omit_inv
>   +step +proj=axisswap +order=1,2,4,3 +omit_inv
>   +step +proj=pop +v_3 +omit_inv
>   +step +proj=cart +ellps=GRS80
>   +step +inv +proj=helmert +x=572.213 +y=85.334 +z=461.94 +rx=-4.9732
> +ry=-1.529
>         +rz=-5.2484 +s=3.5378 +convention=coordinate_frame
>   +step +inv +proj=cart +ellps=bessel
>   +step +proj=mod_krovak +lat_0=49.5 +lon_0=24.8333333333333
>         +alpha=30.2881397222222 +k=0.9999 +x_0=5000000 +y_0=5000000
> +ellps=bessel
>   +step +proj=axisswap +order=1,2,4,3 +omit_inv
>   +step +proj=set +v_4=0 +omit_inv
>   +step +proj=pop +v_4
>   +step +proj=pop +v_3 +omit_fwd
>   +step +inv +proj=gridshift +grids=cz_cuzk_table_-y-x_3_v1710.tif
> 
> -------------------------------------
> 
> 
> While the one setting the geoid model is not using the horizontal
> grid cz_cuzk_table_-y-x_3_v1710.tif:
> 
> PROJ_NETWORK=ON projinfo EPSG:4258 "`cat wkt_geoidmodel.txt`" --3d -o
> proj --bbox 17.8,49,17.81,49.01
> Candidate operations found: 8
> -------------------------------------
> Operation No. 1:
> 
> unknown id, Inverse of Transformation from Baltic 1957 height to
> ETRS89 + Inverse of S-JTSK to ETRS89 (3) + Krovak East North
> (Greenwich), 0.53 m, unknown domain of validity
> 
> PROJ string:
> +proj=pipeline
>   +step +proj=axisswap +order=2,1
>   +step +proj=unitconvert +xy_in=deg +xy_out=rad
>   +step +inv +proj=vgridshift +grids=cz_cuzk_CR-2005.tif
> +multiplier=1
>   +step +proj=push +v_3
>   +step +proj=cart +ellps=GRS80
>   +step +inv +proj=molobadekas +x=558.7 +y=68.8 +z=452.2 +rx=-8.025
> +ry=-4.105
>         +rz=-4.295 +s=5.74 +px=3977358.114 +py=1407223.203
> +pz=4765441.589
>         +convention=coordinate_frame
>   +step +inv +proj=cart +ellps=bessel
>   +step +proj=pop +v_3
>   +step +proj=krovak +lat_0=49.5 +lon_0=24.8333333333333
> +alpha=30.2881397527778
>         +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel
> 
> -------------------------------------
> 
> 
> What can I do?
> 
> Thank you.
> _______________________________________________
> PROJ mailing list
> PROJ at lists.osgeo.org
> https://lists.osgeo.org/mailman/listinfo/proj


More information about the PROJ mailing list