aboutsummaryrefslogtreecommitdiff
path: root/src/projections/sconics.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/projections/sconics.cpp')
-rw-r--r--src/projections/sconics.cpp33
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;