<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <p>Javier,</p>
    <p>I believe PROJ behaves as best as it can given what it has in the
      database. The related change record in the postgreSQL dump is:<br>
    </p>
    <p>INSERT INTO epsg_change (change_id, report_date, date_closed,
      reporter, request, tables_affected, codes_affected,
      change_comment, action) VALUES (2023.006, '2023-01-24',
      '2023-03-01', 'Martina Sacher; BKG, for AdV', 'Add Germany DREF91
      2016 realization.', 'Coordinate Reference System; Datum;
      Coordinate Operation', '4647 5649 5650 5651 5652 5653 7837 8395
      9924; 1170; 9925 9926', 'National realization of ETRS89. Extends
      DHHN2016 from onshore to onshore and offshore. Continued in change
      requests 2023.007 and 2023.008.', 'Added datum 1353, CRSs
      10282-10291 and 10293, CTs 10292 and 10294-10295. Deprecated CRSs
      8395 and 9924 and CTs 9925 and 9926. For CRSs 4647 and 5649-5653,
      added supersession trail. For datum 1170, amended origin
      information and changed extent code from 3339 to 1103. For CRS
      7837, amended remarks and changed extent code from 3339 to
      1103.');<br>
    </p>
    <p>Either you locally patch your proj.db to set the deprecated flag
      of EPSG:9925 and EPSG:9926 back to 0.</p>
    <p>Or more future proof, try to coordinate with IOGP and/or BKG/AdV
      so they undeprecate them, possibly with an (in)accuracy greater
      than the 2cm one that probably only applies to ETRS89/DREF91/2016
      to DHHN2016, but not to generic ETRS89 to DHHN2016.</p>
    <p>Even<br>
    </p>
    <div class="moz-cite-prefix">Le 29/04/2023 à 18:32, Javier Jimenez
      Shaw a écrit :<br>
    </div>
    <blockquote type="cite"
cite="mid:CADRrdKvj+fBtb6r53Bpp4BrG7CzW2kvGFTc3n9padk=pwsSabA@mail.gmail.com">
      <meta http-equiv="content-type" content="text/html; charset=UTF-8">
      <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, 
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 - 
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

-------------------------------------

</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 
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 
DHDN to WGS 84 (4) + 3-degree Gauss-Kruger zone 4, unknown accuracy, Germany - onshore - states of Baden-Wurtemberg, Bayern, Berlin, Brandenburg, Bremen, 
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 
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 
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, 
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 
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> 
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


</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)', 
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)'. 
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.
The PRs that update the DB: <a href="https://github.com/OSGeo/PROJ/pull/3643/files" moz-do-not-send="true" class="moz-txt-link-freetext">https://github.com/OSGeo/PROJ/pull/3643/files</a> , <a href="https://github.com/OSGeo/PROJ/pull/3646/files" moz-do-not-send="true" class="moz-txt-link-freetext">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" moz-do-not-send="true">epsg.org</a>, asking to include deprecated entries)

</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?

</span></pre>
              <pre class="gmail-notranslate"><span style="font-family:arial,sans-serif">Thanks.
</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>
      <br>
      <fieldset class="moz-mime-attachment-header"></fieldset>
      <pre class="moz-quote-pre" wrap="">_______________________________________________
PROJ mailing list
<a class="moz-txt-link-abbreviated" href="mailto:PROJ@lists.osgeo.org">PROJ@lists.osgeo.org</a>
<a class="moz-txt-link-freetext" href="https://lists.osgeo.org/mailman/listinfo/proj">https://lists.osgeo.org/mailman/listinfo/proj</a>
</pre>
    </blockquote>
    <pre class="moz-signature" cols="72">-- 
<a class="moz-txt-link-freetext" href="http://www.spatialys.com">http://www.spatialys.com</a>
My software is free, but my time generally not.</pre>
  </body>
</html>