aboutsummaryrefslogtreecommitdiff
path: root/src/projections/tpeqd.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/projections/tpeqd.cpp')
-rw-r--r--src/projections/tpeqd.cpp12
1 files changed, 8 insertions, 4 deletions
diff --git a/src/projections/tpeqd.cpp b/src/projections/tpeqd.cpp
index 20921de4..b306968c 100644
--- a/src/projections/tpeqd.cpp
+++ b/src/projections/tpeqd.cpp
@@ -16,7 +16,7 @@ struct pj_opaque {
} // anonymous namespace
-static PJ_XY s_forward (PJ_LP lp, PJ *P) { /* Spheroidal, forward */
+static PJ_XY tpeqd_s_forward (PJ_LP lp, PJ *P) { /* Spheroidal, forward */
PJ_XY xy = {0.0, 0.0};
struct pj_opaque *Q = static_cast<struct pj_opaque*>(P->opaque);
double t, z1, z2, dl1, dl2, sp, cp;
@@ -37,7 +37,7 @@ static PJ_XY s_forward (PJ_LP lp, PJ *P) { /* Spheroidal, forward */
}
-static PJ_LP s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, inverse */
+static PJ_LP tpeqd_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, inverse */
PJ_LP lp = {0.0,0.0};
struct pj_opaque *Q = static_cast<struct pj_opaque*>(P->opaque);
double cz1, cz2, s, d, cp, sp;
@@ -87,6 +87,10 @@ PJ *PROJECTION(tpeqd) {
Q->sc = Q->sp1 * Q->cp2;
Q->ccs = Q->cp1 * Q->cp2 * sin(Q->dlam2);
Q->z02 = aacos(P->ctx, Q->sp1 * Q->sp2 + Q->cp1 * Q->cp2 * cos (Q->dlam2));
+ if( Q->z02 == 0.0 ) {
+ // Actually happens when both lat_1 = lat_2 and |lat_1| = 90
+ return pj_default_destructor(P, PJD_ERR_LAT_1_OR_2_ZERO_OR_90);
+ }
Q->hz0 = .5 * Q->z02;
A12 = atan2(Q->cp2 * sin (Q->dlam2),
Q->cp1 * Q->sp2 - Q->sp1 * Q->cp2 * cos (Q->dlam2));
@@ -100,8 +104,8 @@ PJ *PROJECTION(tpeqd) {
Q->r2z0 = 0.5 / Q->z02;
Q->z02 *= Q->z02;
- P->inv = s_inverse;
- P->fwd = s_forward;
+ P->inv = tpeqd_s_inverse;
+ P->fwd = tpeqd_s_forward;
P->es = 0.;
return P;