aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xnad/testvarious31
-rw-r--r--nad/tv_out.dist6
-rw-r--r--src/pj_fwd.c1
-rw-r--r--src/pj_inv.c5
-rw-r--r--src/pj_transform.c6
-rw-r--r--test/gie/4D-API_cs2cs-style.gie29
6 files changed, 74 insertions, 4 deletions
diff --git a/nad/testvarious b/nad/testvarious
index c0a8ff29..c6a082c1 100755
--- a/nad/testvarious
+++ b/nad/testvarious
@@ -903,6 +903,37 @@ $EXE -f '%0.3f' \
487147.594520173 4934316.46263998
EOF
+echo "##############################################################" >> ${OUT}
+echo "Test vto_meter" >> ${OUT}
+#
+$EXE -f '%0.3f' \
+ +proj=longlat +a=1 +b=1 +vto_meter=1000 \
+ +to +proj=longlat +a=1 +b=1 \
+ -E >> ${OUT} <<EOF
+0 0 1
+EOF
+
+$EXE -f '%0.3f' \
+ +proj=merc +a=1 +b=1 +vto_meter=1000 \
+ +to +proj=longlat +a=1 +b=1 \
+ -E >> ${OUT} <<EOF
+0 0 1
+EOF
+
+$EXE -f '%0.3f' \
+ +proj=longlat +a=1 +b=1 \
+ +to +proj=longlat +a=1 +b=1 +vto_meter=1000 \
+ -E >> ${OUT} <<EOF
+0 0 1000
+EOF
+
+$EXE -f '%0.3f' \
+ +proj=longlat +a=1 +b=1 \
+ +to +proj=merc +a=1 +b=1 +vto_meter=1000 \
+ -E >> ${OUT} <<EOF
+0 0 1000
+EOF
+
# Done!
# do 'diff' with distribution results
diff --git a/nad/tv_out.dist b/nad/tv_out.dist
index f04e2c35..222c0c5f 100644
--- a/nad/tv_out.dist
+++ b/nad/tv_out.dist
@@ -448,3 +448,9 @@ Test patterson inverse projection
##############################################################
Test Web Mercator to avoid issue #834 in the future
487147.594520173 4934316.46263998 -10370728.796 5552839.742 -0.000
+##############################################################
+Test vto_meter
+0 0 1 0.000 0.000 1000.000
+0 0 1 0.000 0.000 1000.000
+0 0 1000 0.000 0.000 1.000
+0 0 1000 0.000 0.000 1.000
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 )
diff --git a/test/gie/4D-API_cs2cs-style.gie b/test/gie/4D-API_cs2cs-style.gie
index 20aa04c6..346f2d36 100644
--- a/test/gie/4D-API_cs2cs-style.gie
+++ b/test/gie/4D-API_cs2cs-style.gie
@@ -337,4 +337,33 @@ accept 90 0 0
expect 0 1 0
roundtrip 1
+-------------------------------------------------------------------------------
+Check that vunits / vto_meter is honored
+-------------------------------------------------------------------------------
+
+operation +proj=longlat +a=1 +b=1 +vto_meter=1000
+accept 0 0 1000
+expect 0 0 1
+roundtrip 1
+
+operation +proj=longlat +a=1 +b=1 +vto_meter=1000 +geoc
+accept 0 0 1000
+expect 0 0 1
+roundtrip 1
+
+operation +proj=longlat +a=1 +b=1 +vunits=km
+accept 0 0 1000
+expect 0 0 1
+roundtrip 1
+
+operation +proj=merc +a=1 +b=1 +vto_meter=1000
+accept 0 0 1000
+expect 0 0 1
+roundtrip 1
+
+operation +proj=merc +a=1 +b=1 +vunits=km
+accept 0 0 1000
+expect 0 0 1
+roundtrip 1
+
</gie>