<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <p>Good analysis. Fixed per <a class="moz-txt-link-freetext" href="https://github.com/OSGeo/PROJ/pull/3924">https://github.com/OSGeo/PROJ/pull/3924</a></p>
    <p><br>
    </p>
    <div class="moz-cite-prefix">Le 18/10/2023 à 16:23, Erixen Cruz via
      PROJ a écrit :<br>
    </div>
    <blockquote type="cite"
cite="mid:TYCP286MB2051A1D946B252B323CCA965E5D5A@TYCP286MB2051.JPNP286.PROD.OUTLOOK.COM">
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <style type="text/css" style="display:none;">P {margin-top:0;margin-bottom:0;}</style>
      <div class="elementToProof"
style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
        Hello,</div>
      <div class="elementToProof"
style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
        <br>
      </div>
      <div class="elementToProof"
style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
        I think there may be a bug with topocentric WKT representation
        in PROJ, but I want to confirm before making an issue in the
        repo.</div>
      <div class="elementToProof"
style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
        <br>
      </div>
      <div class="elementToProof"><span
style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">We
          have data in a east-north-up coordinate system with origin on
          the surface of WGS84 ellipsoid. I believe the way to represent
          that in WKT is with a topocentric conversion, which is
          codified in EPSG:9836
        </span><span
style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);"><a
href="https://epsg.org/coord-operation-method_9836/Geocentric-topocentric-conversions.html"
            id="LPlnk232870" moz-do-not-send="true"
            class="moz-txt-link-freetext">https://epsg.org/coord-operation-method_9836/Geocentric-topocentric-conversions.html</a>.
          PROJ implements this since version 8 <a
href="https://proj.org/en/9.3/operations/conversions/topocentric.html"
            id="LPlnk342335" moz-do-not-send="true"
            class="moz-txt-link-freetext">
https://proj.org/en/9.3/operations/conversions/topocentric.html</a>.</span></div>
      <div class="elementToProof"><span
style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);"><br>
        </span></div>
      <div class="elementToProof"><span
style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">I
          build latest PROJ master locally and use projinfo to get WKT
          for a CRS defined by topocentric conversion at origin
          -3982059.42, 3331314.88, 3692463.58 (EPSG:4978).</span></div>
      <div class="elementToProof"><span
style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);"><br>
        </span></div>
      <div class="elementToProof"><span
style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">$
          PROJ_DATA=~/Documents/OSGeo/PROJ/build/data/
          ~/Documents/OSGeo/PROJ/build/bin/projinfo -o WKT2:2019
          "+proj=topocentric +ellps=WGS84 +X_0=-3982059.42
          +Y_0=3331314.88 +Z_0=3692463.58 +no_defs +type=crs"</span></div>
      <div class="elementToProof"><span
style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">PROJCRS["unknown",</span></div>
      <div><span
style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);"> 
            BASEGEOGCRS["unknown",</span></div>
      <div><span
style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);"> 
                DATUM["Unknown based on WGS 84 ellipsoid",</span></div>
      <div><span
style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);"> 
                    ELLIPSOID["WGS 84",6378137,298.257223563,</span></div>
      <div><span
style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);"> 
                        LENGTHUNIT["metre",1],</span></div>
      <div><span
style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);"> 
                        ID["EPSG",7030]]],</span></div>
      <div><span
style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);"> 
                PRIMEM["Greenwich",0,</span></div>
      <div><span
style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);"> 
                    ANGLEUNIT["degree",0.0174532925199433],</span></div>
      <div><span
style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);"> 
                    ID["EPSG",8901]]],</span></div>
      <div><span
style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);"> 
            CONVERSION["unknown",</span></div>
      <div><span
style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);"> 
                METHOD["Geocentric/topocentric conversions",</span></div>
      <div><span
style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);"> 
                    ID["EPSG",9836]],</span></div>
      <div><span
style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);"> 
                PARAMETER["Geocentric X of topocentric
          origin",-3982059.42,</span></div>
      <div><span
style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);"> 
                    LENGTHUNIT["metre",1],</span></div>
      <div><span
style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);"> 
                    ID["EPSG",8837]],</span></div>
      <div><span
style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);"> 
                PARAMETER["Geocentric Y of topocentric
          origin",3331314.88,</span></div>
      <div><span
style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);"> 
                    LENGTHUNIT["metre",1],</span></div>
      <div><span
style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);"> 
                    ID["EPSG",8838]],</span></div>
      <div><span
style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);"> 
                PARAMETER["Geocentric Z of topocentric
          origin",3692463.58,</span></div>
      <div><span
style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);"> 
                    LENGTHUNIT["metre",1],</span></div>
      <div><span
style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);"> 
                    ID["EPSG",8839]]],</span></div>
      <div><span
style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);"> 
            CS[Cartesian,2],</span></div>
      <div><span
style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);"> 
                AXIS["(E)",east,</span></div>
      <div><span
style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);"> 
                    ORDER[1],</span></div>
      <div><span
style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);"> 
                    LENGTHUNIT["metre",1,</span></div>
      <div><span
style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);"> 
                        ID["EPSG",9001]]],</span></div>
      <div><span
style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);"> 
                AXIS["(N)",north,</span></div>
      <div><span
style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);"> 
                    ORDER[2],</span></div>
      <div><span
style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);"> 
                    LENGTHUNIT["metre",1,</span></div>
      <div class="elementToProof"><span
style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);"> 
                        ID["EPSG",9001]]]]</span></div>
      <div class="elementToProof"><span
style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);"><br>
        </span></div>
      <div class="elementToProof"><span
style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">This
          is peculiar because the base CRS is geographic (4979?) instead
          of geodetic 4978. I feed this to cs2cs to see if I can go back
          from the origin 0, 0, 0 to 4978.</span></div>
      <div class="elementToProof"><span
style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);"><br>
        </span></div>
      <div class="elementToProof"><span
style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">$
          echo 0 0 0 | PROJ_DATA=~/Documents/OSGeo/PROJ/build/data/
          ~/Documents/OSGeo/PROJ/build/bin/cs2cs
          "PROJCRS[\"unknown\",BASEGEOGCRS[\"unknown\",DATUM[\"Unknown
          based on WGS 84 ellipsoid\",ELLIPSOID[\"WGS
84\",6378137,298.257223563,LENGTHUNIT[\"metre\",1],ID[\"EPSG\",7030]]],PRIMEM[\"Greenwich\",0,ANGLEUNIT[\"degree\",0.0174532925199433],ID[\"EPSG\",8901]]],CONVERSION[\"unknown\",METHOD[\"Geocentric/topocentric
          conversions\",ID[\"EPSG\",9836]],PARAMETER[\"Geocentric X of
          topocentric
origin\",-3982059.42,LENGTHUNIT[\"metre\",1],ID[\"EPSG\",8837]],PARAMETER[\"Geocentric
          Y of topocentric
origin\",3331314.88,LENGTHUNIT[\"metre\",1],ID[\"EPSG\",8838]],PARAMETER[\"Geocentric
          Z of topocentric
origin\",3692463.58,LENGTHUNIT[\"metre\",1],ID[\"EPSG\",8839]]],CS[Cartesian,2],AXIS[\"(E)\",east,ORDER[1],LENGTHUNIT[\"metre\",1,ID[\"EPSG\",9001]]],AXIS[\"(N)\",north,ORDER[2],LENGTHUNIT[\"metre\",1,ID[\"EPSG\",9001]]]]"
          +to EPSG:4978</span></div>
      <div><span
style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">pipeline:
          Pipeline: Mismatched units between step 1 and 2</span></div>
      <div class="elementToProof"><span
style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">*     *
          inf</span></div>
      <div class="elementToProof"><span
style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);"><br>
        </span></div>
      <div class="elementToProof"><span
style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">And
          the peculiarity reveals itself: the topocentric conversion
          goes to cartesian (geodetic), not geographic. So there is
          units mismatch meters and degrees/radians. When I replace the
          BASEGEOGCRS with BASEGEODCRS with 4978 definition, it works as
          expected:</span></div>
      <div class="elementToProof"><span
style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);"><br>
        </span></div>
      <div class="elementToProof"><span
style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">$
          echo 0 0 0 | PROJ_DATA=~/Documents/OSGeo/PROJ/build/data/
          ~/Documents/OSGeo/PROJ/build/bin/cs2cs
          "PROJCRS[\"unknown\",BASEGEODCRS[\"WGS 84\",ENSEMBLE[\"World
          Geodetic System 1984 ensemble\",MEMBER[\"World Geodetic System
          1984 (Transit)\"],MEMBER[\"World Geodetic System 1984
          (G730)\"],MEMBER[\"World Geodetic System 1984
          (G873)\"],MEMBER[\"World Geodetic System 1984
          (G1150)\"],MEMBER[\"World Geodetic System 1984
          (G1674)\"],MEMBER[\"World Geodetic System 1984
          (G1762)\"],MEMBER[\"World Geodetic System 1984
          (G2139)\"],ELLIPSOID[\"WGS
84\",6378137,298.257223563,LENGTHUNIT[\"metre\",1]],ENSEMBLEACCURACY[2.0]],PRIMEM[\"Greenwich\",0,ANGLEUNIT[\"degree\",0.0174532925199433]],CS[Cartesian,3],AXIS[\"(X)\",geocentricX,ORDER[1],LENGTHUNIT[\"metre\",1]],AXIS[\"(Y)\",geocentricY,ORDER[2],LENGTHUNIT[\"metre\",1]],AXIS[\"(Z)\",geocentricZ,ORDER[3],LENGTHUNIT[\"metre\",1]],USAGE[SCOPE[\"Geodesy.
          Navigation and positioning using GPS satellite
system.\"],AREA[\"World.\"],BBOX[-90,-180,90,180]],ID[\"EPSG\",4978]],CONVERSION[\"unknown\",METHOD[\"Geocentric/topocentric
          conversions\",ID[\"EPSG\",9836]],PARAMETER[\"Geocentric X of
          topocentric
origin\",-3982059.42,LENGTHUNIT[\"metre\",1],ID[\"EPSG\",8837]],PARAMETER[\"Geocentric
          Y of topocentric
origin\",3331314.88,LENGTHUNIT[\"metre\",1],ID[\"EPSG\",8838]],PARAMETER[\"Geocentric
          Z of topocentric
origin\",3692463.58,LENGTHUNIT[\"metre\",1],ID[\"EPSG\",8839]]],CS[Cartesian,2],AXIS[\"(E)\",east,ORDER[1],LENGTHUNIT[\"metre\",1,ID[\"EPSG\",9001]]],AXIS[\"(N)\",north,ORDER[2],LENGTHUNIT[\"metre\",1,ID[\"EPSG\",9001]]]]"
          +to EPSG:4978<br>
          -3982059.42 3331314.88 3692463.58</span></div>
      <div class="elementToProof"><span
style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);"><br>
        </span></div>
      <div class="elementToProof"><span
style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">Am
          I misusing projinfo and/or the topocentric conversion? Or
          should PROJ be returning a BASEGEODCRS instead of BASEGEOGCRS
          in this case? Thanks.</span></div>
      <div class="elementToProof"><span
style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);"><br>
        </span></div>
      <div class="elementToProof"><span
style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">Sincerely,
          Erixen</span></div>
      <br>
      <fieldset class="moz-mime-attachment-header"></fieldset>
      <pre class="moz-quote-pre" wrap="">_______________________________________________
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>