diff options
| author | Kristian Evers <kristianevers@gmail.com> | 2019-03-24 11:35:16 +0100 |
|---|---|---|
| committer | Kristian Evers <kristianevers@gmail.com> | 2019-03-24 12:08:35 +0100 |
| commit | 10e1b7b75f70c704cf78a7eb7197beebb4b82d4a (patch) | |
| tree | 48b8f4d73dfddef9f16d2748c3cf33afc808fc31 | |
| parent | d089e17fde8a636198cf21f1045fc6bee20d987d (diff) | |
| download | PROJ-10e1b7b75f70c704cf78a7eb7197beebb4b82d4a.tar.gz PROJ-10e1b7b75f70c704cf78a7eb7197beebb4b82d4a.zip | |
Make cs2cs support 4D coordinates.
This is a bit of a hack, 4D coordinates *will* be written to STDOUT
but the output format speficied with -f is not respected for the
t component, rather it is forward verbatim from the input.
Fixes #1354
| -rw-r--r-- | src/apps/cs2cs.cpp | 19 | ||||
| -rwxr-xr-x | test/cli/testvarious | 13 | ||||
| -rw-r--r-- | test/cli/tv_out.dist | 4 |
3 files changed, 32 insertions, 4 deletions
diff --git a/src/apps/cs2cs.cpp b/src/apps/cs2cs.cpp index dafd06f8..c68572fa 100644 --- a/src/apps/cs2cs.cpp +++ b/src/apps/cs2cs.cpp @@ -113,6 +113,17 @@ static void process(FILE *fid) z = strtod(s, &s); + /* To avoid breaking existing tests, we read what is a possible t */ + /* component of the input and rewind the s-pointer so that the final */ + /* output has consistant behaviour, with or without t values. */ + /* This is a bit of a hack, in most cases 4D coordinates will be */ + /* written to STDOUT (except when using -E) but the output format */ + /* speficied with -f is not respected for the t component, rather it */ + /* is forward verbatim from the input. */ + char *before_time = s; + double t = strtod(s, &s); + s = before_time; + if (data.v == HUGE_VAL) data.u = HUGE_VAL; @@ -120,11 +131,11 @@ static void process(FILE *fid) --s; /* assumed we gobbled \n */ if (echoin) { - char t; - t = *s; + char temp; + temp = *s; *s = '\0'; (void)fputs(line, stdout); - *s = t; + *s = temp; putchar('\t'); } @@ -141,7 +152,7 @@ static void process(FILE *fid) coord.xyzt.x = data.u; coord.xyzt.y = data.v; coord.xyzt.z = z; - coord.xyzt.t = HUGE_VAL; + coord.xyzt.t = t; coord = proj_trans(transformation, PJ_FWD, coord); data.u = coord.xyz.x; data.v = coord.xyz.y; diff --git a/test/cli/testvarious b/test/cli/testvarious index 43b1f63c..afe52ade 100755 --- a/test/cli/testvarious +++ b/test/cli/testvarious @@ -953,6 +953,19 @@ $EXE EPSG:32631 EPSG:4326 -E >> ${OUT} <<EOF EOF +echo "##############################################################" >> ${OUT} +echo "Test EPSG:4896 to EPSG:7930" >> ${OUT} +# Here we test that 4D coordinates are handled by cs2cs. Due to backwards +# compatibility, the t-component is not written to STDOUT as part of the +# coordinate data, but rather as part of the string that follows the xyz +# components. This is only seen by users when the -E option is used. Which +# means that this test also experience that behaviour. +$EXE -f %.4f EPSG:4896 EPSG:7930 -E >> ${OUT} <<EOF +3496737.2679 743254.4507 5264462.9620 2019.0 +3496737.2679 743254.4507 5264462.9620 2029.0 +EOF + + # Done! # do 'diff' with distribution results echo "diff ${OUT} with ${OUT}.dist" diff --git a/test/cli/tv_out.dist b/test/cli/tv_out.dist index 257e9400..1af09297 100644 --- a/test/cli/tv_out.dist +++ b/test/cli/tv_out.dist @@ -460,3 +460,7 @@ Test EPSG:4326 to EPSG:32631 ############################################################## Test EPSG:32631 to EPSG:4326 400000 5000000 0 45d8'47.014"N 1d43'40.681"E 0.000 +############################################################## +Test EPSG:4896 to EPSG:7930 +3496737.2679 743254.4507 5264462.9620 3496737.7857 743254.0394 5264462.6437 2019.0 +3496737.2679 743254.4507 5264462.9620 3496737.9401 743253.8861 5264462.5497 2029.0 |
