diff options
Diffstat (limited to 'src/pj_transform.c')
| -rw-r--r-- | src/pj_transform.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/src/pj_transform.c b/src/pj_transform.c index 6e48948d..212d8842 100644 --- a/src/pj_transform.c +++ b/src/pj_transform.c @@ -422,13 +422,17 @@ int pj_transform( PJ *srcdefn, PJ *dstdefn, long point_count, int point_offset, { for( i = 0; i < point_count; i++ ) { - if( x[point_offset*i] == HUGE_VAL ) + double val = x[point_offset*i]; + if( val == HUGE_VAL ) continue; - while( x[point_offset*i] < dstdefn->long_wrap_center - M_PI ) - x[point_offset*i] += M_TWOPI; - while( x[point_offset*i] > dstdefn->long_wrap_center + M_PI ) - x[point_offset*i] -= M_TWOPI; + /* Get fast in ] -2 PI, 2 PI [ range */ + val = fmod(val, M_TWOPI); + while( val < dstdefn->long_wrap_center - M_PI ) + val += M_TWOPI; + while( val > dstdefn->long_wrap_center + M_PI ) + val -= M_TWOPI; + x[point_offset*i] = val; } } |
