aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKristian Evers <kristianevers@gmail.com>2019-03-24 11:35:16 +0100
committerKristian Evers <kristianevers@gmail.com>2019-03-24 12:08:35 +0100
commit10e1b7b75f70c704cf78a7eb7197beebb4b82d4a (patch)
tree48b8f4d73dfddef9f16d2748c3cf33afc808fc31
parentd089e17fde8a636198cf21f1045fc6bee20d987d (diff)
downloadPROJ-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.cpp19
-rwxr-xr-xtest/cli/testvarious13
-rw-r--r--test/cli/tv_out.dist4
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