diff -rupN --no-dereference ncl-6.6.2/ni/src/lib/nfp/TransformCoordinate.c ncl-6.6.2-new/ni/src/lib/nfp/TransformCoordinate.c --- ncl-6.6.2/ni/src/lib/nfp/TransformCoordinate.c 2019-02-28 00:44:39.000000000 +0100 +++ ncl-6.6.2-new/ni/src/lib/nfp/TransformCoordinate.c 2021-03-10 19:16:04.100897315 +0100 @@ -1,48 +1,39 @@ #include -#include +#include #include "TransformCoordinate.h" int TransformCoordinate(char * SrcProjStr, char * DstProjStr, double * x, double * y, double * z, unsigned int nPoint) { - projPJ SrcProj, DstProj; + PJ *proj; int Err, i; + PJ_COORD* c = (PJ_COORD*)malloc(nPoint * sizeof(PJ_COORD)); /* Constructing the projections */ - if (!(SrcProj = pj_init_plus(SrcProjStr))) { - printf("FATAL ERROR: Can not make a projection out of <%s>\n", SrcProjStr); + if (!(proj = proj_create_crs_to_crs(PJ_DEFAULT_CTX, SrcProjStr, DstProjStr, NULL))) { + printf("FATAL ERROR: Can not create transform from <%s> to <%s>\n", SrcProjStr, DstProjStr); return (1); } - if (!(DstProj = pj_init_plus(DstProjStr))) { - printf("FATAL ERROR: Can not make a projection out of <%s>\n", DstProjStr); - return (2); - } - /* Converting to radian if needed */ - if (pj_is_latlong(SrcProj)) { - for (i = 0; i < nPoint; i++) { - x[i] *= DEG_TO_RAD; - y[i] *= DEG_TO_RAD; - } + for (i = 0; i < nPoint; ++i) { + c[i].xyz.x = x[i]; + c[i].xyz.y = y[i]; + c[i].xyz.z = z[i]; } /* Transforming the coordinates */ - if ((Err = pj_transform(SrcProj, DstProj, nPoint, 1, x, y, z)) != 0) { - printf("FATAL ERROR: %s\n", pj_strerrno(Err)); - return (3); - } + proj_trans_array(proj, PJ_FWD, nPoint, c); - /* converting to degree if needed */ - if (pj_is_latlong(DstProj)) { - for (i = 0; i < nPoint; i++) { - x[i] *= RAD_TO_DEG; - y[i] *= RAD_TO_DEG; - } + for (i = 0; i < nPoint; ++i) { + x[i] = c[i].xyz.x; + y[i] = c[i].xyz.y; + z[i] = c[i].xyz.z; } /* freeing the projection */ - pj_free(DstProj); - pj_free(SrcProj); + proj_destroy(proj); + free(c); + return (0); }