diff options
| author | Even Rouault <even.rouault@spatialys.com> | 2018-08-29 13:59:17 +0200 |
|---|---|---|
| committer | Even Rouault <even.rouault@spatialys.com> | 2018-08-29 14:06:25 +0200 |
| commit | 18b98b324f384dbf7ebe429a6907df06fcecee3f (patch) | |
| tree | 144b9dc75a4ae3f688b86812c6ca77d971a6cb34 /src | |
| parent | 1ea7ff15668566695e9c5a5b6137a7c466ef61f4 (diff) | |
| download | PROJ-18b98b324f384dbf7ebe429a6907df06fcecee3f.tar.gz PROJ-18b98b324f384dbf7ebe429a6907df06fcecee3f.zip | |
4D API: honour vto_meter / vunits for proj=longlat
This worked for cs2cs / pj_transform(), but not the new API
Diffstat (limited to 'src')
| -rw-r--r-- | src/pj_fwd.c | 1 | ||||
| -rw-r--r-- | src/pj_inv.c | 5 | ||||
| -rw-r--r-- | src/pj_transform.c | 6 |
3 files changed, 8 insertions, 4 deletions
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 ) |
