<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>