<div dir="ltr"><div>Hi</div><div><br></div><div>When doing transformations from WGS84 (or ETRS89) to "DHDN + DHHN2016 height" in PROJ 9.2.0 (using a German geoid file), it works fine.</div><div>However in master it is only doing the vertical part, producing an error of more than a hundred meters horizontally.</div><div><br></div><div>I was going to open an issue, but then I realized that EPSG was recently updated, and maybe that is the reason.</div><div><br></div><div>I have a "proper" German geoid mode grid file. For this example I just copied the EGM2008 tif file into GCG2016.txt, and put it next to proj.db. The accuracy of the vertical component is not important in this case.</div><div><br></div><div>(Note: BKG is working on releasing the German geoid model free. Let's see when it finally happens and the license they use.)</div><div><br></div><div>In PROJ 9.2.0, the pipelines obtained with projinfo make sense to me, including both, horizontal and vertical operations:<div class="gmail-highlight gmail-highlight-source-shell gmail-notranslate gmail-position-relative gmail-overflow-auto" dir="auto"><pre class="gmail-notranslate">PROJ_NETWORK=ON projinfo -o proj --spatial-test intersects -s EPSG:4979 -t EPSG:31468+7837
Candidate operations found: 10
-------------------------------------
Operation No. 1:

unknown id, Inverse of ETRS89 to WGS 84 (1) + ETRS89 to DHHN2016 height (1) + Inverse of DHDN to ETRS89 (8) + 3-degree Gauss-Kruger zone 4, 1.92 m, Germany - onshore - states of Baden-Wurtemberg, <br>Bayern, Berlin, Brandenburg, Bremen, Hamburg, Hessen, Mecklenburg-Vorpommern, Niedersachsen, Nordrhein-Westfalen, Rheinland-Pfalz, Saarland, Sachsen, Sachsen-Anhalt, Schleswig-Holstein, Thuringen.

PROJ string:
+proj=pipeline
  +step +proj=axisswap +order=2,1
  +step +proj=unitconvert +xy_in=deg +xy_out=rad
  +step +inv +proj=vgridshift +grids=GCG2016.txt +multiplier=1
  +step +inv +proj=hgridshift +grids=de_adv_BETA2007.tif
  +step +proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel
  +step +proj=axisswap +order=2,1

-------------------------------------
Operation No. 2:

unknown id, Inverse of ETRS89 to WGS 84 (1) + ETRS89 to DHHN2016 height (1) + Inverse of DHDN to ETRS89 (2) + 3-degree Gauss-Kruger zone 4, 4.02 m, Germany - states of former West Germany onshore - <br>Baden-Wurtemberg, Bayern, Bremen, Hamburg, Hessen, Niedersachsen, Nordrhein-Westfalen, Rheinland-Pfalz, Saarland, Schleswig-Holstein.

PROJ string:
+proj=pipeline
  +step +proj=axisswap +order=2,1
  +step +proj=unitconvert +xy_in=deg +xy_out=rad
  +step +inv +proj=vgridshift +grids=GCG2016.txt +multiplier=1
  +step +proj=push +v_3
  +step +proj=cart +ellps=GRS80
  +step +inv +proj=helmert +x=598.1 +y=73.7 +z=418.2 +rx=0.202 +ry=0.045
        +rz=-2.455 +s=6.7 +convention=position_vector
  +step +inv +proj=cart +ellps=bessel
  +step +proj=pop +v_3
  +step +proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel
  +step +proj=axisswap +order=2,1

-------------------------------------<br><br></pre>However The pipelines in master do use the vertical or horizontal transformation, but not both:<br><div class="gmail-highlight gmail-highlight-source-shell gmail-notranslate gmail-position-relative gmail-overflow-auto" dir="auto"><pre class="gmail-notranslate">PROJ_NETWORK=ON projinfo -o proj --spatial-test intersects -s EPSG:4979 -t EPSG:31468+7837
Candidate operations found: 5
-------------------------------------
Operation No. 1:

unknown id, Inverse of Ballpark geographic offset from ETRS89/DREF91/2016 to WGS 84 + ETRS89/DREF91/2016 to DHHN2016 height (1) + Inverse of Ballpark geographic offset <br>from DHDN to ETRS89/DREF91/2016 + 3-degree Gauss-Kruger zone 4, unknown accuracy, Germany - onshore and offshore., has ballpark transformation

PROJ string:
+proj=pipeline
  +step +proj=axisswap +order=2,1
  +step +proj=unitconvert +xy_in=deg +xy_out=rad
  +step +inv +proj=vgridshift +grids=GCG2016.txt +multiplier=1
  +step +proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel
  +step +proj=axisswap +order=2,1

-------------------------------------
Operation No. 2:

unknown id, Inverse of Transformation from DHHN2016 height to WGS 84 (ballpark vertical transformation, without ellipsoid height to vertical height correction) + Inverse of <br>DHDN to WGS 84 (4) + 3-degree Gauss-Kruger zone 4, unknown accuracy, Germany - onshore - states of Baden-Wurtemberg, Bayern, Berlin, Brandenburg, Bremen, <br>Hamburg, Hessen, Mecklenburg-Vorpommern, Niedersachsen, Nordrhein-Westfalen, Rheinland-Pfalz, Saarland, Sachsen, Sachsen-Anhalt, Schleswig-Holstein, Thuringen., has ballpark transformation

PROJ string:
+proj=pipeline
  +step +proj=axisswap +order=2,1
  +step +proj=unitconvert +xy_in=deg +xy_out=rad
  +step +inv +proj=hgridshift +grids=de_adv_BETA2007.tif
  +step +proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel
  +step +proj=axisswap +order=2,1

-------------------------------------
Operation No. 3:

unknown id, Inverse of Transformation from DHHN2016 height to WGS 84 (ballpark vertical transformation, without ellipsoid height to vertical height correction) + Inverse of <br>Ballpark geographic offset from DHDN to WGS 84 + 3-degree Gauss-Kruger zone 4, unknown accuracy, World, has ballpark transformation

PROJ string:
+proj=pipeline
  +step +proj=axisswap +order=2,1
  +step +proj=unitconvert +xy_in=deg +xy_out=rad
  +step +proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel
  +step +proj=axisswap +order=2,1

-------------------------------------
Operation No. 4:

unknown id, Inverse of Transformation from DHHN2016 height to WGS 84 (ballpark vertical transformation, without ellipsoid height to vertical height correction) + Inverse of <br>DHDN to WGS 84 (2) + 3-degree Gauss-Kruger zone 4, unknown accuracy, Germany - states of former West Germany onshore - Baden-Wurtemberg, Bayern, Bremen, Hamburg, Hessen, <br>Niedersachsen, Nordrhein-Westfalen, Rheinland-Pfalz, Saarland, Schleswig-Holstein., has ballpark transformation

PROJ string:
+proj=pipeline
  +step +proj=axisswap +order=2,1
  +step +proj=unitconvert +xy_in=deg +xy_out=rad
  +step +proj=push +v_3
  +step +proj=cart +ellps=WGS84
  +step +inv +proj=helmert +x=598.1 +y=73.7 +z=418.2 +rx=0.202 +ry=0.045
        +rz=-2.455 +s=6.7 +convention=position_vector
  +step +inv +proj=cart +ellps=bessel
  +step +proj=pop +v_3
  +step +proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel
  +step +proj=axisswap +order=2,1

-------------------------------------
Operation No. 5:

unknown id, Inverse of Transformation from DHHN2016 height to WGS 84 (ballpark vertical transformation, without ellipsoid height to vertical height correction) + Inverse of <br>DHDN to WGS 84 (3) + 3-degree Gauss-Kruger zone 4, unknown accuracy, Germany - states of former East Germany - Berlin, Brandenburg<span class="gmail-pl-k">;</span> Mecklenburg-Vorpommern<span class="gmail-pl-k">;</span> Sachsen<span class="gmail-pl-k">;</span> <br>Sachsen-Anhalt<span class="gmail-pl-k">;</span> Thuringen., has ballpark transformation

PROJ string:
+proj=pipeline
  +step +proj=axisswap +order=2,1
  +step +proj=unitconvert +xy_in=deg +xy_out=rad
  +step +proj=push +v_3
  +step +proj=cart +ellps=WGS84
  +step +inv +proj=helmert +x=612.4 +y=77 +z=440.2 +rx=-0.054 +ry=0.057
        +rz=-2.797 +s=2.55 +convention=position_vector
  +step +inv +proj=cart +ellps=bessel
  +step +proj=pop +v_3
  +step +proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel
  +step +proj=axisswap +order=2,1<br><br><br></pre><pre class="gmail-notranslate"><span style="font-family:arial,sans-serif">I think that the reason is that they deprecated the transformations EPSG:9925 'ETRS89 to DHHN2016 height (1)' and EPSG:9926 'ETRS89 to ETRS89 + DHHN2016 height (1)', <br>creating instead EPSG:10294 'ETRS89/DREF91/2016 to DHHN2016 height (1)' and EPSG:10295 'ETRS89/DREF91/2016 to </span><span style="font-family:arial,sans-serif">ETRS89/DREF91/2016</span><span style="font-family:arial,sans-serif"> + DHHN2016 height (1)'. <br>I have not found any transformation from WGS84 or ETRS89 to </span><span style="font-family:arial,sans-serif">ETRS89/DREF91/2016, only 'ETRS89/DREF91/2016 to ETRF2000 (1)', that is not very useful I guess.<br>The PRs that update the DB: <a href="https://github.com/OSGeo/PROJ/pull/3643/files">https://github.com/OSGeo/PROJ/pull/3643/files</a> , <a href="https://github.com/OSGeo/PROJ/pull/3646/files">https://github.com/OSGeo/PROJ/pull/3646/files</a></span></pre><pre class="gmail-notranslate"><span style="font-family:arial,sans-serif">(I don't know why I cannot find the transformation EPSG:9925 in <a href="http://epsg.org">epsg.org</a>, asking to include deprecated entries)<br><br></span></pre><pre class="gmail-notranslate"><span style="font-family:arial,sans-serif">What can I do to perform the transformation from EPSG:4979 to EPSG:31468+7837 as in PROJ 9.2.0?<br><br></span></pre><pre class="gmail-notranslate"><span style="font-family:arial,sans-serif">Thanks.<br></span></pre></div></div></div><div><div><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div></div><div>.___ ._ ..._ .. . ._.  .___ .. __ . _. . __..  ... .... ._ .__</div></div></div></div></div></div>