aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKristian Evers <kristianevers@gmail.com>2017-07-13 14:00:47 +0200
committerKristian Evers <kristianevers@gmail.com>2017-07-13 14:00:47 +0200
commit40bc7c0bb8b422774be37fa7af0f80877bb52696 (patch)
tree2ef2c44e2f03b53985e2c6943628261b664d5e1b /src
parent94210f99b79b486c39a18a450f89ea2faffd361c (diff)
downloadPROJ-40bc7c0bb8b422774be37fa7af0f80877bb52696.tar.gz
PROJ-40bc7c0bb8b422774be37fa7af0f80877bb52696.zip
Add proj_dmstor() and proj_rtodms() to proj.h API. Resolves #172.
Diffstat (limited to 'src')
-rw-r--r--src/PJ_cart.c15
-rw-r--r--src/pj_obs_api.c8
-rw-r--r--src/proj.def4
-rw-r--r--src/proj.h3
4 files changed, 29 insertions, 1 deletions
diff --git a/src/PJ_cart.c b/src/PJ_cart.c
index 1109b01b..a40ebdaf 100644
--- a/src/PJ_cart.c
+++ b/src/PJ_cart.c
@@ -242,6 +242,7 @@ int pj_cart_selftest (void) {
char *args[3] = {"proj=utm", "zone=32", "ellps=GRS80"};
char *arg = {" +proj=utm +zone=32 +ellps=GRS80"};
char *arg_def;
+ char buf[40];
/* An utm projection on the GRS80 ellipsoid */
P = proj_create (0, arg);
@@ -490,6 +491,20 @@ int pj_cart_selftest (void) {
}
proj_destroy(P);
+ /* test proj_rtodms() and proj_dmstor() */
+ if (strcmp("180dN", proj_rtodms(buf, M_PI, 'N', 'S')))
+ return 70;
+
+ if (proj_dmstor(&buf[0], NULL) != M_PI)
+ return 71;
+
+ if (strcmp("114d35'29.612\"S", proj_rtodms(buf, -2.0, 'N', 'S')))
+ return 72;
+
+ /* we can't expect perfect numerical accuracy so testing with a tolerance */
+ if (fabs(-2.0 - proj_dmstor(&buf[0], NULL)) > 1e-7)
+ return 73;
+
return 0;
}
diff --git a/src/pj_obs_api.c b/src/pj_obs_api.c
index 4fac1dac..05fe58f0 100644
--- a/src/pj_obs_api.c
+++ b/src/pj_obs_api.c
@@ -529,3 +529,11 @@ 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);
}
+
+double proj_dmstor(const char *is, char **rs) {
+ return dmstor(is, rs);
+}
+
+char* proj_rtodms(char *s, double r, int pos, int neg) {
+ return rtodms(s, r, pos, neg);
+}
diff --git a/src/proj.def b/src/proj.def
index abb17765..5a762291 100644
--- a/src/proj.def
+++ b/src/proj.def
@@ -133,5 +133,7 @@ EXPORTS
proj_torad @123
proj_todeg @124
proj_has_inverse @125
+ proj_rtodms @126
+ proj_dmstor @127
- pj_find_file @126
+ pj_find_file @128
diff --git a/src/proj.h b/src/proj.h
index c0b8b7cc..398368c4 100644
--- a/src/proj.h
+++ b/src/proj.h
@@ -353,6 +353,9 @@ double proj_todeg (double angle_in_radians);
/* Check if a projection has an inverse mapping */
int proj_has_inverse(PJ *P);
+double proj_dmstor(const char *is, char **rs);
+char* proj_rtodms(char *s, double r, int pos, int neg);
+
#ifdef __cplusplus
}