aboutsummaryrefslogtreecommitdiff
path: root/src/projections
diff options
context:
space:
mode:
authorEven Rouault <even.rouault@spatialys.com>2021-09-15 06:41:23 +0200
committerEven Rouault <even.rouault@spatialys.com>2021-09-15 06:58:26 +0200
commitd209e4ab62e9ab6f1c3825acd518bec421aebf12 (patch)
tree70ee380c12a202a82b4883783cb40f120ebb533a /src/projections
parent3bd64e8532521d61119df0a6a365a0a32b5c9b15 (diff)
downloadPROJ-d209e4ab62e9ab6f1c3825acd518bec421aebf12.tar.gz
PROJ-d209e4ab62e9ab6f1c3825acd518bec421aebf12.zip
Inverse ellipsoidal orthographic projection (oblique case): fix convergence at pole
Diffstat (limited to 'src/projections')
-rw-r--r--src/projections/ortho.cpp12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/projections/ortho.cpp b/src/projections/ortho.cpp
index d2d113ef..c334f398 100644
--- a/src/projections/ortho.cpp
+++ b/src/projections/ortho.cpp
@@ -261,8 +261,16 @@ static PJ_LP ortho_e_inverse (PJ_XY xy, PJ *P) { /* Ellipsoidal, inver
const double dphi = (J22 * dx - J12 * dy) / D;
const double dlam = (-J21 * dx + J11 * dy) / D;
lp.phi += dphi;
- if( lp.phi > M_PI_2) lp.phi = M_PI_2;
- else if( lp.phi < -M_PI_2) lp.phi = -M_PI_2;
+ if( lp.phi > M_PI_2)
+ {
+ lp.phi = M_PI_2 - (M_PI_2 - lp.phi);
+ lp.lam = adjlon(lp.lam + 180);
+ }
+ else if( lp.phi < -M_PI_2)
+ {
+ lp.phi = -M_PI_2 + (-M_PI_2 - lp.phi);
+ lp.lam = adjlon(lp.lam + 180);
+ }
lp.lam += dlam;
if( fabs(dphi) < 1e-12 && fabs(dlam) < 1e-12 )
{