diff options
| author | Frank Warmerdam <warmerdam@pobox.com> | 2006-10-12 21:04:39 +0000 |
|---|---|---|
| committer | Frank Warmerdam <warmerdam@pobox.com> | 2006-10-12 21:04:39 +0000 |
| commit | b1c99c06177eb67df0b5a70034fb61dd0853ecd6 (patch) | |
| tree | 0efcbfd7e0008d77e99493f24f324c017f305b06 /src | |
| parent | f3510d01662ee90bf007c3fb85e4f881aea55e48 (diff) | |
| download | PROJ-b1c99c06177eb67df0b5a70034fb61dd0853ecd6.tar.gz PROJ-b1c99c06177eb67df0b5a70034fb61dd0853ecd6.zip | |
Added experimental +lon_wrap argument to set a "center point" for
longitude wrapping of longitude values coming out of pj_transform().
git-svn-id: http://svn.osgeo.org/metacrs/proj/trunk@1353 4e78687f-474d-0410-85f9-8d5e500ac6b2
Diffstat (limited to 'src')
| -rw-r--r-- | src/pj_init.c | 8 | ||||
| -rw-r--r-- | src/pj_transform.c | 22 | ||||
| -rw-r--r-- | src/projects.h | 5 |
3 files changed, 35 insertions, 0 deletions
diff --git a/src/pj_init.c b/src/pj_init.c index 94383e85..4b120080 100644 --- a/src/pj_init.c +++ b/src/pj_init.c @@ -30,6 +30,10 @@ ****************************************************************************** * * $Log$ + * Revision 1.18 2006/10/12 21:04:39 fwarmerdam + * Added experimental +lon_wrap argument to set a "center point" for + * longitude wrapping of longitude values coming out of pj_transform(). + * * Revision 1.17 2006/09/22 23:06:24 fwarmerdam * remote static start variable in pj_init (bug 1283) * @@ -270,6 +274,7 @@ pj_init(int argc, char **argv) { PIN->params = start; PIN->is_latlong = 0; PIN->is_geocent = 0; + PIN->long_wrap_center = 0.0; /* set datum parameters */ if (pj_datum_set(start, PIN)) goto bum_call; @@ -300,6 +305,9 @@ pj_init(int argc, char **argv) { /* over-ranging flag */ PIN->over = pj_param(start, "bover").i; + /* longitude center for wrapping */ + PIN->long_wrap_center = pj_param(start, "rlon_wrap").f; + /* central meridian */ PIN->lam0=pj_param(start, "rlon_0").f; diff --git a/src/pj_transform.c b/src/pj_transform.c index cde6ffd7..c3a437e5 100644 --- a/src/pj_transform.c +++ b/src/pj_transform.c @@ -30,6 +30,10 @@ ****************************************************************************** * * $Log$ + * Revision 1.20 2006/10/12 21:04:39 fwarmerdam + * Added experimental +lon_wrap argument to set a "center point" for + * longitude wrapping of longitude values coming out of pj_transform(). + * * Revision 1.19 2006/05/10 19:23:47 fwarmerdam * Don't apply to_meter in pj_transform() if the value is HUGE_VAL. * @@ -336,6 +340,24 @@ int pj_transform( PJ *srcdefn, PJ *dstdefn, long point_count, int point_offset, } } +/* -------------------------------------------------------------------- */ +/* If a wrapping center other than 0 is provided, rewrap around */ +/* the suggested center (for latlong coordinate systems only). */ +/* -------------------------------------------------------------------- */ + else if( dstdefn->is_latlong && dstdefn->long_wrap_center != 0 ) + { + for( i = 0; i < point_count; i++ ) + { + if( x[point_offset*i] == HUGE_VAL ) + continue; + + while( x[point_offset*i] < dstdefn->long_wrap_center - HALFPI ) + x[point_offset*i] += PI; + while( x[point_offset*i] > dstdefn->long_wrap_center + HALFPI ) + x[point_offset*i] -= PI; + } + } + return 0; } diff --git a/src/projects.h b/src/projects.h index 042fcd36..fdf0a48f 100644 --- a/src/projects.h +++ b/src/projects.h @@ -28,6 +28,10 @@ ****************************************************************************** * * $Log$ + * Revision 1.23 2006/10/12 21:04:39 fwarmerdam + * Added experimental +lon_wrap argument to set a "center point" for + * longitude wrapping of longitude values coming out of pj_transform(). + * * Revision 1.22 2006/03/30 14:35:09 fwarmerdam * bug 1145: avoid warnings on VC8. * @@ -271,6 +275,7 @@ typedef struct PJconsts { int datum_type; /* PJD_UNKNOWN/3PARAM/7PARAM/GRIDSHIFT/WGS84 */ double datum_params[7]; double from_greenwich; /* prime meridian offset (in radians) */ + double long_wrap_center; /* 0.0 for -180 to 180, actually in radians*/ #ifdef PROJ_PARMS__ PROJ_PARMS__ |
