@@ -1227,14 +1227,27 @@ msProjectShapeLine(reprojectionObj* reprojector,
12271227 else
12281228 pt1Geo = wrkPoint ; /* this is a cop out */
12291229
1230- dist = wrkPoint .x - pt1Geo .x ;
1230+ if ( out -> gt .need_geotransform && out -> gt .geotransform [2 ] == 0 ) {
1231+ dist = out -> gt .geotransform [1 ] * (wrkPoint .x - pt1Geo .x );
1232+ } else {
1233+ dist = wrkPoint .x - pt1Geo .x ;
1234+ }
1235+
12311236 if ( fabs (dist ) > 180.0
12321237 && msTestNeedWrap ( thisPoint , lastPoint ,
12331238 pt1Geo , reprojector ) ) {
1234- if ( dist > 0.0 )
1235- wrkPoint .x -= 360.0 ;
1236- else if ( dist < 0.0 )
1237- wrkPoint .x += 360.0 ;
1239+ if ( out -> gt .need_geotransform && out -> gt .geotransform [2 ] == 0 ) {
1240+ if ( dist > 0.0 )
1241+ wrkPoint .x -= 360.0 * out -> gt .invgeotransform [1 ];
1242+ else if ( dist < 0.0 )
1243+ wrkPoint .x += 360.0 * out -> gt .invgeotransform [1 ];
1244+ }
1245+ else {
1246+ if ( dist > 0.0 )
1247+ wrkPoint .x -= 360.0 ;
1248+ else if ( dist < 0.0 )
1249+ wrkPoint .x += 360.0 ;
1250+ }
12381251 }
12391252 }
12401253
@@ -2103,6 +2116,7 @@ static int msTestNeedWrap( pointObj pt1, pointObj pt2, pointObj pt2_geo,
21032116
21042117{
21052118 pointObj middle ;
2119+ projectionObj * out = reprojector -> out ;
21062120
21072121 middle .x = (pt1 .x + pt2 .x ) * 0.5 ;
21082122 middle .y = (pt1 .y + pt2 .y ) * 0.5 ;
@@ -2116,8 +2130,13 @@ static int msTestNeedWrap( pointObj pt1, pointObj pt2, pointObj pt2_geo,
21162130 * If the last point was moved, then we are considered due for a
21172131 * move to.
21182132 */
2119- if ( fabs (pt2_geo .x - pt2 .x ) > 180.0 )
2120- return 1 ;
2133+ if ( out -> gt .need_geotransform && out -> gt .geotransform [2 ] == 0 ) {
2134+ if ( fabs ( (pt2_geo .x - pt2 .x ) * out -> gt .geotransform [1 ] ) > 180.0 )
2135+ return 1 ;
2136+ } else {
2137+ if ( fabs (pt2_geo .x - pt2 .x ) > 180.0 )
2138+ return 1 ;
2139+ }
21212140
21222141 /*
21232142 * Otherwise, test to see if the middle point transforms
0 commit comments