<div dir="ltr">If your input data does not need time stamps, you may be able to work around this using +omit_fwd/+omit_inv selectors and a set of axisswap order=1,2,4,3 steps? </div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Den tors. 14. dec. 2023 kl. 14.13 skrev Lesparre, Jochem via PROJ <<a href="mailto:proj@lists.osgeo.org">proj@lists.osgeo.org</a>>:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div class="msg-3696964243730219408">





<div lang="NL" style="overflow-wrap: break-word;">
<div class="m_-3696964243730219408WordSection1">
<p class="MsoNormal"><span lang="EN-GB" style="font-size:10pt">Hi list members,<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:10pt"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:10pt">The PROJ operations
</span><span lang="EN-GB" style="font-size:10pt;font-family:Consolas">+proj=push</span><span lang="EN-GB" style="font-size:10pt"> and
</span><span lang="EN-GB" style="font-size:10pt;font-family:Consolas">+proj=pop</span><span lang="EN-GB" style="font-size:10pt"> use "last in, first out" (LIFO) to store and retrieve coordinate values in a stack. It seems that I need "first in, first out"
 (FIFO) or other new functionality in PROJ.<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:10pt"><u></u> <u></u></span></p>
<p class="MsoNormal"><i><u><span lang="EN-GB" style="font-size:10pt">Problem<u></u><u></u></span></u></i></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:10pt">The Dutch Caribbean islands use TM-projections based on old datums. We have an exact Helmert transformation per island that transforms the horizontal coordinates to an ITRS realisation at a specific
 epoch. For some islands we need a geoid (EGM2008 sampled at 45” is the best we have at the moment) for the height transformation from local levelling heights to ITRS. That works fine for a forward transformation with this PROJ pipeline:
<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:10pt"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:9pt;font-family:Consolas">cct +proj=pipeline
<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:9pt;font-family:Consolas">+step +proj=push +v_3
<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:9pt;font-family:Consolas">+step +proj=tmerc +inv +lat_0=12.180658675 +lon_0=-68.251802281 +k_0=1 +x_0=23209.5600 +y_0=21423.9900 +ellps=intl
<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:9pt;font-family:Consolas">+step +proj=cart +ellps=intl
<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:9pt;font-family:Consolas">+step +proj=helmert +x=-366.1939 +y=-115.0688 +z=-776.7039 +rx=20.963080 +ry=16.462749 +rz=-14.276379 +s=-12.80900 +convention=coordinate_frame +exact
<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:9pt;font-family:Consolas">+step +proj=cart +inv +ellps=GRS80
<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:9pt;font-family:Consolas">+step +proj=pop +v_3
<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:9pt;font-family:Consolas">+step +proj=vgridshift +grids=egm2008_0_45.tif +inv
<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:10pt"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:10pt">However, I do not get exactly the same results for the inverse transformation with
</span><span lang="EN-GB" style="font-size:10pt;font-family:Consolas">-I</span><span lang="EN-GB" style="font-size:10pt">, since I apply the geoid on the ITRS coordinates, but then the physical height is used for the Helmert transformation instead of the
 correct ellipsoidal height. This gives a small error in the horizontal coordinates in this case, but can easily reach more than 50 metres for other CRSs.<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:10pt"><u></u> <u></u></span></p>
<p class="MsoNormal"><i><u><span lang="EN-GB" style="font-size:10pt">Solution<u></u><u></u></span></u></i></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:10pt">The most elegant solution seems to me to use FIFO for operations +proj=push and +proj=pop, so I can use this pipeline:<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:10pt"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:9pt;font-family:Consolas">cct +proj=pipeline
<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:9pt;font-family:Consolas">+step +proj=push +v_3
<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:9pt;font-family:Consolas">+step +proj=tmerc +inv +lat_0=12.180658675 +lon_0=-68.251802281 +k_0=1 +x_0=23209.5600 +y_0=21423.9900 +ellps=intl
<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:9pt;font-family:Consolas">+step +proj=cart +ellps=intl
<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:9pt;font-family:Consolas">+step +proj=helmert +x=-366.1939 +y=-115.0688 +z=-776.7039 +rx=20.963080 +ry=16.462749 +rz=-14.276379 +s=-12.80900 +convention=coordinate_frame +exact
<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:9pt;font-family:Consolas">+step +proj=cart +inv +ellps=GRS80
<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:9pt;font-family:Consolas">+step +proj=push +v_3<u></u><u></u></span></p>
<p class="MsoNormal"><b><span lang="EN-GB" style="font-size:9pt;font-family:Consolas">+step +proj=pop +v_3
<u></u><u></u></span></b></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:9pt;font-family:Consolas">+step +proj=vgridshift +grids=egm2008_0_45.tif +inv
<u></u><u></u></span></p>
<p class="MsoNormal"><b><span lang="EN-GB" style="font-size:9pt;font-family:Consolas">+step +proj=pop +v_3 +omit_fwd
<u></u><u></u></span></b></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:10pt"><u></u> <u></u></span></p>
<p class="MsoNormal"><i><u><span lang="EN-GB" style="font-size:10pt">Alternative<u></u><u></u></span></u></i></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:10pt">Another possible solution is a new PROJ operation e.g.
</span><span lang="EN-GB" style="font-size:10pt;font-family:Consolas">+proj=flip</span><span lang="EN-GB" style="font-size:10pt"> to make the values of a coordinate value and the value stored in the stack switch places.
<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:10pt"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:9pt;font-family:Consolas">cct -I +proj=pipeline
<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:9pt;font-family:Consolas">+step +proj=push +v_3
<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:9pt;font-family:Consolas">+step +proj=utm +zone=19 +inv +ellps=intl
<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:9pt;font-family:Consolas">+step +proj=cart +ellps=intl
<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:9pt;font-family:Consolas">+step +proj=helmert +x=-366.1939 +y=-115.0688 +z=-776.7039 +rx=20.963080 +ry=16.462749 +rz=-14.276379 +s=-12.80900 +convention=coordinate_frame +exact
<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:9pt;font-family:Consolas">+step +proj=cart +inv +ellps=GRS80
<u></u><u></u></span></p>
<p class="MsoNormal"><b><span lang="EN-GB" style="font-size:9pt;font-family:Consolas">+step +proj=flip +v_3
<u></u><u></u></span></b></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:9pt;font-family:Consolas">+step +proj=vgridshift +grids=egm96_15.tif +inv
<u></u><u></u></span></p>
<p class="MsoNormal"><b><span lang="EN-GB" style="font-size:9pt;font-family:Consolas">+step +proj=pop +v_3 +omit_fwd
<u></u><u></u></span></b></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:9pt;font-family:Consolas"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:10pt">Regards, Jochem<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:10pt"><u></u> <u></u></span></p>
</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 href="https://www.kadaster.nl/algemene-leveringsvoorwaarden" target="_blank">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 href="https://www.kadaster.com/general-terms-and-conditions" target="_blank">https://www.kadaster.com/general-terms-and-conditions</a>]. <br>
</font>
</div>

_______________________________________________<br>
PROJ mailing list<br>
<a href="mailto:PROJ@lists.osgeo.org" target="_blank">PROJ@lists.osgeo.org</a><br>
<a href="https://lists.osgeo.org/mailman/listinfo/proj" rel="noreferrer" target="_blank">https://lists.osgeo.org/mailman/listinfo/proj</a><br>
</div></blockquote></div>