Rotating a symbol/layer drawn with PointObj
Peter Freimuth
pf at MAPMEDIA.DE
Thu Jun 30 03:49:34 PDT 2005
Kasey Kirkham schrieb:
> Hello,
>
> Long, long ago, I posted to this forum asking for guidance on drawing
> a point layer(
> http://mapserver.gis.umn.edu/data2/wilma/mapserver-users/0403/msg00562.html
> ). Thanks to the help of the folks on this list, I was able to get
> the application working. First off, I created a layer for each symbol
> I wanted to use(in the mapfile, see below). The php app which uses
> the mapfile will create a new PointObj for each coordinate returned by
> a query, look up the name of the symbol layer associated with the gps
> source, then call PointObj->draw with the layer as an argument(see my
> equally inscrutable code fragment below). This works nicely for
> drawing dots on the map, however there is now a new twist. I would
> like to use triangular symbols in my layer, rotated relative to the
> point which follows. For instance, if the first coordinate was (1,1),
> and the second was (5,1), I would like to rotate the first symbol to
> the right by 90 degrees so that it is "pointing" at the second
> symbol. I think labels support this with the "angle" attribute, but I
> didn't find anything in the documentation indicating that
> points/symbols could be rotated in the same way. Any ideas?
>
> A million thanks!
> Kasey
>
> # mapfile fragment:
>
> # LAYER object
> LAYER
> NAME "point_mapping-red"
> TYPE POINT
> STATUS ON
> # CLASS object
> CLASS
> NAME "points_red"
> SYMBOL "gps_coordinate-red"
> COLOR 255 0 0
> # LABEL object
> LABEL
> POSITION CC
> SIZE TINY
> MINDISTANCE 400
> MINFEATURESIZE 5
> COLOR 255 255 255
> PARTIALS FALSE
> END
> END
> END
>
> // php fragment:
> // retrieve associative array of gps coordinates
> $point_array = $currObjUnit->get_gps_coordinates();
> // loop through array
> foreach($point_array as $arPoints) {
> // get a new point object
> $pointObj_coord1 = ms_newPointObj();
> // set the X and Y coords
> $pointObj_coord1->setXY($arPoints["longitude"],
> $arPoints["latitude"]);
>
> // $map is returned by ms_newMapObj()
> // $currObjUnit->get_unit_symbol retrieves the LAYER NAME
> attribute for the layer indicated in the unit config(ie
> "point_mapping-red" in this case)
> $layerObj_imageSymbol =
> $map->getLayerByName($currObjUnit->get_unit_symbol());
>
> $class_index = 0;
> // draw the point
> // $map is a MapObj, $image is the image object returned by
> $map->draw
> $pointObj_coord1->draw($map, $layerObj_imageSymbol, $image,
> $class_index, '');
> }
>
Dear Kasey,
we have implemented this function for rotating symbols by an angle
attribute a while ago but the code is still not included in the current
code base. I will send the regarding code next week to Steve Lime (main
developer team). Maybe it can be integrated in the next mapserver
release. Sorry for the delay!
Peter
--
Mit freundlichem Gruß
Peter Freimuth
MapMedia
Kartographie und raumbezogene Informationssysteme
Heilbronner Straße 10
D-10711 Berlin Charlottenburg
fon: +49.(0)30.89 06 82 70
fax: +49.(0)30.89 06 82 73
mail: pf at mapmedia.de
net: www.mapmedia.de
pgp: on demand
_________________________________________________
More information about the MapServer-users
mailing list