[gdal-dev] OGRCreateCoordinateTransformation problem on GDAL 3.0.3 and PROJ 6.3.0

Edzer Pebesma edzer.pebesma at uni-muenster.de
Thu Jan 23 09:35:40 PST 2020

On 1/23/20 5:58 PM, Even Rouault wrote:
>> Thanks! Yes, with SRS->importFromUserInput("EPSG:3857"); etc this works
>> fine; I'm OK with the warning, I just don't see how the subsequent error
>> relates to syntax that is deprecated.
> I'm looking at this, but haven't yet an explanation. This is very subtle,
> and seems to be linked specifically to EPSG:3857

I don't think so: I see the same problem if I use +init=epsg:28992
rather than +init=epsg:3875.

Your advice of improving this C++ program is well meant, but fixing this
C++ program is not my problem, the problem is how we use GDAL's SRS
interface in R packages. I saw the error occuring at pretty random
occasions, but always errors _after_ one or more +init=epsg:xxxx strings
had been used to initialize an SRS.

> I've modified your reproducer as the following:
> int main() {
>    OGRSpatialReference *aSRS = new OGRSpatialReference;
>    aSRS->importFromWkt("GEOGCRS[\"WGS 84\",DATUM[\"World Geodetic System 1984\",ELLIPSOID[\"WGS 84\",6378137,298.257223563,LENGTHUNIT[\"metre\",1]],ID[\"EPSG\",6326]],PRIMEM[\"Greenwich\",0,ANGLEUNIT[\"degree\",0.0174532925199433],ID[\"EPSG\",8901]],CS[ellipsoidal,2],AXIS[\"longitude\",east,ORDER[1],ANGLEUNIT[\"degree\",0.0174532925199433,ID[\"EPSG\",9122]]],AXIS[\"latitude\",north,ORDER[2],ANGLEUNIT[\"degree\",0.0174532925199433,ID[\"EPSG\",9122]]]]");
>    OGRSpatialReference *bSRS = new OGRSpatialReference;
> #ifdef WORKING
>    OGRSpatialReference srs;
>    srs.importFromProj4("+init=epsg:3857");
>    char* wktb = NULL;
>    srs.exportToPrettyWkt(&wktb);
> #else
>    bSRS->importFromProj4("+init=epsg:3857");
>    const char* wktb = "PROJCRS[\"WGS 84 / Pseudo-Mercator\",BASEGEOGCRS[\"WGS 84\",DATUM[\"World Geodetic System 1984\",ELLIPSOID[\"WGS 84\",6378137,298.257223563,LENGTHUNIT[\"metre\",1]]],PRIMEM[\"Greenwich\",0,ANGLEUNIT[\"degree\",0.0174532925199433]],ID[\"EPSG\",4326]],CONVERSION[\"unnamed\",METHOD[\"Popular Visualisation Pseudo Mercator\",ID[\"EPSG\",1024]],PARAMETER[\"Latitude of natural origin\",0,ANGLEUNIT[\"degree\",0.0174532925199433],ID[\"EPSG\",8801]],PARAMETER[\"Longitude of natural origin\",0,ANGLEUNIT[\"degree\",0.0174532925199433],ID[\"EPSG\",8802]],PARAMETER[\"False easting\",0,LENGTHUNIT[\"metre\",1],ID[\"EPSG\",8806]],PARAMETER[\"False northing\",0,LENGTHUNIT[\"metre\",1],ID[\"EPSG\",8807]]],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]]]]";
> #endif
>    bSRS->importFromWkt((const char *) wktb);
>    OGRCoordinateTransformation *ct =
> OGRCreateCoordinateTransformation(aSRS, bSRS);
>    if (ct == NULL) {
>         printf("ct NULL\n");
>         exit(1);
>    }
>    exit(0);
> }
> So the error is linked to having importFromProj4() and then importFromWkt()
> This doesn't make sense as the later should cancel the former, so there's some
> side effect of importFromProj4() that has later consequences.
> If you define WORKING, which will do the importFromProj4() + exportToPrettyWkt() 
> in a temporary object, and import the resulting WKT in the final bSRS, then
> it works. Doesn't make sense either but could be a workaround
> But Sean's advice is definitely the way forward . Use importFromEPSG(XXXX) or
> SetFromUserInput("EPSG:XXXX")
> And SetAxisMappingStrategy(OAMS_TRADITIONAL_GIS_ORDER) if you don't
> want EPSG compliant axis definitions.
> Even

Edzer Pebesma
Institute for Geoinformatics
Heisenbergstrasse 2, 48151 Muenster, Germany
Phone: +49 251 8333081
-------------- next part --------------
A non-text attachment was scrubbed...
Name: pEpkey.asc
Type: application/pgp-keys
Size: 3110 bytes
Desc: not available
URL: <http://lists.osgeo.org/pipermail/gdal-dev/attachments/20200123/1f133c4f/attachment.key>

More information about the gdal-dev mailing list