aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/conversions/cart.cpp5
-rw-r--r--test/gie/more_builtins.gie2
2 files changed, 4 insertions, 3 deletions
diff --git a/src/conversions/cart.cpp b/src/conversions/cart.cpp
index a7817443..537fc29f 100644
--- a/src/conversions/cart.cpp
+++ b/src/conversions/cart.cpp
@@ -165,8 +165,9 @@ static PJ_LPZ geodetic (PJ_XYZ cart, PJ *P) {
if( fabs(lpz.phi) > M_HALFPI ) {
// this happen on non-sphere ellipsoid when x,y,z is very close to 0
// there is no single solution to the cart->geodetic conversion in
- // that case, so arbitrarily pickup phi = 0.
- lpz.phi = 0;
+ // that case, clamp to -90/90 deg and avoid a discontinuous boundary
+ // near the poles
+ lpz.phi = copysign(M_HALFPI, lpz.phi);
}
lpz.lam = atan2 (cart.y, cart.x);
N = normal_radius_of_curvature (P->a, P->es, lpz.phi);
diff --git a/test/gie/more_builtins.gie b/test/gie/more_builtins.gie
index 10d3ea47..424f941d 100644
--- a/test/gie/more_builtins.gie
+++ b/test/gie/more_builtins.gie
@@ -851,7 +851,7 @@ expect 180 0 0
# Center of Earth !
accept 0 0 0
-expect 0 0 -6378137
+expect 0 90 -6356752.314140356
</gie>