aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEven Rouault <even.rouault@spatialys.com>2018-08-29 13:59:17 +0200
committerEven Rouault <even.rouault@spatialys.com>2018-08-29 14:06:25 +0200
commit18b98b324f384dbf7ebe429a6907df06fcecee3f (patch)
tree144b9dc75a4ae3f688b86812c6ca77d971a6cb34 /src
parent1ea7ff15668566695e9c5a5b6137a7c466ef61f4 (diff)
downloadPROJ-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.c1
-rw-r--r--src/pj_inv.c5
-rw-r--r--src/pj_transform.c6
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 )