[mapserver-users] Draw roads WITHOUT anti-aliasing

Erik H erik.h11.01 at gmail.com
Fri Nov 3 13:23:48 PDT 2017


I made some changes to the mapserver 7 source code that achieve what I want
(I'm now able to switch between aliased and antialiased lines, based on the
ANTIALIAS keyword in the STYLE section).

I tried to put up a pull request for it but I'm having problems compiling
the code in the 'master' branch - compilation errors for mapmetadata.c. My
code was branched off the release-7 branch and did not have that problem.

The cmake command I used was

cmake -DCMAKE_PREFIX_PATH=/usr/local/ WITH_GDAL=$GDAL_DIR
-DWITH_FRIBIDI=OFF -DWITH_WFS=OFF   -DWITH_WCS=OFF
-DWITH_PROJ=/usr/local/lib  -DWITH_LIBXML2=OFF   WITH_POSTGIS=/usr/bin
-DWITH_CLIENT_WFS=OFF     -DWITH_WMS=OFF    -DWITH_CLIENT_WMS=OFF
 -DWITH_CURL=OFF         -DWITH_SOS=OFF         -DWITH_PHP=OFF
 -DWITH_PERL=OFF         -DWITH_RUBY=OFF         -DWITH_JAVA=ON
 -DWITH_CSHARP=OFF   -DWITH_HARFBUZZ=OFF      -DWITH_PYTHON=ON
 -DWITH_GEOS=0    -DWITH_SVGCAIRO=OFF         -DWITH_ORACLESPATIAL=OFF
 -DWITH_CAIRO=OFF -DWITH_THREAD_SAFETY=ON  -DWITH_FCGI=OFF   -DWITH_GIF=0
../ >../configure.out.txt

Any suggestions?

Thanks

On Thu, Oct 19, 2017 at 11:04 AM, Erik H <erik.h11.01 at gmail.com> wrote:

> I just did what Andreas spelled out yesterday:
>
>
>
>
>
>
>
> *Simply changing the typedef in line 91 of mapagg.cpp from  typedef
> mapserver::renderer_scanline_aa_solid<renderer_base> renderer_scanline;to
> typedef mapserver::renderer_scanline_bin_solid<renderer_base>
> renderer_scanline;*
>
>
> However, I'd like to be able to switch between rasterizer via some option
> in the .map file, so I'd welcome any suggestion on how to do that.
>
> On Thu, Oct 19, 2017 at 10:07 AM, Lime, Steve D (MNIT) <
> steve.lime at state.mn.us> wrote:
>
>> Glad this was figured out! What was the code change exactly?
>> ------------------------------
>> *From:* mapserver-users <mapserver-users-bounces at lists.osgeo.org> on
>> behalf of Erik H <erik.h11.01 at gmail.com>
>> *Sent:* Wednesday, October 18, 2017 8:07:42 PM
>> *To:* Eichner, Andreas - SID
>> *Cc:* mapserver-users at lists.osgeo.org
>> *Subject:* Re: [mapserver-users] Draw roads WITHOUT anti-aliasing
>>
>> Andreas,
>>
>> I made that change in mapagg.cpp and it seems to do exactly what I need.
>> Wunderbar!
>>
>> As for providing an option to switch rasterizer based on an option, how
>> about reviving the FORMATOPTION 'ANTIALIAS'?
>>
>> Thanks, Erik
>>
>> On Wed, Oct 18, 2017 at 9:18 AM, Eichner, Andreas - SID <
>> Andreas.Eichner at sid.sachsen.de> wrote:
>>
>>> Nope, this won't work:
>>>
>>>   r->default_gamma = atof(msGetOutputFormatOption( format, "GAMMA",
>>> "0.75" ));
>>>   if(r->default_gamma <= 0.0 || r->default_gamma >= 1.0) {
>>>     r->default_gamma = 0.75;
>>>   }
>>>
>>> From mapagg.cpp lines 844-847 forces 0 < GAMMA < 1
>>> Also note that MapServer uses a linear gamma function defined as
>>>
>>>        double operator() (double x) const
>>>         {
>>>             if(x < m_start) return 0.0;
>>>             if(x > m_end) return 1.0;
>>>             return (x - m_start) / (m_end - m_start);
>>>         }
>>>
>>> Where m_start is _always_ set to 0 and m_end is set to the GAMMA value
>>> given by you (or the default 0.75).
>>> I think someone should check this - to me it seems a power function was
>>> intented...
>>>
>>> HTH
>>>
>>> > -----Ursprüngliche Nachricht-----
>>> > Von: mapserver-users [mailto:mapserver-users-bounces at lists.osgeo.org]
>>> Im
>>> > Auftrag von lars.schylberg at blixtmail.se
>>> > Gesendet: Mittwoch, 18. Oktober 2017 14:05
>>> > An: mapserver-users at lists.osgeo.org
>>> > Betreff: Re: [mapserver-users] Draw roads WITHOUT anti-aliasing
>>> >
>>> > Hi,
>>> >
>>> >
>>> >
>>> >
>>> > I did some quick tests with :
>>> >
>>> >
>>> >
>>> >
>>> >   OUTPUTFORMAT
>>> >     NAME "png_G0"
>>> >     DRIVER AGG/PNG
>>> >     MIMETYPE "image/png"
>>> >     IMAGEMODE RGB
>>> >     EXTENSION "png"
>>> >     FORMATOPTION "GAMMA=0.0"
>>> >   END
>>> >
>>> >
>>> >
>>> >
>>> > and shp2img with options -i
>>> >
>>> >
>>> > eg: shp2img -m 01_polygon_td_poly.map -o 01_polygon_td_poly.png -i
>>> > png_G0
>>> >
>>> >
>>> >
>>> >
>>> >
>>> > I did some tests with both polygons, polygon outlines and lines and
>>> they
>>> > all seems to have anti-aliasing as far as I could see.
>>> >
>>> > Would this be an ok way to test it?  I also have some people that would
>>> > like to do lines without anti-aliasing for a strange reason.
>>> >
>>> >
>>> >
>>> >
>>> >
>>> > Lars Schylberg
>>> >
>>> >
>>> >
>>> >
>>> >
>>> > -----Originalmeddelande-----
>>> > > Från: "Rahkonen Jukka (MML)" <jukka.rahkonen at maanmittauslaitos.fi>
>>> > > Till: "Eichner, Andreas - SID" <Andreas.Eichner at sid.sachsen.de>,
>>> "Erik
>>> > H" <erik.h11.01 at gmail.com>
>>> > > Kopia: mapserver-users at lists.osgeo.org
>>> > > Datum: 2017-10-18 11:13
>>> > > Ämne: Re: [mapserver-users] Draw roads WITHOUT anti-aliasing
>>> > >
>>> > > Hi,
>>> > >
>>> > > I suppose that the amount of antialiasing with AGG is set with
>>> "gamma"
>>> > parameter.  Mapserver supports that at least for polygons as documented
>>> > in http://www.mapserver.org/mapfile/outputformat.html but you could
>>> try
>>> > if using gamma=0.0 has an effect on lines as well. It may be that it
>>> > does not because search
>>> > >
>>> > https://github.com/mapserver/mapserver/search?utf8=%E2%9C%93
>>> &q=gamma&typ
>>> > e=
>>> > > seems to find only something that is tied to polygon outlines
>>> > > https://github.com/mapserver/mapserver/blob/branch-7-
>>> > 0/renderers/agg/include/agg_renderer_outline_aa.h
>>> > >
>>> > >
>>> > > If gamma does not work for lines then it could be worth making a
>>> > feature request for adding a new formatoption "GAMMA_LINE=[].
>>> > >
>>> > > Couple of Mapnik links dealing with the same issue:
>>> > > http://gis.19327.n8.nabble.com/Turning-off-anti-aliasing-
>>> > td5339458.html
>>> > > http://mapnik.org/mapnik-reference/#3.0.6/line-gamma-method
>>> > >
>>> > > -Jukka Rahkonen-
>>> > >
>>> > >
>>> > >
>>> > > -----Alkuperäinen viesti-----
>>> > > Lähettäjä: mapserver-users [mailto:mapserver-users-
>>> > bounces at lists.osgeo.org] Puolesta Eichner, Andreas - SID
>>> > > Lähetetty: 18. lokakuuta 2017 9:57
>>> > > Vastaanottaja: Erik H <erik.h11.01 at gmail.com>
>>> > > Kopio: mapserver-users at lists.osgeo.org
>>> > > Aihe: Re: [mapserver-users] Draw roads WITHOUT anti-aliasing
>>> > >
>>> > > Damn... missed attaching the images.
>>> > >
>>> > > > -----Ursprüngliche Nachricht-----
>>> > > > Von: mapserver-users [mailto:mapserver-users-
>>> > bounces at lists.osgeo.org]
>>> > > > Im Auftrag von Eichner, Andreas - SID
>>> > > > Gesendet: Mittwoch, 18. Oktober 2017 08:28
>>> > > > An: Erik H
>>> > > > Cc: mapserver-users at lists.osgeo.org
>>> > > > Betreff: Re: [mapserver-users] Draw roads WITHOUT anti-aliasing
>>> > > >
>>> > > > Hi,
>>> > > >
>>> > > > I just meant that it seems to be pretty easy to implement aliased
>>> > > > rendering with AGG.
>>> > > > Simply changing the typedef in line 91 of mapagg.cpp from
>>> > > >
>>> > > >   typedef mapserver::renderer_scanline_aa_solid<renderer_base>
>>> > > > renderer_scanline;
>>> > > >
>>> > > > to
>>> > > >
>>> > > >   typedef mapserver::renderer_scanline_bin_solid<renderer_base>
>>> > > > renderer_scanline;
>>> > > >
>>> > > > turns of anti-aliased rendering. I've attached the output of
>>> > "shp2img
>>> > > > -m line_simple.map" from the msautotests.
>>> > > > An additional member in class AGG2Renderer for the aliased
>>> > rasterizer
>>> > > > and conditionally passing one or the other to render_scanlines()
>>> > > > depending on some value of strokeStyleObj might be enough.
>>> > > >
>>> > > > Regards
>>> > > >
>>> > > > > -----Ursprüngliche Nachricht-----
>>> > > > > Von: Erik H [mailto:erik.h11.01 at gmail.com]
>>> > > > > Gesendet: Dienstag, 17. Oktober 2017 17:34
>>> > > > > An: Eichner, Andreas - SID
>>> > > > > Cc: Richard Greenwood; mapserver-users at lists.osgeo.org
>>> > > > > Betreff: Re: [mapserver-users] Draw roads WITHOUT anti-aliasing
>>> > > > >
>>> > > > > As for Andreas' remark about 'simply the use of another scanline
>>> > > > > rasterizer.' - I'm sorry but I'm not much of a C++ developer. If
>>> I
>>> > > > have
>>> > > > > to do rasterizing, I'd skip MapServer altogether and generate the
>>> > > > > PNG
>>> > > > in
>>> > > > > Java.
>>> > > > >
>>> > > > _______________________________________________
>>> > > > mapserver-users mailing list
>>> > > > mapserver-users at lists.osgeo.org
>>> > > > https://lists.osgeo.org/mailman/listinfo/mapserver-users
>>> > > _______________________________________________
>>> > > mapserver-users mailing list
>>> > > mapserver-users at lists.osgeo.org
>>> > > https://lists.osgeo.org/mailman/listinfo/mapserver-users
>>> >
>>> >
>>> >
>>> >
>>> >
>>> >
>>> >
>>> > --
>>> >
>>> >
>>> _______________________________________________
>>> mapserver-users mailing list
>>> mapserver-users at lists.osgeo.org
>>> https://lists.osgeo.org/mailman/listinfo/mapserver-users
>>>
>>
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/mapserver-users/attachments/20171103/1b3fe700/attachment.html>


More information about the mapserver-users mailing list