<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:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
        {font-family:"Cascadia Mono";
        panose-1:2 11 6 9 2 0 0 2 0 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
pre
        {mso-style-priority:99;
        mso-style-link:"HTML Preformatted Char";
        margin:0in;
        font-size:10.0pt;
        font-family:"Courier New";}
span.HTMLPreformattedChar
        {mso-style-name:"HTML Preformatted Char";
        mso-style-priority:99;
        mso-style-link:"HTML Preformatted";
        font-family:Consolas;}
span.EmailStyle23
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
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="EN-US" link="blue" vlink="purple" style="word-wrap:break-word">
<div class="WordSection1">
<p class="MsoNormal">Hi Even,<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I tried the fix with the CRS’s I sent, and it worked. But as I mentioned, my real target CRS is a custom projected system (below), and it still fails with what seems to be the same error as in my original email.
<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">COMPD_CS["TempTM + CGVD28 height - HT2_0",<o:p></o:p></p>
<p class="MsoNormal">    PROJCS["Custom",<o:p></o:p></p>
<p class="MsoNormal">        GEOGCS["NAD83(CSRS)",<o:p></o:p></p>
<p class="MsoNormal">            DATUM["NAD83_Canadian_Spatial_Reference_System",<o:p></o:p></p>
<p class="MsoNormal">                SPHEROID["GRS 1980",6378137,298.257222101,<o:p></o:p></p>
<p class="MsoNormal">                    AUTHORITY["EPSG","7019"]],<o:p></o:p></p>
<p class="MsoNormal">                TOWGS84[0,0,0,0,0,0,0],<o:p></o:p></p>
<p class="MsoNormal">                AUTHORITY["EPSG","6140"]],<o:p></o:p></p>
<p class="MsoNormal">            PRIMEM["Greenwich",0,<o:p></o:p></p>
<p class="MsoNormal">                AUTHORITY["EPSG","8901"]],<o:p></o:p></p>
<p class="MsoNormal">            UNIT["degree",0.0174532925199433,<o:p></o:p></p>
<p class="MsoNormal">                AUTHORITY["EPSG","9122"]],<o:p></o:p></p>
<p class="MsoNormal">            AUTHORITY["EPSG","4617"]],<o:p></o:p></p>
<p class="MsoNormal">        PROJECTION["Transverse_Mercator"],<o:p></o:p></p>
<p class="MsoNormal">        PARAMETER["latitude_of_origin",49.351346659616],<o:p></o:p></p>
<p class="MsoNormal">        PARAMETER["central_meridian",-123.20266499149],<o:p></o:p></p>
<p class="MsoNormal">        PARAMETER["scale_factor",1],<o:p></o:p></p>
<p class="MsoNormal">        PARAMETER["false_easting",15307.188],<o:p></o:p></p>
<p class="MsoNormal">        PARAMETER["false_northing",6540.975],<o:p></o:p></p>
<p class="MsoNormal">        UNIT["Meters",1],<o:p></o:p></p>
<p class="MsoNormal">        AXIS["Easting",EAST],<o:p></o:p></p>
<p class="MsoNormal">        AXIS["Northing",NORTH]],<o:p></o:p></p>
<p class="MsoNormal">    VERT_CS["CGVD28 height - HT2_0",<o:p></o:p></p>
<p class="MsoNormal">        VERT_DATUM["Canadian Geodetic Vertical Datum of 1928",2005,<o:p></o:p></p>
<p class="MsoNormal">            EXTENSION["PROJ4_GRIDS","HT2_0.gtx"],<o:p></o:p></p>
<p class="MsoNormal">            AUTHORITY["EPSG","5114"]],<o:p></o:p></p>
<p class="MsoNormal">        UNIT["metre",1,<o:p></o:p></p>
<p class="MsoNormal">            AUTHORITY["EPSG","9001"]],<o:p></o:p></p>
<p class="MsoNormal">        AXIS["Gravity-related height",UP],<o:p></o:p></p>
<p class="MsoNormal">        AUTHORITY["EPSG","5713"]]]<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Experimenting, I removed the “TOWGS84” directive from BOTH the source and target systems, and I do get an answer instead of an error:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">For test point: (<span style="font-size:9.5pt;font-family:"Cascadia Mono";color:black">49.351346658, -123.202664992, 289.809)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.5pt;font-family:"Cascadia Mono";color:black">I get: (15307.1880,6540.9748,307.744)</span><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">But since geoid separation at the test point is -18.238, Z should be 308.047.  In fact, if I code up the following pipeline and initialize a transform object:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:9.5pt;font-family:"Cascadia Mono";color:black">strPipe
</span><span style="font-size:9.5pt;font-family:"Cascadia Mono";color:teal">=</span><span style="font-size:9.5pt;font-family:"Cascadia Mono";color:black">
</span><span style="font-size:9.5pt;font-family:"Cascadia Mono";color:#A31515">"+proj=pipeline\</span><span style="font-size:9.5pt;font-family:"Cascadia Mono";color:black"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:9.5pt;font-family:"Cascadia Mono";color:#A31515">        +step +proj=axisswap +order=2, 1\</span><span style="font-size:9.5pt;font-family:"Cascadia Mono";color:black"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:9.5pt;font-family:"Cascadia Mono";color:#A31515">        +step +proj=unitconvert +xy_in=deg +xy_out=rad\</span><span style="font-size:9.5pt;font-family:"Cascadia Mono";color:black"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:9.5pt;font-family:"Cascadia Mono";color:#A31515">        +step +inv +proj=vgridshift +grids=HT2_0.gtx +multiplier=1\</span><span style="font-size:9.5pt;font-family:"Cascadia Mono";color:black"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:9.5pt;font-family:"Cascadia Mono";color:#A31515">        +step +proj=tmerc +lat_0=49.351346659616 +lon_0=-123.20266499149 +k=1\</span><span style="font-size:9.5pt;font-family:"Cascadia Mono";color:black"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.5pt;font-family:"Cascadia Mono";color:#A31515">        +x_0=15307.188 +y_0=6540.975 +ellps=GRS80"</span><span style="font-size:9.5pt;font-family:"Cascadia Mono";color:black">;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.5pt;font-family:"Cascadia Mono";color:black"><o:p> </o:p></span></p>
<p class="MsoNormal">The call to Transform() gives: (15307.1880, 6540.9748, 308.042)   -- XY matches above, but now I get the expected Z (-0.005).  However, I’d like to avoid assembling pipelines for every conversion/transform.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Any arrows left in your quiver?<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Thanks,<o:p></o:p></p>
<p class="MsoNormal">Steve<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b>From:</b> Steve Riddell <br>
<b>Sent:</b> Friday, March 18, 2022 6:17 PM<br>
<b>To:</b> Even Rouault <even.rouault@spatialys.com>; gdal-dev@lists.osgeo.org<br>
<b>Subject:</b> RE: OGRCreateCoordinateTransformation()<o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Thanks very much, Even.  For reporting the problem, I “packaged up” a case with CRS’s with EPGS codes. For the actual problem I’m working, the target CRS is a custom projection –no EPSG.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b>From:</b> Even Rouault <<a href="mailto:even.rouault@spatialys.com">even.rouault@spatialys.com</a>>
<br>
<b>Sent:</b> Friday, March 18, 2022 5:05 PM<br>
<b>To:</b> Steve Riddell <<a href="mailto:sriddell@geocue.com">sriddell@geocue.com</a>>;
<a href="mailto:gdal-dev@lists.osgeo.org">gdal-dev@lists.osgeo.org</a><br>
<b>Subject:</b> Re: OGRCreateCoordinateTransformation()<o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p>Steve,<o:p></o:p></p>
<p>Fix in PROJ queued in <a href="https://github.com/OSGeo/PROJ/pull/3123">https://github.com/OSGeo/PROJ/pull/3123</a><o:p></o:p></p>
<p>The complexity of dealing with legacy features TOWGS84[] and PROJ4_GRIDS is highly stressing PROJ pipeline computation engine.<o:p></o:p></p>
<p>Using the plain EPSG codes  EPSG:4955 -> EPSG:4617+5713 would be much preferable here<o:p></o:p></p>
<p>Even<o:p></o:p></p>
<div>
<p class="MsoNormal">Le 18/03/2022 à 21:14, Steve Riddell a écrit :<o:p></o:p></p>
</div>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<p class="MsoNormal">Hi,<o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal">I’m getting an error (below) using GDAL trying to set up a transformation between NAD83(CSRS) geodetic, w/ ellipsoidal heights, and NAD83(CSRS) geodetic, CGVD28 heights. Similar transformations work fine on some datums,  but fail on others.
  Hope someone can offer some insight.  Note the if I don't use the PROJ4_GRIDS extension, I don't get the error, but I don't get the geoid adjustment either.<o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal">COMPD_CS["NAD83(CSRS) + Ellipsoid (Meters)",<o:p></o:p></p>
<p class="MsoNormal">    GEOGCS["NAD83(CSRS)",<o:p></o:p></p>
<p class="MsoNormal">        DATUM["NAD83_Canadian_Spatial_Reference_System",<o:p></o:p></p>
<p class="MsoNormal">            SPHEROID["GRS 1980",6378137,298.257222101,<o:p></o:p></p>
<p class="MsoNormal">                AUTHORITY["EPSG","7019"]],<o:p></o:p></p>
<p class="MsoNormal">            TOWGS84[0,0,0,0,0,0,0],<o:p></o:p></p>
<p class="MsoNormal">            AUTHORITY["EPSG","6140"]],<o:p></o:p></p>
<p class="MsoNormal">        PRIMEM["Greenwich",0,<o:p></o:p></p>
<p class="MsoNormal">            AUTHORITY["EPSG","8901"]],<o:p></o:p></p>
<p class="MsoNormal">        UNIT["degree",0.0174532925199433,<o:p></o:p></p>
<p class="MsoNormal">            AUTHORITY["EPSG","9122"]],<o:p></o:p></p>
<p class="MsoNormal">        AUTHORITY["EPSG","4617"]],<o:p></o:p></p>
<p class="MsoNormal">    VERT_CS["Ellipsoid (Meters)",<o:p></o:p></p>
<p class="MsoNormal">        VERT_DATUM["Ellipsoid",2002],<o:p></o:p></p>
<p class="MsoNormal">        UNIT["metre",1,<o:p></o:p></p>
<p class="MsoNormal">            AUTHORITY["EPSG","9001"]],<o:p></o:p></p>
<p class="MsoNormal">        AXIS["ellipsoidal height",UP]]]<o:p></o:p></p>
<p class="MsoNormal">                                <o:p></o:p></p>
<p class="MsoNormal">COMPD_CS["NAD83(CSRS) + CGVD28 height - HT2_0",<o:p></o:p></p>
<p class="MsoNormal">    GEOGCS["NAD83(CSRS)",<o:p></o:p></p>
<p class="MsoNormal">        DATUM["NAD83_Canadian_Spatial_Reference_System",<o:p></o:p></p>
<p class="MsoNormal">            SPHEROID["GRS 1980",6378137,298.257222101,<o:p></o:p></p>
<p class="MsoNormal">                AUTHORITY["EPSG","7019"]],<o:p></o:p></p>
<p class="MsoNormal">            TOWGS84[0,0,0,0,0,0,0],<o:p></o:p></p>
<p class="MsoNormal">            AUTHORITY["EPSG","6140"]],<o:p></o:p></p>
<p class="MsoNormal">        PRIMEM["Greenwich",0,<o:p></o:p></p>
<p class="MsoNormal">            AUTHORITY["EPSG","8901"]],<o:p></o:p></p>
<p class="MsoNormal">        UNIT["degree",0.0174532925199433,<o:p></o:p></p>
<p class="MsoNormal">            AUTHORITY["EPSG","9122"]],<o:p></o:p></p>
<p class="MsoNormal">        AUTHORITY["EPSG","4617"]],<o:p></o:p></p>
<p class="MsoNormal">    VERT_CS["CGVD28 height - HT2_0",<o:p></o:p></p>
<p class="MsoNormal">        VERT_DATUM["Canadian Geodetic Vertical Datum of 1928",2005,<o:p></o:p></p>
<p class="MsoNormal">            EXTENSION["PROJ4_GRIDS","HT2_0.gtx"],<o:p></o:p></p>
<p class="MsoNormal">            AUTHORITY["EPSG","5114"]],<o:p></o:p></p>
<p class="MsoNormal">        UNIT["metre",1,<o:p></o:p></p>
<p class="MsoNormal">            AUTHORITY["EPSG","9001"]],<o:p></o:p></p>
<p class="MsoNormal">        AXIS["Gravity-related height",UP],<o:p></o:p></p>
<p class="MsoNormal">        AUTHORITY["EPSG","5713"]]]<o:p></o:p></p>
<p class="MsoNormal">                                <o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal">ERROR 6: Cannot find coordinate operations from `EPSG:4955' to `COMPOUNDCRS["NAD83(CSRS) + CGVD28 height - HT2_0",BOUNDCRS[SOURCECRS[GEOGCRS["NAD83(CSRS)",DATUM["NAD83 Canadian Spatial Reference System",ELLIPSOID["GRS 1980",6378137,298.257222101,LENGTHUNIT["metre",1]]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],CS[ellipsoidal,2],AXIS["geodetic
 latitude (Lat)",north,ORDER[1],ANGLEUNIT["degree",0.0174532925199433]],AXIS["geodetic longitude (Lon)",east,ORDER[2],ANGLEUNIT["degree",0.0174532925199433]],ID["EPSG",4617]]],TARGETCRS[GEOGCRS["WGS 84",DATUM["World Geodetic System 1984",ELLIPSOID["WGS 84",6378137,298.257223563,LENGTHUNIT["metre",1]]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],CS[ellipsoidal,2],AXIS["latitude",north,ORDER[1],ANGLEUNIT["degree",0.0174532925199433]],AXIS["longitude",east,ORDER[2],ANGLEUNIT["degree",0.0174532925199433]],ID["EPSG",4326]]],ABRIDGEDTRANSFORMATION["Transformation
 from NAD83(CSRS) to WGS84",METHOD["Position Vector transformation (geog2D domain)",ID["EPSG",9606]],PARAMETER["X-axis translation",0,ID["EPSG",8605]],PARAMETER["Y-axis translation",0,ID["EPSG",8606]],PARAMETER["Z-axis translation",0,ID["EPSG",8607]],PARAMETER["X-axis
 rotation",0,ID["EPSG",8608]],PARAMETER["Y-axis rotation",0,ID["EPSG",8609]],PARAMETER["Z-axis rotation",0,ID["EPSG",8610]],PARAMETER["Scale difference",1,ID["EPSG",8611]]]],BOUNDCRS[SOURCECRS[VERTCRS["CGVD28 height - HT2_0",VDATUM["Canadian Geodetic Vertical
 Datum of 1928"],CS[vertical,1],AXIS["gravity-related height",up,LENGTHUNIT["metre",1]],ID["EPSG",5713]]],TARGETCRS[GEOGCRS["WGS 84",DATUM["World Geodetic System 1984",ELLIPSOID["WGS 84",6378137,298.257223563,LENGTHUNIT["metre",1]]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],CS[ellipsoidal,3],AXIS["latitude",north,ORDER[1],ANGLEUNIT["degree",0.0174532925199433]],AXIS["longitude",east,ORDER[2],ANGLEUNIT["degree",0.0174532925199433]],AXIS["ellipsoidal
 height",up,ORDER[3],LENGTHUNIT["metre",1]],ID["EPSG",4979]]],ABRIDGEDTRANSFORMATION["CGVD28 height - HT2_0 to WGS84 ellipsoidal height",METHOD["GravityRelatedHeight to Geographic3D"],PARAMETERFILE["Geoid (height correction) model file","HT2_0.gtx",ID["EPSG",8666]]]]]'<o:p></o:p></p>
<pre> <o:p></o:p></pre>
<pre><span style="font-family:"Calibri",sans-serif">Thanks in advance for any assistance!<o:p></o:p></span></pre>
<pre><span style="font-family:"Calibri",sans-serif">Best regards,</span><o:p></o:p></pre>
<pre><span style="font-family:"Calibri",sans-serif">Steve</span><o:p></o:p></pre>
<pre><span style="font-family:"Calibri",sans-serif"> </span><o:p></o:p></pre>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:13.5pt;font-family:"Tahoma",sans-serif">Steve Riddell</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-family:"Tahoma",sans-serif">Software Engineering</span><o:p></o:p></p>
<p class="MsoNormal"><b><span style="color:#525252">GeoCue Group, Inc.</span></b><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:10.0pt">520 6th Street | Madison, AL 35756 USA</span><o:p></o:p></p>
<p class="MsoNormal"><b><span style="font-size:10.0pt">Phone:</span></b><span style="font-size:10.0pt"> 256.461.8289 |
<b>Fax:</b> 256.461.8249 </span><o:p></o:p></p>
<p class="MsoNormal"><i><span style="color:#0070C0">LIDAR/Drone Mapping Software & Services
</span></i><i><span style="font-size:9.0pt">– </span><span style="color:#538135">True View® 3D Imaging Sensors
</span></i><i><span style="font-size:9.0pt">–</span><span style="color:#C45911"> Image/LIDAR Data Management Solutions</span></i><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:10.0pt"> </span><a href="http://www.geocue.com/"><span style="font-size:10.0pt;color:#0070C0">www.geocue.com</span></a><span style="font-size:10.0pt;color:#0070C0"> 
<a href="https://support.geocue.com/">support.geocue.com</a> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:10.0pt"> </span><o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<pre><span style="font-size:11.0pt;font-family:"Calibri",sans-serif"> </span><o:p></o:p></pre>
</blockquote>
<pre>-- <o:p></o:p></pre>
<pre><a href="http://www.spatialys.com">http://www.spatialys.com</a><o:p></o:p></pre>
<pre>My software is free, but my time generally not.<o:p></o:p></pre>
</div>
</body>
</html>