aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/PJ_cart.c17
-rw-r--r--src/pj_obs_api.c4
-rw-r--r--src/proj.def3
-rw-r--r--src/proj.h5
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
diff --git a/src/proj.h b/src/proj.h
index f94fb384..c0b8b7cc 100644
--- a/src/proj.h
+++ b/src/proj.h
@@ -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