I'm writing a street mapping application that has two output formats: 
a png file to the web browser and an svg file for further editing and 
printing via inkscape. I'm using a single map file with two output 
formats like this:

        OUTPUTFORMAT
                NAME png
                DRIVER "GD/PNG"
                MIMETYPE "image/png"
                IMAGEMODE PC256
                EXTENSION "png"
        END
        OUTPUTFORMAT
                NAME svg
                MIMETYPE "image/svg+xml"
                DRIVER svg
                FORMATOPTION  "COMPRESSED_OUTPUT=FALSE"
                FORMATOPTION  "FULL_RESOLUTION=TRUE"
        END

The perl script on the web server chooses the output in response to 
what's sent from the browser. If an svg output is desired the perl 
script does the following to generate an svg file:

# draw map and save image
#
my $image = $map->draw();
$map->drawLabelCache($image);
$image->save($image_path.$image_name);

if ($parms->param('print')) {
        my $print_map = $map->clone();
        $print_map->selectOutputFormat("svg");
        $print_map->{resolution} = 90;
        my $print_image = $print_map->draw();
        $print_map->drawLabelCache($print_image);
        my $filename=$image_path.$print_name;
        $print_image->save($filename);
        open(DLFILE, "<$filename");
        my @fileholder = <DLFILE>;
        close(DLFILE);
        print "Content-Type:application/x-download\n";
        print "Content-Disposition:attachment;filename=nys1.svg\n\n";
        print @fileholder;
        exit;
}

where $map and $image are generated for the png output. I'm cloning 
this map object and changing some of the attributes that are svg 
specific. The hope is that the svg output would duplicate what 
appears on the screen because what appears on the screen is good for 
my purposes.

There are two anomalies. First, all the labels are printed in 
duplicate. I've verified this by looking at the svg file with a text 
editor. I can live with this one.

The label directive on the map file is:

                        LABEL
                                TYPE truetype
                                FONT "arial"
                                SIZE 8
                                ANGLE auto
                                COLOR 0 0 255
                                OUTLINECOLOR 255 255 255
                                MINDISTANCE 100
                                MINFEATURESIZE auto
                                POSITION auto
                        END

This brings up the second and more serious anomaly. I'm using 
mapserver to align and position the labels close to the line 
features. It does a good job on the png file. However, it does not 
rotate labels in the clockwise direction but keeps them horizontal. 
It's fine for labels that are rotated counter-clockwise. I've 
verified this by reading the svg file. Here are two examples:

<text x="130" y="-1" font-family="arial" font-size="8pt" 
  fill="#000000" stroke="#ffffff" 
  stroke-width="0.1" text-anchor="middle">
  Main St
</text>
<text x="259" y="419" font-family="arial" font-size="8pt" 
  fill="#000000" stroke="#ffffff" 
  stroke-width="0.1" transform="rotate(-84.995650 259 419)" 
  text-anchor="middle">Main St
</text>

The rotate transform gives the rotation angle and the pivot point. 
That's a counter-clockwise rotation because svg makes the downward 
directon on the y-axis to be positive.

Here's the version string for my installation:

MapServer version 5.4.2 OUTPUT=GIF OUTPUT=PNG OUTPUT=JPEG OUTPUT=WBMP 
OUTPUT=SVG SUPPORTS=PROJ SUPPORTS=AGG SUPPORTS=FREETYPE 
SUPPORTS=ICONV SUPPORTS=FRIBIDI SUPPORTS=WMS_SERVER 
SUPPORTS=WMS_CLIENT SUPPORTS=WFS_SERVER SUPPORTS=WFS_CLIENT 
SUPPORTS=WCS_SERVER SUPPORTS=SOS_SERVER SUPPORTS=THREADS 
SUPPORTS=GEOS SUPPORTS=RGBA_PNG INPUT=TIFF INPUT=POSTGIS INPUT=OGR 
INPUT=GDAL INPUT=MYGIS INPUT=SHAPEFILE 

Any help would be appreciated. Thanks.


Stephen Bauman
13810 Franklin Ave 2N
Flushing NY 11355-3302
Tel: 718-359-7972  (USA)

_______________________________________________
mapserver-users mailing list
mapserver-users@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/mapserver-users

Reply via email to