aboutsummaryrefslogtreecommitdiff
path: root/src/PJ_omerc.c
diff options
context:
space:
mode:
authorKristian Evers <kristianevers@gmail.com>2017-07-17 23:10:09 +0200
committerKristian Evers <kristianevers@gmail.com>2017-07-18 11:47:20 +0200
commitad7a7c1b1d54c69b9df442797a809418d00d647d (patch)
treead9a4dd1bb9aa1fcbc17e82508ec0482d1d6d06d /src/PJ_omerc.c
parent2ec0759b8cdd45deae8b9aba70ec7d23c7c3ddd8 (diff)
downloadPROJ-ad7a7c1b1d54c69b9df442797a809418d00d647d.tar.gz
PROJ-ad7a7c1b1d54c69b9df442797a809418d00d647d.zip
Expanded *_ERROR* macros.
Expanded *_ERROR* macros with calls to proj_errno_set() and proper returns when necessary. Defined a bunch of new PJD_ERR_ constants in projects.h that corresponds to the error numbers in pj_strerrno.c. A few unknown error numbers were replaced by existing ones in pj_strerrno.c.
Diffstat (limited to 'src/PJ_omerc.c')
-rw-r--r--src/PJ_omerc.c20
1 files changed, 14 insertions, 6 deletions
diff --git a/src/PJ_omerc.c b/src/PJ_omerc.c
index 8874784d..0d86e460 100644
--- a/src/PJ_omerc.c
+++ b/src/PJ_omerc.c
@@ -22,7 +22,8 @@
** SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#define PJ_LIB__
-#include <projects.h>
+#include <proj.h>
+#include "projects.h"
PROJ_HEAD(omerc, "Oblique Mercator")
"\n\tCyl, Sph&Ell no_rot\n\t"
@@ -50,8 +51,10 @@ static XY e_forward (LP lp, PJ *P) { /* Ellipsoidal, forward */
T = .5 * (W + temp);
V = sin(Q->B * lp.lam);
U = (S * Q->singam - V * Q->cosgam) / T;
- if (fabs(fabs(U) - 1.0) < EPS)
- F_ERROR;
+ if (fabs(fabs(U) - 1.0) < EPS) {
+ proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ return xy;
+ }
v = 0.5 * Q->ArB * log((1. - U)/(1. + U));
temp = cos(Q->B * lp.lam);
if(fabs(temp) < TOL) {
@@ -97,8 +100,10 @@ static LP e_inverse (XY xy, PJ *P) { /* Ellipsoidal, inverse */
lp.phi = Up < 0. ? -M_HALFPI : M_HALFPI;
} else {
lp.phi = Q->E / sqrt((1. + Up) / (1. - Up));
- if ((lp.phi = pj_phi2(P->ctx, pow(lp.phi, 1. / Q->B), P->e)) == HUGE_VAL)
- I_ERROR;
+ if ((lp.phi = pj_phi2(P->ctx, pow(lp.phi, 1. / Q->B), P->e)) == HUGE_VAL) {
+ proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ return lp;
+ }
lp.lam = - Q->rB * atan2((Sp * Q->cosgam -
Vp * Q->singam), cos(Q->BrA * u));
}
@@ -159,7 +164,10 @@ PJ *PROJECTION(omerc) {
(con = fabs(phi1)) <= TOL ||
fabs(con - M_HALFPI) <= TOL ||
fabs(fabs(P->phi0) - M_HALFPI) <= TOL ||
- fabs(fabs(phi2) - M_HALFPI) <= TOL) E_ERROR(-33);
+ fabs(fabs(phi2) - M_HALFPI) <= TOL) {
+ proj_errno_set(P, PJD_ERR_LAT_0_OR_ALPHA_EQ_90);
+ return freeup_new(P);
+ }
}
com = sqrt(P->one_es);
if (fabs(P->phi0) > EPS) {