Problem with cartoline
Steve Lime
steve.lime at DNR.STATE.MN.US
Thu Nov 10 18:15:33 EST 2005
What would really help in this case is the source data (as a shapefile).
Steve
>>> Mathieu Bertrand <mjbertrand at GMAIL.COM> 11/10/05 2:39 PM >>>
Hi,
I have a problem when I come to draw a cartoline with many points very close.
Please see the original .png attach with this message. You will see
that sometime, the perpendicular line is drawn twice and not with the
same angle, the problem always appear in the curve of the line where
the points are very close.
Here is my style define in my .map:
--------------
--------------
CLASSITEM "TYPE"
CLASS
NAME "Secondary Road - Paved"
STYLE
COLOR 0 0 0
SYMBOL "circle"
SIZE 1
ANTIALIAS TRUE
END
STYLE
COLOR 0 0 0
SYMBOL "test"
SIZE 10
OFFSET -6 -99
ANTIALIAS TRUE
END
-------------
-------------
and my symbol (also define in my .map):
-------------
-------------
SYMBOL
NAME 'test'
TYPE CARTOLINE
LINECAP BUTT
LINEJOIN none
STYLE 1 20 END
END
----------
----------
I played a little bit with the source code and discover that the
problem come from the last part of the function "RenderCartoLine"
(mapgd.c)
------
if (drawpoly) {
if (gox)
{
poly_points[2].x = MS_NINT(bn+db_pxn*size);
poly_points[2].y = MS_NINT(an+da_pxn*size);
poly_points[3].x = MS_NINT(bn);
poly_points[3].y = MS_NINT(an);
}
else
{
poly_points[2].x = MS_NINT(an+da_pxn*size);
poly_points[2].y = MS_NINT(bn+db_pxn*size);
poly_points[3].x = MS_NINT(an);
poly_points[3].y = MS_NINT(bn);
}
if (antialias) {
/* gdImageSetAntiAliased(img, color); */
gdImageSetAntiAliasedDontBlend(img, color, color);
if (size > 1)
{
gdImageFilledPolygon(img, poly_points, 4, gdAntiAliased);
}
else
{
gdImageLine(img, poly_points[0].x, poly_points[0].y,
poly_points[3].x, poly_points[3].y, gdAntiAliased);
}
}
else
{
if (size > 1)
{
gdImageFilledPolygon(img, poly_points, 4, color);
}
else
{
gdImageLine(img, poly_points[0].x, poly_points[0].y,
poly_points[3].x, poly_points[3].y, color);
}
}
}
---------
What is the objective of that code, it's seem that it's only repeating
the code above (but I know that it's not)... If I set drawpoly = 0
just before "if (drawpoly)", it's resolve the problem, but then there
is problem when drawing a cartoline with a style like "4 10" (width of
the perpendicular line more than 1)
Anybody could help me with that problem ? Anybody with idea ?
Thank you
-Mathieu Bertrand
More information about the mapserver-dev
mailing list