<div dir="ltr">Great, thanks for looking into it. I kinda had a feeling it was related to it being outside of the traditional zone 31 box. I tried a few neighboring zones to see if (42) might pop up, and looks like it does for 29 (EPSG:23029). Coincidentally where Portugal is!<div><br></div><div>I brought up the <a href="http://epsg.io">epsg.io</a> listing because I was watching a screenshare with a user, and they were using it as their reference. In an effort to be accommodating and foresightful, I'm trying to pick up on any edge cases that might pop up as a result of anyone using that site as their EPSG reference instead of <a href="http://epsg.org">epsg.org</a>. Even if it isn't up to date or entirely correct. </div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Jul 19, 2021 at 9:42 PM Even Rouault <<a href="mailto:even.rouault@spatialys.com">even.rouault@spatialys.com</a>> wrote:<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>
    <p>Peter,</p>
    <p>PROJ doesn't propose ED50 to WGS84 (42) aka EPSG:15964 for
      EPSG:23031 to EPSG:4326 since the area of use for EPSG:15964 is
      AREA["Portugal - mainland - offshore."], 
      BBOX[34.91,-13.87,41.88,-7.24]] whereas the area of use of
      EPSG:23031 is AREA["Europe - between 0°E and 6°E - Andorra;
      Denmark (North Sea); Germany offshore; Netherlands offshore;
      Norway including Svalbard - onshore and offshore; Spain - onshore
      (mainland and Balearic Islands); United Kingdom (UKCS)
      offshore."], BBOX[38.56,0,82.45,6.01]] .</p>
    <p>You can notice that the areas of use of the CRS and the
      transformation don't intersect, hence the transformation isn't
      proposed by default.<br>
    </p>
    <p>Normally the "--crs-extent-use none" is what you would need in
      that situation to specify that you don't want the official extent
      of the source and target CRS to be taken into account when
      filtering transformation results, but unfortunately it is broken
      in currently released versions. I've issued
      <a href="https://github.com/OSGeo/PROJ/pull/2782" target="_blank">https://github.com/OSGeo/PROJ/pull/2782</a> to fix that.</p>
    <p>A workaround is to use a modified WKT for EPSG:23031 with the
      BBOX of interest (or at least intersecting the area of use of the
      transformation you're interested in), like<br>
    </p>
    <p>PROJCRS["ED50 / UTM zone 31N",<br>
          BASEGEOGCRS["ED50",<br>
              DATUM["European Datum 1950",<br>
                  ELLIPSOID["International 1924",6378388,297,<br>
                      LENGTHUNIT["metre",1]]],<br>
              PRIMEM["Greenwich",0,<br>
                  ANGLEUNIT["degree",0.0174532925199433]],<br>
              ID["EPSG",4230]],<br>
          CONVERSION["UTM zone 31N",<br>
              METHOD["Transverse Mercator",<br>
                  ID["EPSG",9807]],<br>
              PARAMETER["Latitude of natural origin",0,<br>
                  ANGLEUNIT["degree",0.0174532925199433],<br>
                  ID["EPSG",8801]],<br>
              PARAMETER["Longitude of natural origin",3,<br>
                  ANGLEUNIT["degree",0.0174532925199433],<br>
                  ID["EPSG",8802]],<br>
              PARAMETER["Scale factor at natural origin",0.9996,<br>
                  SCALEUNIT["unity",1],<br>
                  ID["EPSG",8805]],<br>
              PARAMETER["False easting",500000,<br>
                  LENGTHUNIT["metre",1],<br>
                  ID["EPSG",8806]],<br>
              PARAMETER["False northing",0,<br>
                  LENGTHUNIT["metre",1],<br>
                  ID["EPSG",8807]]],<br>
          CS[Cartesian,2],<br>
              AXIS["(E)",east,<br>
                  ORDER[1],<br>
                  LENGTHUNIT["metre",1]],<br>
              AXIS["(N)",north,<br>
                  ORDER[2],<br>
                  LENGTHUNIT["metre",1]],<br>
          USAGE[<br>
              SCOPE["unknown"],<br>
              BBOX[34.91,-13.87,41.88,-7.24]]]</p>
    <blockquote type="cite">
      <div dir="ltr">
        <div>
          <div><br>
            <div><br>
            </div>
            <div>I did try proj_crs_create_bound_crs with
              23031/4326/15964 as the base/hub/transform accordingly and
              it did succeed in this case, but I'm not sure if this is
              the best solution in general. I got back the PROJ.4
              definition on the <a href="http://epsg.io" target="_blank">epsg.io</a> page: "+proj=utm
              +zone=31 +ellps=intl
              +towgs84=-86.277,-108.879,-120.181,0,0,0,0 +units=m
              +no_defs +type=crs".</div>
            <div><br>
              Is there some way to force this transform through the
              operation context methods/pipelines?<br>
            </div>
            <br>
          </div>
        </div>
      </div>
    </blockquote>
    <p>If you remove the "+type=crs" in the above PROJ.4 CRS string, you
      can use the resulting string as a valid input for a pipeline with
      proj_create() + proj_trans(). But be aware that in that situation,
      input coordinates will be in radian, and in longitude/latitude
      order.<br>
    </p>
    <p>Even<br>
    </p>
    <pre cols="72">-- 
<a href="http://www.spatialys.com" target="_blank">http://www.spatialys.com</a>
My software is free, but my time generally not.</pre>
  </div>

</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr"><div>Peter Townsend<br></div>Senior Software Developer<br></div></div>