Feature Object and text
Sean Gillies
sgillies at FRII.COM
Mon Aug 16 11:16:09 PDT 2004
On Aug 16, 2004, at 11:56 AM, Eric Bridger wrote:
> On Mon, 2004-08-16 at 13:44, Sean Gillies wrote:
>> On Aug 16, 2004, at 11:17 AM, Stefanie Weykam wrote:
>>
>>> Hi all,
>>> I have an annotation layer, it contains a point (feature) and a
>>> string
>>> to
>>> label this point.
>>> Actually, the string is the title of the map and I want to change it
>>> according to the currently displayed theme.
>>> Is there any feature object which can be set by MapScript? The Class
>>> Reference doesn't mention any. And, how do I change the color of the
>>> label?
>>> I always get error messages saying that the property (both color and
>>> text)
>>> don't exist or that the function setRGB() is undefined....???
>>> Which objects do have these properties - do I nedd colorObjects?
>>> styleObjects?? How do I create them?
>>> Thanks,
>>> Stefanie
>>>
>>> LAYER
>>> NAME "subtit"
>>> STATUS ON
>>> TRANSFORM FALSE
>>> TYPE ANNOTATION
>>> FEATURE
>>> POINTS 635 10 END
>>> TEXT "Species Richness" # "a species name"
>>> END
>>> CLASS
>>> LABEL
>>> TYPE TRUETYPE
>>> FONT verdana # verdana-italic
>>> SIZE 12
>>> POSITION LL
>>> COLOR 80 130 0 # 160 90 0
>>> END
>>> END
>>> END
>>>
>>>
>>
>> Stephanie,
>>
>> Support for inline features is currently limited. You cannot
>> access a feature once it is in the feature "set".
>>
>> The thing to do is to leave out the FEATURE block in your map
>> file, and insert a new feature as needed:
>>
>> p = mapscript.pointObj(635, 10) # the point
>> s = mapscript.shapeObj(layer.type) # new shape to hold point
>> l = mapscript.lineObj() # point must be in a line
>> l.add(p) # add point to line
>> s.add(l) # add line to shape
>>
>> s.text = 'Species Richness' # label for point
>> layer.addFeature(s)
>>
>> layer.draw(map, image)
>>
>
> To continue Sean's excellent and concise (Python) example (in
> Perl/PHP):
> I've found that even though the FEATURE is at the layer level, it will
> use the LABLE COLOR from the first CLASS. So before your layer.draw()
> $class = $layer->getClass(0);
> $class->{label}->{color}->setRGB(255,0,0);
>
> Alternatively:
>
> $red = new mapscript::colorObj(255,0,0);
> $class->{label}->{color} = $red;
>
> Eric
>
Thanks for the follow up, Eric. My example is no good without styles
and colors!
Related: shapeObj has a classindex attribute, and ideally we should be
able to set
s.classindex = 0
to use the first (index=0) class to style a shape. However, this hasn't
been working for me in my latest tests of MapServer 4.3. Anybody else
seeing the same problem?
Sean
--
Sean Gillies
sgillies at frii dot com
http://users.frii.com/sgillies
More information about the MapServer-users
mailing list