Dynamic map title - finally got it

Stefanie Weykam sweykam at TELELINE.ES
Fri Aug 27 09:02:03 PDT 2004


I already suspected that it had to be something stupid - a transcription
error! It turned out that I tried to draw the new feature just outside the
image extent, no wonder that I didn't see a thing. The more you look the
less you see.... Now I'm happy with my map title and will resume what I've
learned (thanks Steve, Eric and Sean):

The objective was to add a dynamic title to the map, with a fixed postion
but changing text string, according to the currently displayed theme.
I started with a default inline layer (type annotation) that looks like
this:

LAYER
     NAME       "subtitESP"
     STATUS     ON
     TRANSFORM  FALSE
     TYPE       ANNOTATION
     FEATURE
        POINTS  435 10  END
        TEXT    "Merops apiaster"
     END
     CLASS
         STYLE                  # optional
             COLOR    255 0 0
             MAXSIZE  300
             SYMBOL   'star'
             SIZE     8
         END
         LABEL
              TYPE      TRUETYPE #BITMAP
              FONT      verdana-italic
              SIZE      12
              POSITION  LL
              COLOR     160 90 0
         END
     END
 END
The point coordinates are image (not map) coordinates, since I do no
TRANSFORMation.
The STYLE part isn't really necesary - usually you don't want to show the
label point - but helps to check if the labelpoint is where you expect it to
be.

I am now going to change the text string using MapScript. Apparently it is
not possible to change the properties of a feature once it has been set. So,
I comment out the FEATURE part in the map file and add a new one using this
code (here simplified):

$subtitESP=$map->getLayerByName('subtitESP');
Create 3 new objects, a pointObj, a LineObj and a shpObj.:
$p=ms_newPointObj();
$l=ms_newLineObj();
$myshpObj=ms_NewShapeObj(MS_SHAPE_POINT);

Specify the point coordinates, set the point coordinates, add the point to
the line and the line to the shape object. Line is the only feature type
that can be added to a shapeObj, but it doesn't matter its just a point.
$p->setXY(435, 10);
$l->add($p);
$myshpObj->add($l);
$myshpObj->set("text", $specname);
$specname is the variable that holds the species name, my new map title.

The shape object is now ready to be added to the title layer.
$subtitESP->addFeature($myshpObj);

I finally draw the title-layer, the map and save everything as web image.
$subtitESP->draw($img);
$img=$map->draw();
$imgURL=$img->saveWebImage();



More information about the MapServer-users mailing list