From faffa62c5414cf9d97e3d7d889ffa60657135129 Mon Sep 17 00:00:00 2001 From: Frank Warmerdam Date: Wed, 1 Feb 2012 23:03:34 +0000 Subject: ensure pj_apply_gridshift() supports points up to epsilon outside mesh (#141) git-svn-id: http://svn.osgeo.org/metacrs/proj/trunk@2152 4e78687f-474d-0410-85f9-8d5e500ac6b2 --- src/pj_apply_gridshift.c | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/pj_apply_gridshift.c b/src/pj_apply_gridshift.c index 16f59767..366026db 100644 --- a/src/pj_apply_gridshift.c +++ b/src/pj_apply_gridshift.c @@ -140,11 +140,15 @@ int pj_apply_gridshift_3( projCtx ctx, PJ_GRIDINFO **tables, int grid_count, { PJ_GRIDINFO *gi = tables[itable]; struct CTABLE *ct = gi->ct; + double epsilon = (fabs(ct->del.phi)+fabs(ct->del.lam))/10000.0; /* skip tables that don't match our point at all. */ - if( ct->ll.phi > input.phi || ct->ll.lam > input.lam - || ct->ll.phi + (ct->lim.phi-1) * ct->del.phi < input.phi - || ct->ll.lam + (ct->lim.lam-1) * ct->del.lam < input.lam ) + if( ct->ll.phi - epsilon > input.phi + || ct->ll.lam - epsilon > input.lam + || (ct->ll.phi + (ct->lim.phi-1) * ct->del.phi + epsilon + < input.phi) + || (ct->ll.lam + (ct->lim.lam-1) * ct->del.lam + epsilon + < input.lam) ) continue; /* If we have child nodes, check to see if any of them apply. */ @@ -155,10 +159,15 @@ int pj_apply_gridshift_3( projCtx ctx, PJ_GRIDINFO **tables, int grid_count, for( child = gi->child; child != NULL; child = child->next ) { struct CTABLE *ct1 = child->ct; - - if( ct1->ll.phi > input.phi || ct1->ll.lam > input.lam - || ct1->ll.phi+(ct1->lim.phi-1)*ct1->del.phi < input.phi - || ct1->ll.lam+(ct1->lim.lam-1)*ct1->del.lam < input.lam) + double epsilon = + (fabs(ct1->del.phi)+fabs(ct1->del.lam))/10000.0; + + if( ct1->ll.phi - epsilon > input.phi + || ct1->ll.lam - epsilon > input.lam + || (ct1->ll.phi+(ct1->lim.phi-1)*ct1->del.phi + epsilon + < input.phi) + || (ct1->ll.lam+(ct1->lim.lam-1)*ct1->del.lam + epsilon + < input.lam) ) continue; break; -- cgit v1.2.3