<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <p><br>
    </p>
    <div class="moz-cite-prefix">Le 24/03/2026 à 14:09, Lesparre, Jochem
      via PROJ a écrit :<br>
    </div>
    <blockquote type="cite"
cite="mid:DU2P192MB2235B9B54D2CA267C23DC979EF48A@DU2P192MB2235.EURP192.PROD.OUTLOOK.COM">
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <meta name="Generator"
        content="Microsoft Word 15 (filtered medium)">
      <style>@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}@font-face
        {font-family:Aptos;}p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        font-size:12.0pt;
        font-family:"Aptos",sans-serif;}a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}.MsoChpDefault
        {mso-style-type:export-only;
        mso-fareast-language:EN-US;}div.WordSection1
        {page:WordSection1;}</style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
      <div class="WordSection1">
        <p class="MsoNormal"><span style="mso-fareast-language:EN-US">Hi<o:p></o:p></span></p>
        <p class="MsoNormal"><span style="mso-fareast-language:EN-US"><o:p> </o:p></span></p>
        <p class="MsoNormal"><span lang="EN-GB"
            style="mso-fareast-language:EN-US">Unfortunately, no one
            reacted to this question. I would be interested in an answer
            too, because I don’t understand the cs2cs behaviour either.</span></p>
      </div>
    </blockquote>
    <p>Not much to answer but filing tickets for detected
      inconsistencies and express the wished behavior</p>
    <blockquote type="cite"
cite="mid:DU2P192MB2235B9B54D2CA267C23DC979EF48A@DU2P192MB2235.EURP192.PROD.OUTLOOK.COM">
      <div class="WordSection1">
        <p class="MsoNormal"><span lang="EN-GB"
            style="mso-fareast-language:EN-US"> Even worse: I don’t
            understand how there can be a different epoch for source and
            target CRS without specifying a velocity vector for the
            point of interest (like
            <a
href="https://www.epncb.oma.be/_productsservices/coord_trans/"
              moz-do-not-send="true" class="moz-txt-link-freetext">https://www.epncb.oma.be/_productsservices/coord_trans/</a>)
            or a deformation grid model.</span></p>
      </div>
    </blockquote>
    <p>PROJ general philosophy when inferring transformation pipelines
      is to be lax, and do its best, and ignore stuff that it can't make
      sense, unless instructed otherwise (also we'd probably need a flag
      to make it error out when time info not being used). </p>
    <p>For CRS like Canadian NAD83(CSRS), doing NAD83(CSRS v7)@XXXX to
      NAD83(CSRS v7)@YYYY will definitely use their velocity model. PROJ
      has no concept of velocity vector per input point.</p>
    <p>Even</p>
    <blockquote type="cite"
cite="mid:DU2P192MB2235B9B54D2CA267C23DC979EF48A@DU2P192MB2235.EURP192.PROD.OUTLOOK.COM">
      <div class="WordSection1">
        <p class="MsoNormal"><span lang="EN-GB"
            style="mso-fareast-language:EN-US"><o:p></o:p></span></p>
        <p class="MsoNormal"><span lang="EN-GB"
            style="mso-fareast-language:EN-US"><o:p> </o:p></span></p>
        <p class="MsoNormal"><span lang="EN-GB"
            style="mso-fareast-language:EN-US">Jochem<o:p></o:p></span></p>
        <p class="MsoNormal"><span lang="EN-GB"
            style="mso-fareast-language:EN-US"><o:p> </o:p></span></p>
        <p class="MsoNormal"><span lang="EN-GB"
            style="mso-fareast-language:EN-US"><o:p> </o:p></span></p>
        <div
style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0cm 0cm 0cm">
          <p class="MsoNormal"><b><span lang="EN-US"
style="font-size:11.0pt;font-family:"Calibri",sans-serif">From:</span></b><span
              lang="EN-US"
style="font-size:11.0pt;font-family:"Calibri",sans-serif">
              PROJ <a class="moz-txt-link-rfc2396E" href="mailto:proj-bounces@lists.osgeo.org"><proj-bounces@lists.osgeo.org></a>
              <b>On Behalf Of </b>Javier Jimenez Shaw via PROJ<br>
              <b>Sent:</b> zaterdag 14 maart 2026 23:53<br>
              <b>To:</b> proj <a class="moz-txt-link-rfc2396E" href="mailto:PROJ@lists.osgeo.org"><PROJ@lists.osgeo.org></a><br>
              <b>Subject:</b> [PROJ] transformations with epoch<o:p></o:p></span></p>
        </div>
        <p class="MsoNormal"><o:p> </o:p></p>
        <div>
          <div>
            <p class="MsoNormal">Hi<o:p></o:p></p>
          </div>
          <div>
            <p class="MsoNormal"><o:p> </o:p></p>
          </div>
          <div>
            <p class="MsoNormal">I have been playing with epochs today.
              Maybe I am understanding something wrongly, but the
              outputs are very strange.<o:p></o:p></p>
          </div>
          <div>
            <p class="MsoNormal"><o:p> </o:p></p>
          </div>
          <div>
            <p class="MsoNormal">My deductions are:<o:p></o:p></p>
          </div>
          <div>
            <p class="MsoNormal">- the 4th dimension (v_4) from the
              input is just copied into the output of cs2cs.
              Independently of epoch flags.<o:p></o:p></p>
          </div>
          <div>
            <p class="MsoNormal">- if --s_epoch or --t_epoch are set,
              the input v_4 is ignored (but still printed in the output)<o:p></o:p></p>
          </div>
          <div>
            <p class="MsoNormal">- if only --s_epoch or --t_epoch is
              set, v_4 is set before and after the transformation to
              that value<o:p></o:p></p>
          </div>
          <div>
            <p class="MsoNormal">- if both are set, v_4 is set to
              s_epoch before transforming, and to t_epoch after. So in
              this case t_epoch only works to tag the output time,...
              but it is not displayed in cs2cs (it is in the C function)<o:p></o:p></p>
          </div>
          <div>
            <p class="MsoNormal"><o:p> </o:p></p>
          </div>
          <div>
            <p class="MsoNormal">Is that correct? Why is t_epoch
              overwriting the input time/epoch? Why is s_epoch setting
              the output time/epoch?<o:p></o:p></p>
          </div>
          <div>
            <p class="MsoNormal">In addition, cs2cs is apparently not
              printing the modified output epoch. This is not what C
              function does.<o:p></o:p></p>
          </div>
          <div>
            <p class="MsoNormal"><o:p> </o:p></p>
          </div>
          <div>
            <p class="MsoNormal">Here are some transformations using the
              input epoch in the coordinates and the --s_epoch and
              --t_epoch<o:p></o:p></p>
          </div>
          <div>
            <p class="MsoNormal"><o:p> </o:p></p>
          </div>
          <div>
            <p class="MsoNormal"><span
                style="font-family:"Courier New"">echo 40 0 0
                | ./cs2cs ITRF90 ITRF2014  -d 9<br>
                40.000000788 -0.000000207 0.009684166</span><o:p></o:p></p>
          </div>
          <div>
            <p class="MsoNormal"><o:p> </o:p></p>
          </div>
          <div>
            <p class="MsoNormal"><span
                style="font-family:"Courier New"">echo 40 0 0
                foo bar | ./cs2cs ITRF90 ITRF2014  -d 9
                <br>
                40.000000788 -0.000000207 0.009684166 foo bar</span><o:p></o:p></p>
          </div>
          <div>
            <p class="MsoNormal"><o:p> </o:p></p>
          </div>
          <div>
            <p class="MsoNormal" style="margin-bottom:12.0pt"><span
                style="font-family:"Courier New"">echo 40 0 0
                2010 | ./cs2cs ITRF90 ITRF2014  -d 9<br>
                40.000000788 -0.000000207 0.009684166 2010</span><o:p></o:p></p>
          </div>
          <div>
            <p class="MsoNormal" style="margin-bottom:12.0pt"><span
                style="font-family:"Courier New"">echo 40 0 0
                1980 | ./cs2cs ITRF90 ITRF2014  -d 9<br>
                40.000000087 -0.000000216 -0.028724159 1980</span><o:p></o:p></p>
          </div>
          <div>
            <p class="MsoNormal" style="margin-bottom:12.0pt"><span
                style="font-family:"Courier New"">echo 40 0 0
                1980 | ./cs2cs ITRF90 ITRF2014  -d 9 --s_epoch 2000<br>
                40.000000555 -0.000000210 -0.003118609 1980</span><o:p></o:p></p>
          </div>
          <div>
            <p class="MsoNormal" style="margin-bottom:12.0pt"><span
                style="font-family:"Courier New"">echo 40 0 0
                1980 | ./cs2cs ITRF90 ITRF2014  -d 9 --s_epoch 2010<br>
                40.000000788 -0.000000207 0.009684166 1980</span><o:p></o:p></p>
          </div>
          <div>
            <p class="MsoNormal" style="margin-bottom:12.0pt"><span
                style="font-family:"Courier New"">echo 40 0 0
                1980 | ./cs2cs ITRF90 ITRF2014  -d 9 --s_epoch 2010
                --t_epoch 2030<br>
                40.000000788 -0.000000207 0.009684166 1980</span><o:p></o:p></p>
          </div>
          <div>
            <p class="MsoNormal"><span
                style="font-family:"Courier New"">echo 40 0 0
                1980 | ./cs2cs ITRF90 ITRF2014  -d 9 --s_epoch 2000
                --t_epoch 2030<br>
                40.000000555 -0.000000210 -0.003118609 1980</span><o:p></o:p></p>
          </div>
          <div>
            <p class="MsoNormal"><o:p> </o:p></p>
          </div>
          <div>
            <p class="MsoNormal" style="margin-bottom:12.0pt"><span
                style="font-family:"Courier New"">echo 40 0 0
                1980 | ./cs2cs ITRF90 ITRF2014  -d 9 --t_epoch 2010<br>
                40.000000788 -0.000000207 0.009684166 1980</span><o:p></o:p></p>
          </div>
          <div>
            <p class="MsoNormal"><span
                style="font-family:"Courier New"">echo 40 0 0
                1980 | ./cs2cs ITRF90 ITRF2014  -d 9 --t_epoch 2030<br>
                40.000001256 -0.000000201 0.035289716 1980</span><o:p></o:p></p>
          </div>
          <div>
            <p class="MsoNormal"><o:p> </o:p></p>
          </div>
          <div>
            <p class="MsoNormal">The pipelines for some cases are<o:p></o:p></p>
          </div>
          <div>
            <p class="MsoNormal"><o:p> </o:p></p>
          </div>
          <div>
            <p class="MsoNormal">without setting --s_epoch or --t_epoch<o:p></o:p></p>
          </div>
          <div>
            <p class="MsoNormal"><span
                style="font-family:"Courier New"">+proj=pipeline<br>
                  +step +proj=axisswap +order=2,1<br>
                  +step +proj=unitconvert +xy_in=deg +z_in=m +xy_out=rad
                +z_out=m<br>
                  +step +proj=cart +ellps=GRS80<br>
                  +step +proj=helmert +x=-0.0254 +y=-0.0115 +z=0.0928
                +rx=0 +ry=0 +rz=-0.00026<br>
                        +s=-0.00479 +dx=-0.0001 +dy=0.0005 +dz=0.0033
                +drx=0 +dry=0 +drz=-2e-05<br>
                        +ds=-0.00012 +t_epoch=2010
                +convention=position_vector<br>
                  +step +inv +proj=cart +ellps=GRS80<br>
                  +step +proj=unitconvert +xy_in=rad +z_in=m +xy_out=deg
                +z_out=m<br>
                  +step +proj=axisswap +order=2,1</span><o:p></o:p></p>
          </div>
          <div>
            <p class="MsoNormal"><o:p> </o:p></p>
          </div>
          <div>
            <p class="MsoNormal">setting --s_epoch to 2000<o:p></o:p></p>
          </div>
          <div>
            <p class="MsoNormal"><span
                style="font-family:"Courier New"">+proj=pipeline<br>
                  +step +proj=set +v_4=2000<br>
                  +step +proj=axisswap +order=2,1<br>
                  +step +proj=unitconvert +xy_in=deg +z_in=m +xy_out=rad
                +z_out=m<br>
                  +step +proj=cart +ellps=GRS80<br>
                  +step +proj=helmert +x=-0.0254 +y=-0.0115 +z=0.0928
                +rx=0 +ry=0 +rz=-0.00026<br>
                        +s=-0.00479 +dx=-0.0001 +dy=0.0005 +dz=0.0033
                +drx=0 +dry=0 +drz=-2e-05<br>
                        +ds=-0.00012 +t_epoch=2010
                +convention=position_vector<br>
                  +step +inv +proj=cart +ellps=GRS80<br>
                  +step +proj=unitconvert +xy_in=rad +z_in=m +xy_out=deg
                +z_out=m<br>
                  +step +proj=axisswap +order=2,1<br>
                  +step +proj=set +v_4=2000</span><o:p></o:p></p>
          </div>
          <div>
            <p class="MsoNormal"><o:p> </o:p></p>
          </div>
          <div>
            <p class="MsoNormal">setting --t_epoch to 2030<o:p></o:p></p>
          </div>
          <div>
            <p class="MsoNormal"><span
                style="font-family:"Courier New"">+proj=pipeline<br>
                  +step +proj=set +v_4=2030<br>
                  +step +proj=axisswap +order=2,1<br>
                  +step +proj=unitconvert +xy_in=deg +z_in=m +xy_out=rad
                +z_out=m<br>
                  +step +proj=cart +ellps=GRS80<br>
                  +step +proj=helmert +x=-0.0254 +y=-0.0115 +z=0.0928
                +rx=0 +ry=0 +rz=-0.00026<br>
                        +s=-0.00479 +dx=-0.0001 +dy=0.0005 +dz=0.0033
                +drx=0 +dry=0 +drz=-2e-05<br>
                        +ds=-0.00012 +t_epoch=2010
                +convention=position_vector<br>
                  +step +inv +proj=cart +ellps=GRS80<br>
                  +step +proj=unitconvert +xy_in=rad +z_in=m +xy_out=deg
                +z_out=m<br>
                  +step +proj=axisswap +order=2,1<br>
                  +step +proj=set +v_4=2030</span><o:p></o:p></p>
          </div>
          <div>
            <p class="MsoNormal"><o:p> </o:p></p>
          </div>
          <div>
            <p class="MsoNormal">setting --s_epoch to 2000 and --t_epoch
              to 2030<o:p></o:p></p>
          </div>
          <div>
            <p class="MsoNormal"><span
                style="font-family:"Courier New"">+proj=pipeline<br>
                  +step +proj=set +v_4=2000<br>
                  +step +proj=axisswap +order=2,1<br>
                  +step +proj=unitconvert +xy_in=deg +z_in=m +xy_out=rad
                +z_out=m<br>
                  +step +proj=cart +ellps=GRS80<br>
                  +step +proj=helmert +x=-0.0254 +y=-0.0115 +z=0.0928
                +rx=0 +ry=0 +rz=-0.00026<br>
                        +s=-0.00479 +dx=-0.0001 +dy=0.0005 +dz=0.0033
                +drx=0 +dry=0 +drz=-2e-05<br>
                        +ds=-0.00012 +t_epoch=2010
                +convention=position_vector<br>
                  +step +inv +proj=cart +ellps=GRS80<br>
                  +step +proj=unitconvert +xy_in=rad +z_in=m +xy_out=deg
                +z_out=m<br>
                  +step +proj=axisswap +order=2,1<br>
                  +step +proj=set +v_4=2030</span><o:p></o:p></p>
          </div>
          <div>
            <p class="MsoNormal"><o:p> </o:p></p>
          </div>
          <div>
            <p class="MsoNormal"><span
                style="font-family:"Arial",sans-serif">PS </span><a
href="https://jjimenezshaw.github.io/wasm-proj/transform.html"
                moz-do-not-send="true" class="moz-txt-link-freetext">https://jjimenezshaw.github.io/wasm-proj/transform.html</a>
              is in this case probably showing better the output of the
              C function.<o:p></o:p></p>
          </div>
        </div>
      </div>
      <br>
      <br>
      <font size="2">Disclaimer:<br>
        De inhoud van deze e-mail is vertrouwelijk en uitsluitend
        bestemd voor de geadresseerde(n).<br>
        Gebruik, openbaarmaking, vermenigvuldiging, verspreiding en/of
        verstrekking van deze informatie aan derden is niet toegestaan.<br>
        Op al onze producten en diensten zijn onze algemene
        leveringsvoorwaarden van toepassing<br>
        [<a class="moz-txt-link-freetext" href="https://www.kadaster.nl/algemene-leveringsvoorwaarden">https://www.kadaster.nl/algemene-leveringsvoorwaarden</a>].<br>
        <br>
        Disclaimer:<br>
        This email and any files transmitted with it are confidential
        and intended solely for the use of the individual or entity to
        whom they are addressed.<br>
        If you are not the intended recipient, you are notified that
        disclosing, copying, distributing or taking any action in
        reliance on the contents of this information is strictly
        prohibited.<br>
        Our general terms and conditions of delivery apply to all our
        products and services<br>
        [<a class="moz-txt-link-freetext" href="https://www.kadaster.com/general-terms-and-conditions">https://www.kadaster.com/general-terms-and-conditions</a>]. <br>
      </font>
      <br>
      <fieldset class="moz-mime-attachment-header"></fieldset>
      <pre wrap="" class="moz-quote-pre">_______________________________________________
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>