diff options
| -rw-r--r-- | src/PJ_cart.c | 17 | ||||
| -rw-r--r-- | src/pj_obs_api.c | 4 | ||||
| -rw-r--r-- | src/proj.def | 3 | ||||
| -rw-r--r-- | src/proj.h | 5 |
4 files changed, 28 insertions, 1 deletions
diff --git a/src/PJ_cart.c b/src/PJ_cart.c index c6d1dd74..1109b01b 100644 --- a/src/PJ_cart.c +++ b/src/PJ_cart.c @@ -473,6 +473,23 @@ int pj_cart_selftest (void) { proj_destroy(P); return 52; } + proj_destroy(P); + + /* Test proj_has_inverse() */ + P = proj_create(0, "+proj=august"); /* august has no inverse */ + if (proj_has_inverse(P)) { + proj_destroy(P); + return 60; + } + proj_destroy(P); + + P = proj_create(0, "+proj=merc"); /* merc has an inverse */ + if (!proj_has_inverse(P)) { + proj_destroy(P); + return 61; + } + proj_destroy(P); + return 0; } diff --git a/src/pj_obs_api.c b/src/pj_obs_api.c index 81a6e337..4fac1dac 100644 --- a/src/pj_obs_api.c +++ b/src/pj_obs_api.c @@ -525,3 +525,7 @@ void *proj_release (void *buffer) { double proj_torad (double angle_in_degrees) { return PJ_TORAD (angle_in_degrees);} double proj_todeg (double angle_in_radians) { return PJ_TODEG (angle_in_radians);} + +int proj_has_inverse(PJ *P) { + return (P->inv != 0 || P->inv3d != 0 || P->invobs != 0); +} diff --git a/src/proj.def b/src/proj.def index a61151ed..abb17765 100644 --- a/src/proj.def +++ b/src/proj.def @@ -132,5 +132,6 @@ EXPORTS proj_release @122 proj_torad @123 proj_todeg @124 + proj_has_inverse @125 - pj_find_file @125 + pj_find_file @126 @@ -337,6 +337,7 @@ void proj_errno_set (PJ *P, int err); int proj_errno_reset (PJ *P); void proj_errno_restore (PJ *P, int err); + /* Build a fully expanded proj_create() compatible representation of P */ char *proj_definition_retrieve (PJ *P); /* ...and get rid of it safely */ @@ -349,6 +350,10 @@ void *proj_release (void *buffer); double proj_torad (double angle_in_degrees); double proj_todeg (double angle_in_radians); +/* Check if a projection has an inverse mapping */ +int proj_has_inverse(PJ *P); + + #ifdef __cplusplus } #endif |
