Rotating Symbols
Blaise
bpicinbono at WORLDONLINE.FR
Sun May 28 06:44:10 PDT 2006
Stu
I've got symbols rotated :
mapserver 4.8.3,
point shapefile:"rotlabel", dbf with 2 fields : "ID" and "rotation"
field rotation is numeric, 3 digits, no decimal (0->359)
Layer definition in mapfile :
LAYER
NAME rotlabel
TYPE POINT
STATUS ON
DATA rotlabel
CLASS
NAME "rotlabel"
STYLE
SYMBOL 'triangle'
ANGLEITEM "rotation"
SIZE 15
COLOR 255 0 255
END
END
END
Triangle definition in symbol file (symbols.sym) :
Symbol
Name 'triangle'
Type VECTOR
Filled TRUE
Points
0 1
.5 0
1 1
0 1
END
END
No on-the-fly label drawing, just basic layer display. When updating data in
the "rotation" field of the dbf, triangles are rotating...
One strange thing is with angle 90 and 180 : triangles don't display. 89, 91,
179, 181 are ok, but not 90 and 180. 270 is ok as well.
You should easily custom the triangle symbol into whatever you want (arrow or
else).
Better check that your symbol is displayed for any angle (0->359). There must
be some kind of bug somewhere. Maybe you'll help discovering it.
I hope this is what you were looking for.
Regards
Blaise
Le Samedi 27 Mai 2006 17:47, Stuart Eve a écrit :
> Blaise
>
> I am working with shapefiles - but am going to need to do this with all
> different types of layers (trying to abstract it out). I have just added
> the 'angle' field to the dbf to try it out and I am still getting the
> same error.
>
> It seems that the styleObj thinks it doesn't have the member of 'angle'
> (or actualy 'angleitem') even though in my mapfile (which I
> automatically output by using $map->save) it has written it like this:
>
> STYLE
> ANGLE 360
> COLOR 0 0 0
> SIZE 8
> SYMBOL "rot_tri"
> END
>
> I am now trying to go through the process of automatically creating the
> rotated symbol on the fly (but the logic of it makes my head hurt!).
>
> Thanks for your help so far!
>
> Stu
>
> Blaise wrote:
> > Hi Stu
> > What kind of layer do you use for your symbols, point or annotation ? I
> > assume it's a shapefile (*.shp, *.shx, *.dbf) isn't it ? I don't remember
> > exactly how annotation layers work but it must be the same as point. With
> > point layers, you have to have an "angle" field (numeric, 3 digits
> > without decimal, I believe, not sure) in your dbf file, or maybe better
> > "ANGLE" to be able to set the angle. Do you have this field in the dbf
> > and if not can you try adding it ?
> > And do you have the right angle instructions in the layer section of your
> > mapfile ? If not sure, post your mapfile layer section.
> > Bravo for the work so far.
> > Blaise
> >
> > Le Samedi 27 Mai 2006 16:58, Stuart Eve a écrit :
> >> Hi Blaise
> >>
> >> I have managed to get quite a long way down the road of extracting
> >> points and placing them, etc.- and I think its all going to work -
> >> however I have just been stumped by what seems to be to be a bug.
> >>
> >> I have managed to set up classes for each of the points that I wish to
> >> draw - and now want to set their styles so that the symbol (a VECTOR)
> >> symbol is rotated to the angle (which I have got from my geometry
> >> function). However, whenever I try to access styleObj->set("angle",45)
> >> it says that 'angle' doesn't exist in that object. However, I can dump
> >> out the mapfile and it is there set as 360.
> >>
> >> Any ideas whats going on?
> >>
> >> Thanks
> >>
> >> Stu
> >>
> >> Blaise wrote:
> >>> Stu
> >>> I don't know what output you want exactly, but yes, using mapscript,
> >>> you can easily put an arrow on each segment of a polyline with a loop
> >>> something like :
> >>> for each polyline
> >>> for each segment of polyline
> >>> get start and stop point of segment
> >>> calculate middle point of segment and angle
> >>> create new annotation arrow
> >>>
> >>> The geometry calculation is pretty straight forward, it's basic 2d
> >>> geometry. Ask more if you need help on the mapscript functions and/or
> >>> the geometry calculation.
> >>> But maybe someone else on this list has got a better/different idea.
> >>> Regards
> >>> Blaise
> >>>
> >>> Le Vendredi 26 Mai 2006 16:41, vous avez écrit :
> >>>> Blaise
> >>>>
> >>>> Thanks for the reply. I presume that we could automatically create a
> >>>> bunch of points along the line using mapscript or something - but then
> >>>> how would we make sure that it was always at right angles to the line?
> >>>> I guess we would have to do some fancy geometry to figure out what
> >>>> angle that section of line was... sounds hard!
> >>>>
> >>>> Mind you it may be the only way - thanks for your help!
> >>>>
> >>>> Stu
> >>>>
> >>>> Blaise wrote:
> >>>>> Le Vendredi 26 Mai 2006 16:23, Stuart Eve a écrit :
> >>>>>> Dear All,
> >>>>>>
> >>>>>> We have been trying to get symbols to rotate along a line in
> >>>>>> mapserver (4.8.3). Basically we want to get a small triangle
> >>>>>> pointing either 45 degrees or 270 degrees to a line.
> >>>>>>
> >>>>>> We firstly tried using PIXMAPs - but I don;t think its possible to
> >>>>>> rotate these at all (is that true?) plus they do not seem to follow
> >>>>>> the line and always just point 'up'.
> >>>>>>
> >>>>>> So we then tried using some truetype symbols - these follow the line
> >>>>>> - but seem to be rather erratic as to which way they point. We are
> >>>>>> using a small triangle from the webdings.ttf set - and sometimes it
> >>>>>> will point up and sometimes it will point down (but even if its on
> >>>>>> the same section of the line).
> >>>>>>
> >>>>>> Does anyone have any pointers?
> >>>>>>
> >>>>>> Thanks in advance
> >>>>>>
> >>>>>> Stu
> >>>>>
> >>>>> Hi Stu
> >>>>> Well, not sure about that, but sometimes it's hard to have the
> >>>>> symbols exactly where you want. Perhaps you could create a special
> >>>>> layer (point or annotation) to deal with your triangles. It should
> >>>>> then be easier to manipulate. Of course it's extra data, extra code,
> >>>>> extra mapfile parsing and so on but you'll have your symbols where
> >>>>> you want and well rotated. Regards
> >>>>> Blaise
More information about the MapServer-users
mailing list