aboutsummaryrefslogtreecommitdiff
path: root/src/PJ_hgridshift.c
diff options
context:
space:
mode:
authorThomas Knudsen <busstoptaktik@users.noreply.github.com>2017-10-06 18:56:12 +0200
committerGitHub <noreply@github.com>2017-10-06 18:56:12 +0200
commit202455448868a8a7d24dd7ba3cfa4fa9580c25c5 (patch)
treedf66e34efc3a8177249c35e29d9169855aea94bf /src/PJ_hgridshift.c
parent0c2f14e53de134e3bdecee45f7bcf9bdb1811432 (diff)
parentee0e2a0ff7315b3e77e5e570b566a735ec6a817a (diff)
downloadPROJ-202455448868a8a7d24dd7ba3cfa4fa9580c25c5.tar.gz
PROJ-202455448868a8a7d24dd7ba3cfa4fa9580c25c5.zip
Merge pull request #583 from busstoptaktik/destructor
Introduce a default destructor for PJ objects
Diffstat (limited to 'src/PJ_hgridshift.c')
-rw-r--r--src/PJ_hgridshift.c87
1 files changed, 47 insertions, 40 deletions
diff --git a/src/PJ_hgridshift.c b/src/PJ_hgridshift.c
index 4ee3fd42..1b65b1bd 100644
--- a/src/PJ_hgridshift.c
+++ b/src/PJ_hgridshift.c
@@ -1,25 +1,9 @@
#define PJ_LIB__
#include "proj_internal.h"
-#include <projects.h>
+#include "projects.h"
PROJ_HEAD(hgridshift, "Horizontal grid shift");
-static void *freeup_msg (PJ *P, int errlev) {
- if (0==P)
- return 0;
-
- if (0!=P->ctx)
- pj_ctx_set_errno (P->ctx, errlev);
-
- return pj_dealloc(P);
-}
-
-
-static void freeup (PJ *P) {
- freeup_msg (P, 0);
- return;
-}
-
static XYZ forward_3d(LPZ lpz, PJ *P) {
PJ_TRIPLET point;
@@ -67,25 +51,30 @@ static PJ_OBS reverse_obs(PJ_OBS obs, PJ *P) {
}
-PJ *PROJECTION(hgridshift) {
- if (!pj_param(P->ctx, P->params, "tgrids").i) {
- proj_log_error(P, "hgridshift: +grids parameter missing.");
- return freeup_msg(P, -1);
- }
+#if 0
+static XY forward_xy(LP lp, PJ *P) {
+ PJ_TRIPLET point;
+ point.lp = lp;
+ point.lpz.z = 0;
+ point.xyz = forward_3d (point.lpz, P);
+ return point.xy;
+}
- /* Build gridlist. P->gridlist can be empty if +grids only ask for optional grids. */
- P->gridlist = pj_gridlist_from_nadgrids( P->ctx, pj_param(P->ctx, P->params, "sgrids").s,
- &(P->gridlist_count) );
- /* Was gridlist compiled properly? */
- if ( pj_ctx_get_errno(P->ctx) ) {
- proj_log_error(P, "hgridshift: could not find required grid(s).");
- pj_dalloc(P->gridlist);
- P->gridlist = NULL;
- return freeup_msg(P, -38);
- }
+static LP reverse_lp(XY xy, PJ *P) {
+ PJ_TRIPLET point;
+ point.xy = xy;
+ point.xyz.z = 0;
+ point.lpz = reverse_3d (point.xyz, P);
+ return point.lp;
+}
+#endif
+
+
+PJ *PROJECTION(hgridshift) {
+
P->fwdobs = forward_obs;
P->invobs = reverse_obs;
P->fwd3d = forward_3d;
@@ -96,6 +85,21 @@ PJ *PROJECTION(hgridshift) {
P->left = PJ_IO_UNITS_RADIANS;
P->right = PJ_IO_UNITS_RADIANS;
+ if (0==pj_param(P->ctx, P->params, "tgrids").i) {
+ proj_log_error(P, "hgridshift: +grids parameter missing.");
+ return pj_default_destructor (P, PJD_ERR_NO_ARGS);
+ }
+
+ /* Build gridlist. P->gridlist can be empty if +grids only ask for optional grids. */
+ P->gridlist = pj_gridlist_from_nadgrids( P->ctx, pj_param(P->ctx, P->params, "sgrids").s,
+ &(P->gridlist_count) );
+
+ /* Was gridlist compiled properly? */
+ if ( pj_ctx_get_errno(pj_get_ctx(P)) ) {
+ proj_log_error(P, "hgridshift: could not find required grid(s).");
+ return pj_default_destructor (P, PJD_ERR_FAILED_TO_LOAD_GRID);
+ }
+
return P;
}
@@ -111,24 +115,27 @@ int pj_hgridshift_selftest (void) {
/* fail on purpose: +grids parameter is mandatory*/
P = proj_create(PJ_DEFAULT_CTX, "+proj=hgridshift");
- if (0!=P)
+ if (0!=P) {
+ proj_destroy (P);
return 99;
-
+ }
+
/* fail on purpose: open non-existing grid */
- P = proj_create(PJ_DEFAULT_CTX, "+proj=hgridshift +grids=nonexistinggrid.gsb");
- if (0!=P)
+ P = proj_create(PJ_DEFAULT_CTX, "+proj=hgridshift +grids=@nonexistinggrid.gsb,anothernonexistinggrid.gsb");
+ if (0!=P) {
+ proj_destroy (P);
return 999;
-
-
+ }
+
/* Failure most likely means the grid is missing */
P = proj_create(PJ_DEFAULT_CTX, "+proj=hgridshift +grids=nzgd2kgrid0005.gsb +ellps=GRS80");
if (0==P)
return 10;
-
+
a = proj_obs_null;
a.coo.lpz.lam = PJ_TORAD(173);
a.coo.lpz.phi = PJ_TORAD(-45);
-
+
dist = proj_roundtrip (P, PJ_FWD, 1, a);
if (dist > 0.00000001)
return 1;