Skip to content

Commit

Permalink
Merge pull request #1194 from rouault/molodensky_zero_params
Browse files Browse the repository at this point in the history
Molodensky: allow parameters to be set to zero
  • Loading branch information
rouault committed Dec 10, 2018
2 parents 3945d99 + 5fca5d4 commit c014598
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 7 deletions.
25 changes: 18 additions & 7 deletions src/PJ_molodensky.c
Expand Up @@ -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);
Expand All @@ -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;
Expand Down
23 changes: 23 additions & 0 deletions test/gie/more_builtins.gie
Expand Up @@ -57,6 +57,29 @@ expect 144.968 -37.79848 46.378 0

roundtrip 100 1 m
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
Molodensky with all 0 parameters
-------------------------------------------------------------------------------
operation proj=molodensky a=6378160 rf=298.25
da=0 df=0 dx=0 dy=0 dz=0
-------------------------------------------------------------------------------
tolerance 1 mm

accept 144.9667 -37.8 50 0
expect 144.9667 -37.8 50 0

roundtrip 1
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
Test error cases of molodensky
-------------------------------------------------------------------------------
# No arguments
operation proj=molodensky a=6378160 rf=298.25
expect failure errno no_args

# Missing arguments
operation proj=molodensky a=6378160 rf=298.25 dx=0
expect failure errno missing_arg


-------------------------------------------------------------------------------
Expand Down

0 comments on commit c014598

Please sign in to comment.