From 18b98b324f384dbf7ebe429a6907df06fcecee3f Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Wed, 29 Aug 2018 13:59:17 +0200 Subject: 4D API: honour vto_meter / vunits for proj=longlat This worked for cs2cs / pj_transform(), but not the new API --- src/pj_fwd.c | 1 + src/pj_inv.c | 5 +++-- src/pj_transform.c | 6 ++++-- 3 files changed, 8 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/pj_fwd.c b/src/pj_fwd.c index fa9cbbc8..4bb5fbb0 100644 --- a/src/pj_fwd.c +++ b/src/pj_fwd.c @@ -137,6 +137,7 @@ static PJ_COORD fwd_finalize (PJ *P, PJ_COORD coo) { break; case PJ_IO_UNITS_ANGULAR: + coo.lpz.z = P->vfr_meter * (coo.lpz.z + P->z0); break; } diff --git a/src/pj_inv.c b/src/pj_inv.c index ab9cd78f..e5cd3f7c 100644 --- a/src/pj_inv.c +++ b/src/pj_inv.c @@ -81,8 +81,9 @@ static PJ_COORD inv_prepare (PJ *P, PJ_COORD coo) { coo.xyz.x *= P->ra; coo.xyz.y *= P->ra; return coo; - /* Silence some compiler warnings about PJ_IO_UNITS_ANGULAR not handled */ - default: + + case PJ_IO_UNITS_ANGULAR: + coo.lpz.z = P->vto_meter * coo.lpz.z - P->z0; break; } diff --git a/src/pj_transform.c b/src/pj_transform.c index 80294f6d..a2c9950e 100644 --- a/src/pj_transform.c +++ b/src/pj_transform.c @@ -190,7 +190,7 @@ static int geographic_to_projected (PJ *P, long n, int dist, double *x, double * long i; /* Nothing to do? */ - if (P->is_latlong && !P->geoc) + if (P->is_latlong && !P->geoc && P->vto_meter == 1.0) return 0; if (P->is_geocent) return 0; @@ -290,7 +290,7 @@ static int projected_to_geographic (PJ *P, long n, int dist, double *x, double * long i; /* Nothing to do? */ - if (P->is_latlong && !P->geoc) + if (P->is_latlong && !P->geoc && P->vto_meter == 1.0) return 0; /* Check first if projection is invertible. */ @@ -430,6 +430,8 @@ static int height_unit (PJ *P, PJ_DIRECTION dir, long n, int dist, double *z) { return 0; if (0==z) return 0; + if (P->is_latlong) + return 0; /* done in pj_inv3d() / pj_fwd3d() */ for (i = 0; i < n; i++) if (z[dist*i] != HUGE_VAL ) -- cgit v1.2.3