Skip to content

Commit 44dde80

Browse files
committed
msProjectShapeLine(): take into account potential geotransform on output projection to decide when to apply dateline wrapping
1 parent 40818d4 commit 44dde80

1 file changed

Lines changed: 26 additions & 7 deletions

File tree

mapproject.c

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)