aboutsummaryrefslogtreecommitdiff
path: root/src/pj_transform.c
diff options
context:
space:
mode:
authorFrank Warmerdam <warmerdam@pobox.com>2006-10-12 21:04:39 +0000
committerFrank Warmerdam <warmerdam@pobox.com>2006-10-12 21:04:39 +0000
commitb1c99c06177eb67df0b5a70034fb61dd0853ecd6 (patch)
tree0efcbfd7e0008d77e99493f24f324c017f305b06 /src/pj_transform.c
parentf3510d01662ee90bf007c3fb85e4f881aea55e48 (diff)
downloadPROJ-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/pj_transform.c')
-rw-r--r--src/pj_transform.c22
1 files changed, 22 insertions, 0 deletions
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;
}