diff options
Diffstat (limited to 'src/projections/sconics.cpp')
| -rw-r--r-- | src/projections/sconics.cpp | 33 |
1 files changed, 24 insertions, 9 deletions
diff --git a/src/projections/sconics.cpp b/src/projections/sconics.cpp index c12b05a2..9084404c 100644 --- a/src/projections/sconics.cpp +++ b/src/projections/sconics.cpp @@ -48,15 +48,28 @@ static int phi12(PJ *P, double *del) { double p1, p2; int err = 0; - if (!pj_param(P->ctx, P->params, "tlat_1").i || - !pj_param(P->ctx, P->params, "tlat_2").i) { - err = -41; - } else { + if (!pj_param(P->ctx, P->params, "tlat_1").i ) + { + proj_log_error(P, _("Missing parameter: lat_1 should be specified")); + err = PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE; + } + else if ( !pj_param(P->ctx, P->params, "tlat_2").i) + { + proj_log_error(P, _("Missing parameter: lat_2 should be specified")); + err = PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE; + } + else + { p1 = pj_param(P->ctx, P->params, "rlat_1").f; p2 = pj_param(P->ctx, P->params, "rlat_2").f; *del = 0.5 * (p2 - p1); - static_cast<struct pj_opaque*>(P->opaque)->sig = 0.5 * (p2 + p1); - err = (fabs(*del) < EPS || fabs(static_cast<struct pj_opaque*>(P->opaque)->sig) < EPS) ? PJD_ERR_ABS_LAT1_EQ_ABS_LAT2 : 0; + const double sig = 0.5 * (p2 + p1); + static_cast<struct pj_opaque*>(P->opaque)->sig = sig; + err = (fabs(*del) < EPS || fabs(sig) < EPS) ? PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE : 0; + if( err ) + { + proj_log_error(P, _("Illegal value for lat_1 and lat_2: |lat_1 - lat_2| and |lat_1 + lat_2| should be > 0")); + } } return err; } @@ -119,7 +132,7 @@ static PJ *setup(PJ *P, enum Type type) { int err; struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; Q->type = type; @@ -167,8 +180,10 @@ static PJ *setup(PJ *P, enum Type type) { Q->c1 = 1./tan (Q->sig); del = P->phi0 - Q->sig; if (fabs (del) - EPS10 >= M_HALFPI) - return pj_default_destructor(P, PJD_ERR_LAT_0_HALF_PI_FROM_MEAN); - + { + proj_log_error(P, _("Invalid value for lat_0/lat_1/lat_2: |lat_0 - 0.5 * (lat_1 + lat_2)| should be < 90°")); + return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } Q->rho_0 = Q->c2 * (Q->c1 - tan (del)); break; |
