diff options
| author | Thomas Knudsen <busstoptaktik@users.noreply.github.com> | 2018-01-08 03:41:45 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-01-08 03:41:45 +0100 |
| commit | 07bb446ec474cf62094070a8ea848b37c911a075 (patch) | |
| tree | f3212861bb79716af0d4d7008e3b3e44e40f2cd3 /src | |
| parent | 4809a281abca09085cba6494a0da247c03f0a487 (diff) | |
| download | PROJ-07bb446ec474cf62094070a8ea848b37c911a075.tar.gz PROJ-07bb446ec474cf62094070a8ea848b37c911a075.zip | |
Discern between 2D projected and 3D cartesian linear units (#732)
Diffstat (limited to 'src')
| -rw-r--r-- | src/PJ_axisswap.c | 5 | ||||
| -rw-r--r-- | src/PJ_cart.c | 3 | ||||
| -rw-r--r-- | src/PJ_deformation.c | 4 | ||||
| -rw-r--r-- | src/PJ_helmert.c | 10 | ||||
| -rw-r--r-- | src/PJ_horner.c | 2 | ||||
| -rw-r--r-- | src/PJ_ob_tran.c | 2 | ||||
| -rw-r--r-- | src/PJ_unitconvert.c | 5 | ||||
| -rw-r--r-- | src/pj_internal.c | 12 | ||||
| -rw-r--r-- | src/proj_internal.h | 12 | ||||
| -rw-r--r-- | src/projects.h | 8 |
10 files changed, 35 insertions, 28 deletions
diff --git a/src/PJ_axisswap.c b/src/PJ_axisswap.c index aee3c56e..62a9fba3 100644 --- a/src/PJ_axisswap.c +++ b/src/PJ_axisswap.c @@ -242,10 +242,9 @@ PJ *CONVERSION(axisswap,0) { P->left = PJ_IO_UNITS_RADIANS; P->right = PJ_IO_UNITS_RADIANS; } else { - P->left = PJ_IO_UNITS_METERS; - P->right = PJ_IO_UNITS_METERS; + P->left = PJ_IO_UNITS_PROJECTED; + P->right = PJ_IO_UNITS_PROJECTED; } return P; } - diff --git a/src/PJ_cart.c b/src/PJ_cart.c index 12b5876a..8e11c030 100644 --- a/src/PJ_cart.c +++ b/src/PJ_cart.c @@ -214,7 +214,6 @@ PJ *CONVERSION(cart,1) { P->fwd = cart_forward; P->inv = cart_reverse; P->left = PJ_IO_UNITS_RADIANS; - P->right = PJ_IO_UNITS_METERS; + P->right = PJ_IO_UNITS_CARTESIAN; return P; } - diff --git a/src/PJ_deformation.c b/src/PJ_deformation.c index d227e49f..797af006 100644 --- a/src/PJ_deformation.c +++ b/src/PJ_deformation.c @@ -306,8 +306,8 @@ PJ *TRANSFORMATION(deformation,1) { P->fwd = 0; P->inv = 0; - P->left = PJ_IO_UNITS_METERS; - P->right = PJ_IO_UNITS_METERS; + P->left = PJ_IO_UNITS_CARTESIAN; + P->right = PJ_IO_UNITS_CARTESIAN; P->destructor = destructor; return P; diff --git a/src/PJ_helmert.c b/src/PJ_helmert.c index ca14a5cb..f726d946 100644 --- a/src/PJ_helmert.c +++ b/src/PJ_helmert.c @@ -477,8 +477,14 @@ PJ *TRANSFORMATION(helmert, 0) { P->fwd = helmert_forward; P->inv = helmert_reverse; - P->left = PJ_IO_UNITS_METERS; - P->right = PJ_IO_UNITS_METERS; + /* In most cases, we work on 3D cartesian coordinates */ + P->left = PJ_IO_UNITS_CARTESIAN; + P->right = PJ_IO_UNITS_CARTESIAN; + /* But in the 2D case, the coordinates are projected */ + if (pj_param_exists (P->params, "theta")) { + P->left = PJ_IO_UNITS_PROJECTED; + P->right = PJ_IO_UNITS_PROJECTED; + } /* Translations */ if (pj_param (P->ctx, P->params, "tx").i) diff --git a/src/PJ_horner.c b/src/PJ_horner.c index fe0452d6..d1146aa1 100644 --- a/src/PJ_horner.c +++ b/src/PJ_horner.c @@ -434,7 +434,7 @@ PJ *PROJECTION(horner) { P->inv3d = 0; P->fwd = 0; P->inv = 0; - P->left = P->right = PJ_IO_UNITS_METERS; + P->left = P->right = PJ_IO_UNITS_PROJECTED; P->destructor = horner_freeup; /* Polynomial degree specified? */ diff --git a/src/PJ_ob_tran.c b/src/PJ_ob_tran.c index 43211fe7..debb211c 100644 --- a/src/PJ_ob_tran.c +++ b/src/PJ_ob_tran.c @@ -233,7 +233,7 @@ PJ *PROJECTION(ob_tran) { /* Support some rather speculative test cases, where the rotated projection */ /* is actually latlong. We do not want scaling in that case... */ if (Q->link->right==PJ_IO_UNITS_RADIANS) - P->right = PJ_IO_UNITS_METERS; + P->right = PJ_IO_UNITS_PROJECTED; return P; diff --git a/src/PJ_unitconvert.c b/src/PJ_unitconvert.c index bf1fcd37..06224362 100644 --- a/src/PJ_unitconvert.c +++ b/src/PJ_unitconvert.c @@ -397,8 +397,8 @@ PJ *CONVERSION(unitconvert,0) { P->fwd = forward_2d; P->inv = reverse_2d; - P->left = PJ_IO_UNITS_METERS; - P->right = PJ_IO_UNITS_METERS; + P->left = PJ_IO_UNITS_WHATEVER; + P->right = PJ_IO_UNITS_WHATEVER; /* if no time input/output unit is specified we can skip them */ Q->t_in_id = -1; @@ -485,4 +485,3 @@ PJ *CONVERSION(unitconvert,0) { return P; } - diff --git a/src/pj_internal.c b/src/pj_internal.c index 88fb2b62..deb0c054 100644 --- a/src/pj_internal.c +++ b/src/pj_internal.c @@ -40,16 +40,16 @@ enum pj_io_units pj_left (PJ *P) { enum pj_io_units u = P->inverted? P->right: P->left; - if (u==PJ_IO_UNITS_RADIANS) - return PJ_IO_UNITS_RADIANS; - return PJ_IO_UNITS_METERS; + if (u==PJ_IO_UNITS_CLASSIC) + return PJ_IO_UNITS_PROJECTED; + return u; } enum pj_io_units pj_right (PJ *P) { enum pj_io_units u = P->inverted? P->left: P->right; - if (u==PJ_IO_UNITS_RADIANS) - return PJ_IO_UNITS_RADIANS; - return PJ_IO_UNITS_METERS; + if (u==PJ_IO_UNITS_CLASSIC) + return PJ_IO_UNITS_PROJECTED; + return u; } diff --git a/src/proj_internal.h b/src/proj_internal.h index 3dd04e62..41f95c07 100644 --- a/src/proj_internal.h +++ b/src/proj_internal.h @@ -61,12 +61,14 @@ extern "C" { #define PJ_EPS_LAT 1e-12 -/* This enum is also conditionally defined in projects.h - but we need it here */ -/* for the pj_left/right prototypes, and enums cannot be forward declared */ +/* This enum is also conditionally defined in projects.h - but enums cannot */ +/* be forward declared and we need it here for the pj_left/right prototypes */ enum pj_io_units { - PJ_IO_UNITS_CLASSIC = 0, /* Scaled meters (right) */ - PJ_IO_UNITS_METERS = 1, /* Meters */ - PJ_IO_UNITS_RADIANS = 2 /* Radians */ + PJ_IO_UNITS_WHATEVER = 0, /* Doesn't matter (or depends on pipeline neighbours) */ + PJ_IO_UNITS_CLASSIC = 1, /* Scaled meters (right), projected system */ + PJ_IO_UNITS_PROJECTED = 2, /* Meters, projected system */ + PJ_IO_UNITS_CARTESIAN = 3, /* Meters, 3D cartesian system */ + PJ_IO_UNITS_RADIANS = 4 /* Radians */ }; enum pj_io_units pj_left (PJ *P); enum pj_io_units pj_right (PJ *P); diff --git a/src/projects.h b/src/projects.h index 209d6f39..86ca2524 100644 --- a/src/projects.h +++ b/src/projects.h @@ -192,9 +192,11 @@ typedef struct PJ_REGION_S PJ_Region; typedef struct ARG_list paralist; /* parameter list */ #ifndef PROJ_INTERNAL_H enum pj_io_units { - PJ_IO_UNITS_CLASSIC = 0, /* Scaled meters (right) */ - PJ_IO_UNITS_METERS = 1, /* Meters */ - PJ_IO_UNITS_RADIANS = 2 /* Radians */ + PJ_IO_UNITS_WHATEVER = 0, /* Doesn't matter (or depends on pipeline neighbours) */ + PJ_IO_UNITS_CLASSIC = 1, /* Scaled meters (right), projected system */ + PJ_IO_UNITS_PROJECTED = 2, /* Meters, projected system */ + PJ_IO_UNITS_CARTESIAN = 3, /* Meters, 3D cartesian system */ + PJ_IO_UNITS_RADIANS = 4 /* Radians */ }; #endif #ifndef PROJ_H |
