diff options
| author | Kristian Evers <kristianevers@gmail.com> | 2018-01-31 10:56:11 +0100 |
|---|---|---|
| committer | Kristian Evers <kristianevers@gmail.com> | 2018-01-31 10:56:11 +0100 |
| commit | e979bce36ccd2bc52cabc0b1192bc0f8d4ed6f33 (patch) | |
| tree | d085407ddc842f25142b48c42e1e0ad978a2ea44 /src | |
| parent | b6c3d16dae36ed2dfd09e231c5171482553ff2d7 (diff) | |
| download | PROJ-e979bce36ccd2bc52cabc0b1192bc0f8d4ed6f33.tar.gz PROJ-e979bce36ccd2bc52cabc0b1192bc0f8d4ed6f33.zip | |
Add pj_has_inverse().
With the introduction of the "inverted" flag on PJ objects
you can no longer rely on checking that the inv, inv3d and inv4d
functions are available on said PJ object. The function is used
internally a few places and otherwise exposed in proj_api.h to
ensure that users of the old programming interface can safely
check if an operation has an inverse.
Diffstat (limited to 'src')
| -rw-r--r-- | src/PJ_pipeline.c | 3 | ||||
| -rw-r--r-- | src/pj_internal.c | 9 | ||||
| -rw-r--r-- | src/proj.def | 1 | ||||
| -rw-r--r-- | src/proj_4D_api.c | 4 | ||||
| -rw-r--r-- | src/proj_api.h | 1 |
5 files changed, 12 insertions, 6 deletions
diff --git a/src/PJ_pipeline.c b/src/PJ_pipeline.c index befc8557..2f904ab1 100644 --- a/src/PJ_pipeline.c +++ b/src/PJ_pipeline.c @@ -454,8 +454,7 @@ PJ *OPERATION(pipeline,0) { /* determine if an inverse operation is possible */ for (i = 1; i <= nsteps; i++) { PJ *Q = P->opaque->pipeline[i]; - if ( ( Q->inverted && (Q->fwd || Q->fwd3d || Q->fwd4d) ) || - ( Q->inv || Q->inv3d || Q->inv4d) ) { + if ( pj_has_inverse(Q) ) { continue; } else { P->inv = 0; diff --git a/src/pj_internal.c b/src/pj_internal.c index deb0c054..6bb33d64 100644 --- a/src/pj_internal.c +++ b/src/pj_internal.c @@ -119,7 +119,14 @@ chained calls starting out with a call to its 3D interface. return proj_coord_error (); } - +/**************************************************************************************/ +int pj_has_inverse(PJ *P) { +/*************************************************************************************** +Check if a a PJ has an inverse. +***************************************************************************************/ + return ( (P->inverted && (P->fwd || P->fwd3d || P->fwd4d) ) || + ( P->inv || P->inv3d || P->inv4d) ); +} /* Move P to a new context - or to the default context if 0 is specified */ diff --git a/src/proj.def b/src/proj.def index f758477d..6ab0c007 100644 --- a/src/proj.def +++ b/src/proj.def @@ -154,3 +154,4 @@ EXPORTS pj_approx_2D_trans @138 pj_approx_3D_trans @139 + pj_has_inverse @140 diff --git a/src/proj_4D_api.c b/src/proj_4D_api.c index 4a416084..2c6bac2d 100644 --- a/src/proj_4D_api.c +++ b/src/proj_4D_api.c @@ -696,9 +696,7 @@ PJ_PROJ_INFO proj_pj_info(PJ *P) { pj_strlcpy(info.definition, &def[1], sizeof(info.definition)); /* def includes a leading space */ pj_dealloc(def); - /* this does not take into account that a pipeline potentially does not */ - /* have an inverse. */ - info.has_inverse = (P->inv != 0 || P->inv3d != 0 || P->inv4d != 0); + info.has_inverse = pj_has_inverse(P); return info; } diff --git a/src/proj_api.h b/src/proj_api.h index 597a2589..40c40ad1 100644 --- a/src/proj_api.h +++ b/src/proj_api.h @@ -155,6 +155,7 @@ projPJ pj_init_ctx( projCtx, int, char ** ); projPJ pj_init_plus_ctx( projCtx, const char * ); char *pj_get_def(projPJ, int); projPJ pj_latlong_from_proj( projPJ ); +int pj_has_inverse(projPJ); void *pj_malloc(size_t); |
