<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <p>Nicolas,</p>
    <p>I believe the Helmert transformation is used when using IGNF
      codes, because the IGNF database has only recorded the use of the
      ntf_r93 grid for NTF to RGF93, but not for NTF to ETRS89 (by the
      way, just reiterating that IGN is more than welcome to take over
      on maintenance & updates of the IGNF part of the PROJ
      database). And when transforming between 2 IGNF codes, PROJ by
      default will only consider transformations in the IGNF domain. But
      if you use EPSG codes, then ntf_r93 is available to transforme
      between NTF and ETRS89.</p>
    <p>To get a vertical transformation, you also need to use 3D CRS.<br>
    </p>
    <p>For example<br>
    </p>
    <p>projinfo -s "NTF geographiques Paris (gr) + NGF-IGN69 height" -t
      IGNF:ETRS89LCC --3d --spatial-test intersects <br>
    </p>
    <p>reports the following pipeline:<br>
    </p>
    <p>unknown id, axis order change (2D) + NTF (Paris) to NTF (1) + NTF
      to RGF93 v1 (1) + Inverse of RGF93 v1 to NGF-IGN69 height (1) +
      RGF93 v1 to ETRS89 (1) + axis order change (geographic3D
      horizontal) + ETRS89 LAMBERT CONFORMAL CONIC, 1.6 m, France -
      mainland onshore., at least one grid missing<br>
      <br>
      PROJ string:<br>
      +proj=pipeline<br>
        +step +proj=unitconvert +xy_in=grad +xy_out=rad<br>
        +step +inv +proj=longlat +ellps=clrk80ign +pm=paris<br>
        +step +proj=push +v_3<br>
        +step +proj=cart +ellps=clrk80ign<br>
        +step +proj=xyzgridshift +grids=fr_ign_gr3df97a.tif
      +grid_ref=output_crs<br>
              +ellps=GRS80<br>
        +step +inv +proj=cart +ellps=GRS80<br>
        +step +proj=pop +v_3<br>
        +step +proj=vgridshift +grids=fr_ign_RAF18.tif +multiplier=1<br>
        +step +proj=lcc +lat_0=52 +lon_0=10 +lat_1=35 +lat_2=65
      +x_0=4000000<br>
              +y_0=2800000 +ellps=GRS80<br>
    </p>
    <p><br>
    </p>
    <p>Here, as there's a mix of objects from different authorities
      (IGNF and EPSG), then EPSG transformations are considered, hence
      you get the gr3df97a grid.<br>
    </p>
    <p>$ echo 0  56.000000 0  | PROJ_NETWORK=ON bin/cs2cs -d 3  "NTF
      geographiques Paris (gr) + NGF-IGN69 height" IGNF:ETRS89LCC --3d <br>
      3474789.997    2655359.291 43.644</p>
    <p>which is the application of the above pipeline:<br>
    </p>
    <p>$ echo 0  56.000000 0  | PROJ_NETWORK=ON bin/cct -d 3
      +proj=pipeline +step +proj=unitconvert +xy_in=grad +xy_out=rad
      +step +inv +proj=longlat +ellps=clrk80ign +pm=paris +step
      +proj=push +v_3 +step +proj=cart +ellps=clrk80ign +step
      +proj=xyzgridshift +grids=fr_ign_gr3df97a.tif +grid_ref=output_crs
      +ellps=GRS80 +step +inv +proj=cart +ellps=GRS80 +step +proj=pop
      +v_3 +step +proj=vgridshift +grids=fr_ign_RAF18.tif +multiplier=1
      +step +proj=lcc +lat_0=52 +lon_0=10 +lat_1=35 +lat_2=65
      +x_0=4000000 +y_0=2800000 +ellps=GRS80<br>
      <br>
    </p>
    <p>If you want to get exactly the below pipeline, you'll have to
      tweak proj.db to create a compound CRS for "NTF geographiques
      Paris (gr) + NGF-IGN69 height", and then create a custom record in
      other_transformation for the transformation between this compound
      CRS and (a 3D projected CRS derived from) IGNF:ETRS89LCC. Cf
      data/sql/other_transformation_custom.sql for potential inspiration</p>
    <p>Even<br>
    </p>
    <p><br>
    </p>
    <div class="moz-cite-prefix">Le 15/02/2024 à 19:46, Nicolas
      Bellaiche via PROJ a écrit :<br>
    </div>
    <blockquote type="cite"
      cite="mid:613751832.7612339.1708022783849.JavaMail.zimbra@ign.fr">
      <meta http-equiv="content-type" content="text/html; charset=UTF-8">
      <div
style="font-family: arial, helvetica, sans-serif; font-size: 12pt; color: #000000">
        <div>
          <style type="text/css" scoped="">p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 15.0px Menlo; color: #000000; color: rgba(0, 0, 0, 0.85); background-color: #ffffff}span.Apple-tab-span {white-space:pre}</style>
          <style type="text/css" scoped="">p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000}span.s1 {font-variant-ligatures: no-common-ligatures}</style></div>
        <div>
          <style type="text/css" scoped="">p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000}span.s1 {font-variant-ligatures: no-common-ligatures}span.Apple-tab-span {white-space:pre}</style>
          <style type="text/css" scoped="">p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000}span.s1 {font-variant-ligatures: no-common-ligatures}</style></div>
        <div>
          <style type="text/css" scoped="">p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000}span.s1 {font-variant-ligatures: no-common-ligatures}</style></div>
        <div>
          <style type="text/css" scoped="">p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 15.0px Menlo; color: #5d6c79; background-color: #ffffff}</style></div>
        <div>Hi there,</div>
        <div><br data-mce-bogus="1">
        </div>
        <div>I try to make a conversion using shiftgrids from IGNF: NTFP
          to IGNF:ETRS89LCC. By default, it seems that it uses the
          helmert approximation between the 2 crs and i cannot figure
          out how to use the grid fr_ign_ntf_r93.</div>
        <div><br data-mce-bogus="1">
        </div>
        <div>So far i've found how to create a pipeline that works with
          cct, but i'd like to have a code that represents the crs and
          be able to go to different destination crs with the cs2cs
          application. Any idea?</div>
        <div><br data-mce-bogus="1">
        </div>
        <div><span
style="color: #5d6c79; font-family: Menlo; font-size: 15px; font-style: normal; font-variant-ligatures: no-common-ligatures; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; background-color: #ffffff; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial; display: inline !important; float: none;"
data-mce-style="color: #5d6c79; font-family: Menlo; font-size: 15px; font-style: normal; font-variant-ligatures: no-common-ligatures; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; background-color: #ffffff; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial; display: inline !important; float: none;">(helmert
            approx + no geoid with the standard codes)</span></div>
        <div>
          <p class="p1" style="margin: 0px;"
            data-mce-style="margin: 0px;"><span class="s1">echo 0 56<span
                class="Apple-converted-space">  </span>0 | ./cs2cs<span
                class="Apple-converted-space">  </span>+ from IGNF:NTFP<span
                class="Apple-converted-space">  </span>+to
              IGNF:ETRS89LCC </span></p>
          <p class="p1" style="margin: 0px;"
            data-mce-style="margin: 0px;"><span class="s1">result  : </span><span
              class="s1">3474788.21<span class="Apple-tab-span"> </span>2655358.23
              0.00</span></p>
          <p class="p1" style="margin: 0px;"
            data-mce-style="margin: 0px;"><span class="s1"></span><br>
          </p>
          <p class="p1" style="margin: 0px;"
            data-mce-style="margin: 0px;"><span class="s1">(correct
              pipeline)</span></p>
          <p class="p1" style="margin: 0px;"
            data-mce-style="margin: 0px;"><span class="s1">echo 0 
              56.000000 0  | PROJ_DEBUG=3  ./cct    +proj=pipeline +step
              +proj=unitconvert +xy_in=grad +xy_out=rad +step +inv
              +proj=longlat +ellps=clrk80ign +pm=paris  +step
              +proj=hgridshift +grids=fr_ign_ntf_r93.tif +step +inv 
              +proj=vgridshift  +grids=RAF09.gtx  +step +proj=lcc
              +lat_0=52 +lon_0=10 +lat_1=35 +lat_2=65 +x_0=4000000
              +y_0=2800000 +ellps=GRS80</span></p>
          <p class="p1" style="margin: 0px;"
            data-mce-style="margin: 0px;"><span class="s1"></span><br>
          </p>
          <p class="p1" style="margin: 0px;"
            data-mce-style="margin: 0px;"><span class="s1"><span
                class="Apple-converted-space">result : </span>3474789.9972
              <span class="Apple-converted-space">  </span>2655359.2908
              <span class="Apple-converted-space">      </span>43.6421
              <span class="Apple-converted-space">          </span>inf</span></p>
          <p class="p1" style="margin: 0px;"
            data-mce-style="margin: 0px;"><span class="s1"></span><br>
          </p>
          <p class="p1" style="margin: 0px;"
            data-mce-style="margin: 0px;"><span class="s1">reference
              from THE official IGN/SGN dataset:</span></p>
          <p class="p1" style="margin: 0px;"
            data-mce-style="margin: 0px;">3474789.997<span
            class="Apple-tab-span"> </span>2655359.291<span
            class="Apple-tab-span"> </span>43.642</p>
          <p class="p1" style="margin: 0px;"
            data-mce-style="margin: 0px;"><br>
          </p>
          <p class="p1" style="margin: 0px;"
            data-mce-style="margin: 0px;"><br data-mce-bogus="1">
          </p>
          <p class="p1" style="margin: 0px;"
            data-mce-style="margin: 0px;"><font
              face="arial, helvetica, sans-serif" color="#000000"><span
                style="font-size: 16px;">Thanks a lot for your help,</span></font></p>
          <p class="p1" style="margin: 0px;"
            data-mce-style="margin: 0px;"><br data-mce-bogus="1">
          </p>
          <p class="p1" style="margin: 0px;"
            data-mce-style="margin: 0px;"><font
              face="arial, helvetica, sans-serif" color="#000000"><span
                style="font-size: 16px;">Nicolas Bellaiche</span></font></p>
          <div style="clear: both;" data-mce-style="clear: both;"><br>
          </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>