<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@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;}
/* Style Definitions */
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;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:70.85pt 70.85pt 70.85pt 70.85pt;}
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]-->
</head>
<body lang="NL" link="blue" vlink="purple" style="word-wrap:break-word">
<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. 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/">https://www.epncb.oma.be/_productsservices/coord_trans/</a>) or a deformation grid model.<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 <proj-bounces@lists.osgeo.org>
<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 <PROJ@lists.osgeo.org><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">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>
[https://www.kadaster.nl/algemene-leveringsvoorwaarden].<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>
[https://www.kadaster.com/general-terms-and-conditions]. <br>
</font>
</body>
</html>