aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEven Rouault <even.rouault@spatialys.com>2018-12-10 11:14:56 +0100
committerEven Rouault <even.rouault@spatialys.com>2018-12-10 11:14:56 +0100
commit5fca5d41ef8b3ba0dd458ca78d96bfc2fd7b63a1 (patch)
tree43d36273828dcebd2654c67eaf268ec88d207f52 /src
parent3945d99793709ba68b614fbdd24c1b9069be475b (diff)
downloadPROJ-5fca5d41ef8b3ba0dd458ca78d96bfc2fd7b63a1.tar.gz
PROJ-5fca5d41ef8b3ba0dd458ca78d96bfc2fd7b63a1.zip
Molodensky: allow parameters to be set to zero
The computations work perfectly when one or all parameters are zero. I've been shown a case where there was no ellipsoid change, so da = df = 0.
Diffstat (limited to 'src')
-rw-r--r--src/PJ_molodensky.c25
1 files changed, 18 insertions, 7 deletions
diff --git a/src/PJ_molodensky.c b/src/PJ_molodensky.c
index 2db51038..dbc83768 100644
--- a/src/PJ_molodensky.c
+++ b/src/PJ_molodensky.c
@@ -272,6 +272,7 @@ static PJ_COORD reverse_4d(PJ_COORD obs, PJ *P) {
PJ *TRANSFORMATION(molodensky,1) {
+ int count_required_params = 0;
struct pj_opaque_molodensky *Q = pj_calloc(1, sizeof(struct pj_opaque_molodensky));
if (0==Q)
return pj_default_destructor(P, ENOMEM);
@@ -288,28 +289,38 @@ PJ *TRANSFORMATION(molodensky,1) {
P->right = PJ_IO_UNITS_ANGULAR;
/* read args */
- if (pj_param(P->ctx, P->params, "tdx").i)
+ if (pj_param(P->ctx, P->params, "tdx").i) {
+ count_required_params ++;
Q->dx = pj_param(P->ctx, P->params, "ddx").f;
+ }
- if (pj_param(P->ctx, P->params, "tdy").i)
+ if (pj_param(P->ctx, P->params, "tdy").i) {
+ count_required_params ++;
Q->dy = pj_param(P->ctx, P->params, "ddy").f;
+ }
- if (pj_param(P->ctx, P->params, "tdz").i)
+ if (pj_param(P->ctx, P->params, "tdz").i) {
+ count_required_params ++;
Q->dz = pj_param(P->ctx, P->params, "ddz").f;
+ }
- if (pj_param(P->ctx, P->params, "tda").i)
+ if (pj_param(P->ctx, P->params, "tda").i) {
+ count_required_params ++;
Q->da = pj_param(P->ctx, P->params, "dda").f;
+ }
- if (pj_param(P->ctx, P->params, "tdf").i)
+ if (pj_param(P->ctx, P->params, "tdf").i) {
+ count_required_params ++;
Q->df = pj_param(P->ctx, P->params, "ddf").f;
+ }
Q->abridged = pj_param(P->ctx, P->params, "tabridged").i;
/* We want all parameters (except +abridged) to be set */
- if ((Q->dx == 0) && (Q->dy == 0) && (Q->dz == 0) && (Q->da == 0) && (Q->df == 0))
+ if (count_required_params == 0)
return pj_default_destructor(P, PJD_ERR_NO_ARGS);
- if ((Q->dx == 0) || (Q->dy == 0) || (Q->dz == 0) || (Q->da == 0) || (Q->df == 0))
+ if (count_required_params != 5)
return pj_default_destructor(P, PJD_ERR_MISSING_ARGS);
return P;