diff options
| -rwxr-xr-x | nad/testvarious | 31 | ||||
| -rw-r--r-- | nad/tv_out.dist | 6 | ||||
| -rw-r--r-- | src/pj_fwd.c | 1 | ||||
| -rw-r--r-- | src/pj_inv.c | 5 | ||||
| -rw-r--r-- | src/pj_transform.c | 6 | ||||
| -rw-r--r-- | test/gie/4D-API_cs2cs-style.gie | 29 |
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> |
