[gdal-dev] Help: No coordinate conversion using OGRSpatialReference/OGRCoordinateTransformation in version 2.2.3

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

[gdal-dev] Help: No coordinate conversion using OGRSpatialReference/OGRCoordinateTransformation in version 2.2.3

Davide De Marchi



Dear GDAL list,

I'm having problems using the standard way to convert coordinate points from a source to a target SRS. After updating to version 2.2.3, code that always worked started to leave the input coordinate unchanged, without giving any error or warning.
This is the code I use:

bool ConvertPoint(int InputEPSG, int OutputEPSG, double *x, double *y)
{
 bool res = false;
 OGRSpatialReference oSourceSRS, oTargetSRS;
 OGRCoordinateTransformation *poCT;
    
 if( oSourceSRS.importFromEPSG(InputEPSG)  != OGRERR_NONE ) printf("OGRSpatialReference failed to importFromEPSG %d.\n",InputEPSG); 
 if( oTargetSRS.importFromEPSG(OutputEPSG) != OGRERR_NONE ) printf("OGRSpatialReference failed to importFromEPSG %d.\n",OutputEPSG); 

 poCT = OGRCreateCoordinateTransformation(&oSourceSRS, &oTargetSRS);
 if( !poCT )
   {
    printf("OGRCreateCoordinateTransformation failed.\n");
    return false;
   }

 double z = 0.0;
 if( !poCT->Transform(1,x,y,&z) ) printf("Transformation failed.\n");
 else res = true;

 delete poCT;
 return res;
}

If I call, for instance:

double x = 12.5;
double y = 43.0;
ConvertPoint(4326, 32633, &x, &y);

x and y remain unchanged and no error or warning is printed.

I tried to change the function by looking at the code of gdaltransform app:

bool ConvertPoint(int InputEPSG, int OutputEPSG, double *x, double *y)
{
 bool res = false;

 GDALTransformerFunc pfnTransformer = nullptr;
 void               *hTransformArg;
 int                 bInverse = FALSE;
 char              **papszTO  = nullptr;

 char fromBuffer[100], toBuffer[100];
 sprintf(fromBuffer,"EPSG:%d",InputEPSG);
 sprintf(toBuffer,  "EPSG:%d",OutputEPSG);

 char *pszFROM = SanitizeSRS(fromBuffer);
 papszTO = CSLSetNameValue(papszTO, "SRC_SRS", pszFROM);
 CPLFree(pszFROM);

 char *pszTO = SanitizeSRS(toBuffer);
 papszTO = CSLSetNameValue(papszTO, "DST_SRS", pszTO);
 CPLFree(pszTO);

 pfnTransformer = GDALGenImgProjTransform;
 hTransformArg = GDALCreateGenImgProjTransformer2(nullptr, nullptr, papszTO);
 CSLDestroy(papszTO);
 if( hTransformArg == nullptr )
   {
    printf("GDALCreateGenImgProjTransformer2 failed.\n");
    return false;
   }

 double z = 0.0;
 int bSuccess = TRUE;
 if( pfnTransformer(hTransformArg, bInverse, 1, x, y, &z, &bSuccess ) && bSuccess ) res = true;
 else printf("Transformation failed.\n");

 GDALDestroyGenImgProjTransformer(hTransformArg);

 return res;
}

In this case everything works well and the coordinates are transformed.

What I'm doing wrong in my first original function?
Any hints?

Thank you!

Davide De Marchi (JRC European Commission)



_______________________________________________
gdal-dev mailing list
[hidden email]
https://lists.osgeo.org/mailman/listinfo/gdal-dev