<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><div class="">I’ve look at all the pipeline definitions in the attached code. Below are my comments for each of them.</div><div class="">I agree with Jochem, you seem to be passing linear coordinates to a projection that expects angular</div><div class="">coordinates. Looking back, I see that my comments about the unitconvert steps were not the cause of</div><div class="">your problems. Had you been using different units it could have been the case - it is always better to</div><div class="">be explicit here. </div><div class=""><br class=""></div><div class="">"+proj=utm +lon_0=3w +ellps=GRS80”</div><div class=""><br class=""></div><div class=""><span class="Apple-tab-span" style="white-space:pre"> </span>No problems here in either directions.</div><div class=""><br class=""></div><div class="">"+proj=pipeline +step +proj=utm +lon_0=3w +ellps=GRS80 +step +proj=unitconvert +xy_out=km</div><div class=""><br class=""></div><div class=""><span class="Apple-tab-span" style="white-space:pre">      </span>No problems here in either directions, but could benefit from a added +xy_in=m in the unitconvert step.</div><div class=""><br class=""></div><div class="">"+proj=pipeline +step +proj=unitconvert +xy_in=deg +step +proj=utm +lon_0=3w +ellps=GRS80”</div><div class=""><br class=""></div><div class=""><span class="Apple-tab-span" style="white-space:pre">  </span>Same as above, clarify uniconvert step be adding +xy_out=rad</div><div class=""><br class=""></div><div class="">"+proj=pipeline +step +proj=unitconvert +xy_in=deg +step +proj=utm +lon_0=3w +ellps=GRS80 +step +proj=unitconvert +xy_out=km”</div><div class=""><br class=""></div><div class=""><span class="Apple-tab-span" style="white-space:pre">  </span>Clarify both unitconvert steps by adding xy_out=rad to the first and +xy_in=m to the second</div><div class=""><br class=""></div><div class="">"+proj=utm +lon_0=3w +ellps=GRS80”</div><div class=""><br class=""></div><div class=""><span class="Apple-tab-span" style="white-space:pre">      </span>No problems here</div><div class=""><br class=""></div><div class="">"+proj=pipeline +step +proj=unitconvert +xy_in=km +step +proj=utm +lon_0=3w +ellps=GRS80”</div><div class=""><br class=""></div><div class=""><span class="Apple-tab-span" style="white-space:pre">  </span>Again, clarify unitconvert step by adding xy_out=m</div><div class=""><br class=""></div><div class="">"+proj=pipeline +step +proj=utm +lon_0=3w +ellps=GRS80 +step +proj=unitconvert +xy_out=deg”</div><div class=""><br class=""></div><div class=""><span class="Apple-tab-span" style="white-space:pre">      </span>This is nonsense, projected coordinates from UTM can’t be converted to degrees. </div><div class=""><span class="Apple-tab-span" style="white-space:pre">   </span>Probably missing a +inv in the utm step. If that is the case, clarify unitconvert step with +xy_in=rad</div><div class=""><br class=""></div><div class="">"+proj=pipeline +step +proj=unitconvert +xy_in=km +step +proj=utm +lon_0=3w +ellps=GRS80 +step +proj=unitconvert +xy_out=deg”</div><div class=""><br class=""></div><div class=""><span class="Apple-tab-span" style="white-space:pre">        </span>Also nonsense, passing km to the UTM projection is not possible, UTM want’s radians as input. Probably again missing a +inv</div><div class=""><span class="Apple-tab-span" style="white-space:pre">     </span>in the utm step. Clarify unitconvert steps by stating both input and output units.</div><div class=""><br class=""></div><div class=""><br class=""></div><div class="">/Kristian</div><div class=""><br class=""></div><div><br class=""><blockquote type="cite" class=""><div class="">On 20 May 2020, at 19:30, José Luis García Pallero <<a href="mailto:jgpallero@gmail.com" class="">jgpallero@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><span style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">El mié., 20 may. 2020 a las 19:24, Lesparre, Jochem</span><br style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">(<</span><a href="mailto:Jochem.Lesparre@kadaster.nl" style="font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;" class="">Jochem.Lesparre@kadaster.nl</a><span style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">>) escribió:</span><br style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><blockquote type="cite" style="font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><br class="">I just had a quick look, but to me it looks like you are trying to convert between angles and distances?<br class=""><br class="">+proj=utm gives angular results that can be converted to deg, rad or maybe gon, but NOT to m, km of ft! This is such a fundamental part of how PROJ works, that it is probably not explained in the documentation.<br class=""><br class="">If I mis understood, sorry for the confusion.<br class=""></blockquote><br style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">I'm trying to perform first the forward step in the projection, i.e.,</span><br style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">from geodetic (angular) coordinates to projected (linear) ones. This</span><br style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">step works without problems whatever the unit combinations I use</span><br style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">(radians to meters, radians to kilometers, degrees to meters or</span><br style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">degrees to kilometers). The problem is with the inverse step , i.e.,</span><br style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">from projected (linear) coordinates to geodetic (angular) ones. I want</span><br style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">to use the output coordinates of the forward step as input for the</span><br style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">inverse step. The only combination it works is from meters to radians.</span><br style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">Whatever other combination fails. Attached to this message</span><br style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">(</span><a href="https://lists.osgeo.org/pipermail/proj/2020-May/009648.html" style="font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;" class="">https://lists.osgeo.org/pipermail/proj/2020-May/009648.html</a><span style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">) I sent a</span><br style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">C source code with an example showing what I want to do</span><br style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><br style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">Cheers</span><br style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><br style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><blockquote type="cite" style="font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; text-decoration: none;" class="">Kind regards, Jochem<br class=""><br class=""><br class="">-----Original Message-----<br class="">From: PROJ <<a href="mailto:proj-bounces@lists.osgeo.org" class="">proj-bounces@lists.osgeo.org</a>> On Behalf Of José Luis García Pallero<br class="">Sent: woensdag 20 mei 2020 18:34<br class="">To: Kristian Evers <<a href="mailto:kreve@sdfe.dk" class="">kreve@sdfe.dk</a>><br class="">Cc: <a href="mailto:proj@lists.osgeo.org" class="">proj@lists.osgeo.org</a><br class="">Subject: Re: [PROJ] About unit conversion<br class=""><br class="">El mié., 20 may. 2020 a las 11:00, Kristian Evers (<<a href="mailto:kreve@sdfe.dk" class="">kreve@sdfe.dk</a>>) escribió:<br class=""><blockquote type="cite" class=""><br class="">I see that you don't specify the input units in your unitconvert<br class="">steps. Try adding a<br class="">+xy_in parameter to your unitconvert steps and see if that fixes the problem.<br class="">When you only specify of of either +xy_in or +xy_out the operation<br class="">becomes somewhat uni-directional which is why not all of your pipelines works in reverse.<br class=""><br class="">See <a href="https://proj.org/operations/conversions/unitconvert.html" class="">https://proj.org/operations/conversions/unitconvert.html</a> for more.<br class=""></blockquote><br class="">Thank you for your answer, Kristian, but I can't understand why my program fails. Clearly, for FWD and input in radians and output in meters all works without any unitconversion. Also for INV step with meters as input and radians as output, i.e., using only "+proj=utm<br class="">+lon_0=3w +ellps=GRS80" as parameters string is enough. Also for any<br class="">combination in the FWD step all works.<br class=""><br class="">For example using "+proj=pipeline +step +proj=unitconvert +xy_in=deg<br class="">+step +proj=utm +lon_0=3w +ellps=GRS80 +step +proj=unitconvert<br class="">+xy_out=km" accepts as input degrees and returns kilometers. But I<br class="">cant understand why in this case for the INV step the parameters string "+proj=pipeline +step +proj=unitconvert +xy_in=km +step<br class="">+proj=utm +lon_0=3w +ellps=GRS80 +step +proj=unitconvert +xy_out=deg"<br class="">is incorrect. I've tested several combinations and none of them works:<br class=""><br class="">"+proj=utm +lon_0=3w +ellps=GRS80" -> wrong results "+proj=pipeline +step +proj=unitconvert +xy_in=km +step +proj=utm<br class="">+lon_0=3w +ellps=GRS80" -> wrong results<br class="">"+proj=pipeline +step +proj=unitconvert +xy_in=km +xy_out=m +step<br class="">+proj=utm +lon_0=3w +ellps=GRS80" -> wrong results (same numeric value<br class="">as before)<br class="">"+proj=pipeline +step +proj=unitconvert +xy_in=km +xy_out=deg +step<br class="">+proj=utm +lon_0=3w +ellps=GRS80" -> proj_create: Error -59<br class="">(inconsistent unit type between input and output): Pipeline: Bad step<br class="">definition: proj=unitconvert (inconsistent unit type between input and<br class="">output)<br class="">"+proj=pipeline +step +proj=utm +lon_0=3w +ellps=GRS80 +step<br class="">+proj=unitconvert +xy_in=km +xy_out=deg" -> proj_create: Error -59<br class="">(inconsistent unit type between input and output): Pipeline: Bad step<br class="">definition: proj=unitconvert (inconsistent unit type between input and<br class="">output)<br class="">"+proj=pipeline +step +proj=unitconvert +xy_out=deg +step +proj=utm<br class="">+lon_0=3w +ellps=GRS80 +step +proj=unitconvert +xy_in=km" -> wrong<br class="">results<br class="">"+proj=pipeline +step +proj=unitconvert +xy_in=km +step +proj=utm<br class="">+lon_0=3w +ellps=GRS80 +step +proj=unitconvert +xy_out=deg" -> wrong<br class="">results<br class=""><br class="">I can't understand the way as unitconvert works, neither reading <a href="https://proj.org/operations/conversions/unitconvert.html" class="">https://proj.org/operations/conversions/unitconvert.html</a><br class=""><br class="">For only one conversion (km to radians or meters to degrees) the problem is only again with the INV step<br class=""><br class="">Thanks<br class=""><br class=""><br class=""><br class=""><br class=""><br class=""><blockquote type="cite" class=""><br class="">/Kristian<br class=""><br class=""><blockquote type="cite" class="">-----Original Message-----<br class="">From: PROJ <<a href="mailto:proj-bounces@lists.osgeo.org" class="">proj-bounces@lists.osgeo.org</a>> On Behalf Of José Luis<br class="">García Pallero<br class="">Sent: 19. maj 2020 10:59<br class="">To: <a href="mailto:proj@lists.osgeo.org" class="">proj@lists.osgeo.org</a><br class="">Subject: Re: [PROJ] About unit conversion<br class=""><br class="">I've written a small program in order to illustrate my last mail.<br class="">Attached (and pasted at the bottom of the message) I send the code.<br class="">The results are<br class=""><br class="">Original data -> lon: -6.00000, lat: 43.00000 (degrees) -> lon:<br class="">-0.1047197551, lat: 0.7504915784 (radians)<br class=""><br class="">rad to m  -> X= 255466.981, Y=4765182.933 (+proj=utm +lon_0=3w<br class="">+ellps=GRS80)<br class="">rad to km -> X=    255.467, Y=   4765.183 (+proj=pipeline +step<br class="">+proj=utm +lon_0=3w +ellps=GRS80 +step +proj=unitconvert +xy_out=km)<br class="">deg to m  -> X= 255466.981, Y=4765182.933 (+proj=pipeline +step<br class="">+proj=unitconvert +xy_in=deg +step +proj=utm +lon_0=3w +ellps=GRS80)<br class="">deg to km -> X=    255.467, Y=   4765.183 (+proj=pipeline +step<br class="">+proj=unitconvert +xy_in=deg +step +proj=utm +lon_0=3w +ellps=GRS80<br class="">+step +proj=unitconvert +xy_out=km)<br class=""><br class="">m  to rad -> lon=-0.1047197551, lat= 0.7504915784 (+proj=utm<br class="">+lon_0=3w<br class="">+ellps=GRS80)<br class="">km to rad -> lon=-0.0001306633, lat= 0.0000007501 (+proj=pipeline<br class="">+step +proj=unitconvert +xy_in=km +step +proj=utm +lon_0=3w<br class="">+ellps=GRS80)<br class="">m  to deg -> lon=-0.1300126568, lat= 0.0130928532 (+proj=pipeline<br class="">+step +proj=utm +lon_0=3w +ellps=GRS80 +step +proj=unitconvert<br class="">+xy_out=deg)<br class="">km to deg -> lon=-0.0001307025, lat= 0.0000000131 (+proj=pipeline<br class="">+step +proj=unitconvert +xy_in=km +step +proj=utm +lon_0=3w<br class="">+ellps=GRS80 +step +proj=unitconvert +xy_out=deg)<br class=""><br class="">As you can see, the only right INV conversion is the<br class="">meters_to_radians one. All other combinations produce all different<br class="">results, but all combinations for the FWD step are right. Im using<br class="">PROJ 7.0.1 from the Debian Sid repositories<br class=""><br class="">***********************<br class=""><br class="">#include<stdio.h><br class="">#include<stdlib.h><br class="">#include<math.h><br class="">#include<proj.h><br class="">#define CONST_PI (3.14159265358979323846264338328) int main() {<br class="">   double lond1=-6.0,latd1=43.0,lond2=lond1,latd2=latd1;<br class="">   double<br class="">lonr1=lond1*CONST_PI/180.0,latr1=latd1*CONST_PI/180.0,lonr2=lonr1,la<br class="">tr2<br class="">=latr1;<br class="">   char param_rad_to_m[]="+proj=utm +lon_0=3w +ellps=GRS80";<br class="">   char param_rad_to_km[]="+proj=pipeline +step +proj=utm +lon_0=3w<br class="">+ellps=GRS80 +step +proj=unitconvert +xy_out=km";<br class="">   char param_deg_to_m[]="+proj=pipeline +step +proj=unitconvert<br class="">+xy_in=deg +step +proj=utm +lon_0=3w +ellps=GRS80";<br class="">   char param_deg_to_km[]="+proj=pipeline +step +proj=unitconvert<br class="">+xy_in=deg +step +proj=utm +lon_0=3w +ellps=GRS80 +step<br class="">+proj=unitconvert +xy_out=km";<br class="">   char param_m_to_rad[]="+proj=utm +lon_0=3w +ellps=GRS80";<br class="">   char param_km_to_rad[]="+proj=pipeline +step +proj=unitconvert<br class="">+xy_in=km +step +proj=utm +lon_0=3w +ellps=GRS80";<br class="">   char param_m_to_deg[]="+proj=pipeline +step +proj=utm +lon_0=3w<br class="">+ellps=GRS80 +step +proj=unitconvert +xy_out=deg";<br class="">   char param_km_to_deg[]="+proj=pipeline +step +proj=unitconvert<br class="">+xy_in=km +step +proj=utm +lon_0=3w +ellps=GRS80 +step<br class="">+proj=unitconvert +xy_out=deg";<br class="">   PJ_CONTEXT *C=proj_context_create();<br class="">   PJ *proj=NULL;<br class="">   size_t ld=sizeof(double);<br class=""><br class="">   //Display original data<br class="">   printf("Original data -> lon: %.5lf, lat: %.5lf (degrees) -> lon:<br class="">%.10lf, lat: %.10lf (radians)\n\n",<br class="">          lond1,latd1,lonr1,latr1);<br class="">   //FWD, radiands to meters<br class="">   proj = proj_create(C,param_rad_to_m);<br class=""><br class="">proj_trans_generic(proj,PJ_FWD,&lonr1,ld,1,&latr1,ld,1,NULL,0,0,NULL,0,0);<br class="">   printf("rad to m  -> X=%11.3lf, Y=%11.3lf<br class="">(%s)\n",lonr1,latr1,param_rad_to_m);<br class="">   proj_destroy(proj);<br class="">   //FWD, radiands to kilometers<br class="">   proj = proj_create(C,param_rad_to_km);<br class=""><br class="">proj_trans_generic(proj,PJ_FWD,&lonr2,ld,1,&latr2,ld,1,NULL,0,0,NULL,0,0);<br class="">   printf("rad to km -> X=%11.3lf, Y=%11.3lf<br class="">(%s)\n",lonr2,latr2,param_rad_to_km);<br class="">   proj_destroy(proj);<br class="">   //FWD, degrees to meters<br class="">   proj = proj_create(C,param_deg_to_m);<br class=""><br class="">proj_trans_generic(proj,PJ_FWD,&lond1,ld,1,&latd1,ld,1,NULL,0,0,NULL,0,0);<br class="">   printf("deg to m  -> X=%11.3lf, Y=%11.3lf<br class="">(%s)\n",lond1,latd1,param_deg_to_m);<br class="">   proj_destroy(proj);<br class="">   //FWD, degrees to kilometers<br class="">   proj = proj_create(C,param_deg_to_km);<br class=""><br class="">proj_trans_generic(proj,PJ_FWD,&lond2,ld,1,&latd2,ld,1,NULL,0,0,NULL,0,0);<br class="">   printf("deg to km -> X=%11.3lf, Y=%11.3lf<br class="">(%s)\n\n",lond2,latd2,param_deg_to_km);<br class="">   proj_destroy(proj);<br class="">   //INV, meters to radians<br class="">   proj = proj_create(C,param_m_to_rad);<br class="">   proj_trans_generic(proj,PJ_INV,&lonr1,ld,1,&latr1,ld,1,NULL,0,0,NULL,0,0);<br class="">   printf("m  to rad -> lon=%13.10lf, lat=%13.10lf<br class="">(%s)\n",lonr1,latr1,param_m_to_rad);<br class="">   proj_destroy(proj);<br class="">   //INV, kilometers to radians<br class="">   proj = proj_create(C,param_km_to_rad);<br class="">   proj_trans_generic(proj,PJ_INV,&lonr2,ld,1,&latr2,ld,1,NULL,0,0,NULL,0,0);<br class="">   printf("km to rad -> lon=%13.10lf, lat=%13.10lf<br class="">(%s)\n",lonr2,latr2,param_km_to_rad);<br class="">   proj_destroy(proj);<br class="">   //INV, meters to degrees<br class="">   proj = proj_create(C,param_m_to_deg);<br class=""><br class="">proj_trans_generic(proj,PJ_INV,&lond1,ld,1,&latd1,ld,1,NULL,0,0,NULL,0,0);<br class="">   printf("m  to deg -> lon=%13.10lf, lat=%13.10lf<br class="">(%s)\n",lond1,latd1,param_m_to_deg);<br class="">   proj_destroy(proj);<br class="">   //INV, kilometers to degrees<br class="">   proj = proj_create(C,param_km_to_deg);<br class=""><br class="">proj_trans_generic(proj,PJ_INV,&lond2,ld,1,&latd2,ld,1,NULL,0,0,NULL,0,0);<br class="">   printf("km to deg -> lon=%13.10lf, lat=%13.10lf<br class="">(%s)\n",lond2,latd2,param_km_to_deg);<br class="">   proj_destroy(proj);<br class="">   proj_context_destroy(C);<br class="">   return 0;<br class="">}<br class=""><br class="">El lun., 18 may. 2020 a las 23:03, José Luis García Pallero<br class="">(<<a href="mailto:jgpallero@gmail.com" class="">jgpallero@gmail.com</a>>) escribió:<br class=""><blockquote type="cite" class=""><br class="">Hello:<br class=""><br class="">I'm trying to do dome projections (forward and inverse) using the<br class="">function proj_trans_generic() and parameter string in PROJ format<br class="">(+<br class="">style) and I'm a bit confused about unit conversions. My reference<br class="">for the syntax is<br class=""><a href="https://proj.org/operations/conversions/unitconvert.html" class="">https://proj.org/operations/conversions/unitconvert.html</a><br class=""><br class="">For the forward problem I write<br class=""><br class="">C = proj_context_create();<br class="">projection = proj_create(C,param);<br class=""><br class=""></blockquote>proj_trans_generic(projection,PJ_FWD,lon,sizeof(double),nElem,lat,si<br class="">zeof(d<br class="">ouble),nElem,NULL,0,0,NULL,0,0);<br class=""><blockquote type="cite" class=""><br class="">I've used the param string<br class=""><br class="">'+proj=pipeline +step +proj=unitconvert +xy_in=deg +step +proj=utm<br class="">+lon_0=3w +ellps=GRS80 +step +proj=unitconvert +xy_out=km'<br class=""><br class="">which means that the input coordinates are in degrees and the<br class="">output in kilometers. All works right. The results are the same if<br class="">I pass the input coordinates in radians and I use the param string<br class=""><br class="">'+proj=pipeline +step +proj=utm +lon_0=3w +ellps=GRS80 +step<br class="">+proj=unitconvert +xy_out=km'<br class=""><br class="">The problem comes when I try to do the inverse step. The procedure<br class="">is the<br class=""></blockquote>same:<br class=""><blockquote type="cite" class=""><br class="">C = proj_context_create();<br class="">projection = proj_create(C,param);<br class=""><br class=""></blockquote>proj_trans_generic(projection,PJ_INV,x,sizeof(double),nElem,y,sizeof<br class="">(doubl<br class="">e),nElem,NULL,0,0,NULL,0,0);<br class=""><blockquote type="cite" class=""><br class="">In the input xoordinates are in meters and I use the param string<br class=""><br class="">'+proj=utm +lon_0=3w +ellps=GRS80'<br class=""><br class="">The resulting longtude and latitude are correct and the units are<br class="">radians. But if I use the param string<br class=""><br class="">'+proj=pipeline +step +proj=utm +lon_0=3w +ellps=GRS80 +step<br class="">+proj=unitconvert +xy_out=deg'<br class=""><br class="">The output is totally wrong. I expect degrees, but the values have<br class="">no sense. Also, if I use the input X and Y in kilometers ans the<br class="">param string is<br class=""><br class="">'+proj=pipeline +step +proj=unitconvert +xy_in=km +step +proj=utm<br class="">+lon_0=3w +ellps=GRS80'<br class=""><br class="">the result is wrong again.<br class=""><br class="">I suppose I'm doing something wrong with unit conversion, but I<br class="">can not<br class=""></blockquote>find it<br class=""><blockquote type="cite" class=""><br class="">Can someone help me?<br class=""><br class="">Thanks<br class=""><br class="">--<br class="">*****************************************<br class="">José Luis García Pallero<br class=""><a href="mailto:jgpallero@gmail.com" class="">jgpallero@gmail.com</a><br class="">(o<<br class="">/ / \<br class="">V_/_<br class="">Use Debian GNU/Linux and enjoy!<br class="">*****************************************<br class=""></blockquote><br class=""><br class=""><br class="">--<br class="">*****************************************<br class="">José Luis García Pallero<br class=""><a href="mailto:jgpallero@gmail.com" class="">jgpallero@gmail.com</a><br class="">(o<<br class="">/ / \<br class="">V_/_<br class="">Use Debian GNU/Linux and enjoy!<br class="">*****************************************<br class=""></blockquote></blockquote><br class=""><br class=""><br class="">--<br class="">*****************************************<br class="">José Luis García Pallero<br class=""><a href="mailto:jgpallero@gmail.com" class="">jgpallero@gmail.com</a><br class="">(o<<br class="">/ / \<br class="">V_/_<br class="">Use Debian GNU/Linux and enjoy!<br class="">*****************************************<br class="">_______________________________________________<br class="">PROJ mailing list<br class="">PROJ@lists.osgeo.org<br class="">https://lists.osgeo.org/mailman/listinfo/proj<br class=""></blockquote><br style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><br style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><br style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">--<span class="Apple-converted-space"> </span></span><br style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">*****************************************</span><br style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">José Luis García Pallero</span><br style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><a href="mailto:jgpallero@gmail.com" style="font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;" class="">jgpallero@gmail.com</a><br style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">(o<</span><br style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">/ / \</span><br style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">V_/_</span><br style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">Use Debian GNU/Linux and enjoy!</span><br style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">*****************************************</span><br style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">_______________________________________________</span><br style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">PROJ mailing list</span><br style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><a href="mailto:PROJ@lists.osgeo.org" style="font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;" class="">PROJ@lists.osgeo.org</a><br style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><a href="https://lists.osgeo.org/mailman/listinfo/proj" style="font-family: Menlo-Regular; font-size: 11px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;" class="">https://lists.osgeo.org/mailman/listinfo/proj</a></div></blockquote></div><br class=""></body></html>