<!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>