2010/3/2 Alexandre Dube <[email protected]>: > Olivier, > > The way to defined your "default" symbolizer with the applyDefaults method > is correct, but you didn't do so with your "select" symbolizer. In order for > a point to be drawn, it needs more than these two properties (like > pointRadius for example). Try using applyDefaults there too. > > Then, remove the style from your point features too. In order for a feature > to change style automatically when selected, it has to be done with the > StyleMap or manually. If you set a symbolizer (style) directly to your > feature, that's the only style it's going to have regardless of any stylemap > defined. > > // are you saying that with this, points don't show at all when unselected ? > Normally, it shouldn't. > var feature = new OpenLayers.Feature.Vector(point); > > Kind regards, > > Alexandre > > > Olivier THIERRY wrote: >> >> Hi, >> >> I have to draw routes on a map. I need points for the steps of the >> route and lines between the steps. >> I could make it work, but now I need to highlight these lines and points. >> Actually I need to change the colour of either lines or points when >> they are selected in a list outside the map or clicked on the map. >> >> To do this, I added a SelectFeature control to the layer containing the >> routes. >> >> I could make it work for lines by adding the following style map to >> the routes layer : >> >> var symbolizer = OpenLayers.Util.applyDefaults( >> { >> fillColor: "#0000FF" >> , strokeColor: "#2A2AFF" >> , strokeWidth: 2 >> } >> , OpenLayers.Feature.Vector.style["default"]); >> >> var styles = new OpenLayers.StyleMap({ >> "default": symbolizer, >> "select": { >> fillColor: "red" >> , strokeColor: "red" >> } >> }); >> >> But I can't make it work with points. >> >> I create the points this way : >> >> var point = new OpenLayers.Geometry.Point(lon, lat, 0); >> point.transform(map.displayProjection, map.projection); >> var styleSite = OpenLayers.Util.extend({}, >> OpenLayers.Feature.Vector.style['default']); >> styleSite.strokeColor = "blue"; >> styleSite.fillColor = "blue"; >> styleSite.pointRadius = 3; >> styleSite.strokeLinecap = "square"; >> var feature = new OpenLayers.Feature.Vector(point, null, styleSite); >> >> The points display OK, but colour doesn't change when I select the point. >> I think my problem deals with style, but I can't find what is wrong. >> Note I had to set the style for point vector. If I don't do this, it >> doesn't diplay. I find this strange since I don't need to do this for >> line feature ! >> >> Any idea what I did wrong ? >> >> Regards, >> >> Olivier >> _______________________________________________ >> Users mailing list >> [email protected] >> http://openlayers.org/mailman/listinfo/users >> > > > -- > Alexandre Dubé > Mapgears > www.mapgears.com > >
For what I understood, when you define a "default" style, other styles extend this default style. So when defining a "select" style for example, you just have to set the style attributes that you want to be different from default style. And it works very well indeed. I read this there : http://trac.openlayers.org/wiki/Styles#UsingPropertyStyles Anyway, I just found where my problem comes from. Actually I use rules with my style map, this way : var lookupSens = { "aller": {strokeDashstyle: "solid"}, "retour": {strokeDashstyle: "dash"} }; styles.addUniqueValueRules("default", "sens", lookupSens); This rule helps me to have a different style for journey and return journey. But since it has no sense for points (just for lines), I don't have the "sens" property on the point I add to the layer, and it looks like it causes some problems ! If I remove this rule, the points print OK. But I really need this rule, so I can't remove it. Do you know if there is a way to tell OpenLayers to apply the rule only for some elements of the layer ? Or another workaround for this ? Regards, Olivier _______________________________________________ Users mailing list [email protected] http://openlayers.org/mailman/listinfo/users
