[mapserver-dev] Using mapserver.a to generate tiles
Stephen Woodbridge
woodbri at swoodbridge.com
Wed Aug 25 23:05:17 EDT 2010
Hi all,
I guess these questions might be targeted at Steve L and/or Thomas
Bonfort, but I'll take info from anyone that might know.
I have written a C program that uses mapserver.a and generates tiles for
seeding a tile cache. It works great with GD and AGG rendering when I
quantize the output images as 8-bit png images that can be transparent
or not.
I have run into two problems:
Rendering transparent overlays with AGG and then palettizing the image
leaves dark pixels along the lines as an artifact of the anti aliasing
and the palettization. But I can chop these meta tiles into tiles with
no problems.
If I try to generate RGBA tiles, these artifacts are not seen in the
meta tile if I leave the image as RGBA, but when I chop the metatile
into tiles the background is no longer transparent (I'm guessing it is
RGB and not RGBA.
The code makes calls like these:
// read the mapfile, and setup the layers, extents, outputformat, then
oImg = msDrawMap(map, MS_FALSE);
// save the image to force color reduction
// for the RGBA case ie: not palettized
// this appears to change buffer_format = 7 to buffer_format = 1
ret = msSaveImage(NULL, oImg, szMetaImg);
// we cycle through the rows, cols of the metatile write the tiles
oTile = msImageCreateGD(tileWidth, tileHeight, oImg->format, NULL, NULL,
map->resolution, map->defresolution);
msImageCopyMerge(oTile, oImg, 0, 0, tileLeft, tileTop, tileWidth,
tileHeight, 100);
ret = msSaveImage(NULL, oTile, qtp);
msFreeImage(oTile);
So, I'm guessing that the change in buffer_format is somehow affecting
the behavior of msImageCreateGD() or msImageCopyMerge() that is
affecting the alpha transparency when I create the tiles. Can anyone
shed some light on that and how I might work around that.
Second, since the RGBA tile issue was an attempt to work around the dark
speck artifacts on the anti aliased lines that get palleted, any
thoughts on how to remove the specks.
Third, but less important at the moment, I am aware this all changes in
6.0 and I am curious about what happens when the GD code is removed. But
I can probably wait till that is in trunk and go digging after that.
My mapfile looks like the following. I have tried various combinations
of options on the various OUTPUTFORMATs.
-Steve W
MAP
NAME "Statesp020"
EXTENT -19941038.1 1999506.7 20013931.8 11539767.3
SIZE 700 550
SHAPEPATH "/u/data/flytecomm/gisdata/"
#SYMBOLSET "/u/data/maps/symbols/symbols.sym"
#FONTSET "/u/data/maps/fontset.txt"
IMAGECOLOR 0 0 0
# IMAGETYPE 'agg_qn' # this leaves artifacts along the lines
# IMAGETYPE 'PNG8' # no artifacts but lines are not anti aliased
# IMAGETYPE 'agg_32png' # metatile is ok, tiles have black bgcolor
IMAGETYPE 'agg_32png' # tile are not transparent
TRANSPARENT ON
UNITS METERS
# DEBUG 5
# CONFIG MS_EEORFILE "stderr"
OUTPUTFORMAT
NAME "agg_qn"
DRIVER "AGG/PNG"
EXTENSION "png"
MIMETYPE "image/png"
IMAGEMODE RGBA
TRANSPARENT ON
FORMATOPTION "INTERLACE=false"
FORMATOPTION "QUANTIZE_NEW=ON"
FORMATOPTION "QUANTIZE_FORCE=ON"
FORMATOPTION "QUANTIZE_DITHER=OFF"
FORMATOPTION "QUANTIZE_COLORS=256"
FORMATOPTION "TRANSPARENT=ON"
END
OUTPUTFORMAT
NAME "agg_32png"
DRIVER "AGG/PNG"
EXTENSION "png"
MIMETYPE "image/png"
IMAGEMODE RGBA
TRANSPARENT ON # comment or not does not help
FORMATOPTION "INTERLACE=OFF"
FORMATOPTION "TRANSPARENT=ON" # comment or not does not help
END
OUTPUTFORMAT
NAME PNG8
DRIVER "GD/PNG"
EXTENSION "png"
MIMETYPE "image/png"
IMAGEMODE RGBA
TRANSPARENT ON
FORMATOPTION "INTERLACE=false"
FORMATOPTION "QUANTIZE_NEW=ON"
FORMATOPTION "QUANTIZE_FORCE=ON"
FORMATOPTION "QUANTIZE_DITHER=OFF"
FORMATOPTION "QUANTIZE_COLORS=256"
FORMATOPTION "TRANSPARENT=ON"
END
# PROJECTION
# # Sperical Mercator
# "+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0
+y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs"
# END
SYMBOL
NAME 'circle'
TYPE ELLIPSE
POINTS 1 1 END
FILLED true
END
LAYER
NAME "states"
TYPE POLYGON
STATUS DEFAULT
TRANSPARENCY ALPHA
DATA "states/statesp020-900913"
CLASS
STYLE
WIDTH 1.0
#SIZE 3.0
#SYMBOL 'circle'
#COLOR "#b5d29c"
OUTLINECOLOR "#88ff88"
END
END
END
END
More information about the mapserver-dev
mailing list