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
[email protected]
https://lists.osgeo.org/mailman/listinfo/gdal-dev