[OpenLayers-Users] wfs stylemap example?

Ivan Grcic ivan.grcic at geofoto.hr
Thu Jul 31 02:44:23 EDT 2008


"Do you know a
way to just change the color of a feature on "hover" without selecting
it ?  That would be useful......"

Hi Alexandre,

I was wondering about the same funcionality here:
http://openlayers.org/pipermail/dev/2008-July/003183.html

but with featureSelect control thats not possible...I still didnt have
time to look into it, but Eric said that I should create my own
feature handler-based control. Unfortunatly I still dont have enough
knowledge for that, but I think that it maybe could work by using
callback functions in featureSelect control.

var control = new OpenLayers.Control.SelectFeature(vectorLayer, {
	hover: true,
	clickout: false,
	toggle: false,
	multiple: false,
       renderIntent:OpenLayers.Util.extend({},OpenLayers.Feature.Vector.style["select"]),
       //onSelect: addPopup,
       //onUnselect: removePopup,
    callbacks: {
      'over':feature_changeColor, 'out':feature_restoreColor
}
});

And in   'over':feature_changeColor, 'out':feature_restoreColor
functions I would change/restore color of one feature like its
described here:
http://openlayers.org/pipermail/users/2008-July/006586.html

Maybe it will work..dunno for sure. I will try this soon and I let you
know back!

Greets,
Ivan

On Wed, Jul 30, 2008 at 9:33 PM, Alexandre Dube <adube at mapgears.com> wrote:
> Hi Arnd,
>
>    Thanks for very much for your tips.  That works just fine !
>
>    But for my little application it's not really useful.  Do you know a
> way to just change the color of a feature on "hover" without selecting
> it ?  That would be useful for me because I have lines as vector
> features and those are really hard to select by clicking on them.  You
> have to be really precise.
>
>    With a color change, that would be easier to know you can now click
> on it.  And I don't know if that's possible but it would be nice to have
> a bigger "pixel tolerance" when I click.  Any clues about that ?
>
> Arnd Wippermann wrote:
>> Hi Alexandre,
>>
>> i have also tried your example and get it working for me. Also for the
>> 'select' rule mentioned by Todd, but on the modifyFeature control instead on
>> the selectFeature control. I don't know why. Thanks for the example source.
>>
>> To select a feature with hover you can set 'hover' to true for the
>> selectFeature control. See below.
>>
>> It's the first time I tried the options for the selectFeature control in an
>> own application. They work great. Only 'shiftKey' is a bit awksome, because
>> if you don't hit the feature you zoom one level high.
>>
>> Arnd Wippermann
>>
>> part from select-feature.html:
>>
>> drawControls = {
>>     point: new OpenLayers.Control.DrawFeature(
>>         vectors, OpenLayers.Handler.Point
>>     ),
>>     line: new OpenLayers.Control.DrawFeature(
>>         vectors, OpenLayers.Handler.Path
>>     ),
>>     polygon: new OpenLayers.Control.DrawFeature(
>>         vectors, OpenLayers.Handler.Polygon
>>     ),
>>     select: new OpenLayers.Control.SelectFeature(
>>         vectors,
>>         {
>>             clickout: false, toggle: false,
>>             multiple: false, hover: false,
>>             toggleKey: "ctrlKey", // ctrl key removes from selection
>>             multipleKey: "shiftKey" // shift key adds to selection
>>         }
>>     )
>> };
>>
>> for(var key in drawControls) {
>>     map.addControl(drawControls[key]);
>> }
>>
>>
>> -----Ursprüngliche Nachricht-----
>> Von: users-bounces at openlayers.org [mailto:users-bounces at openlayers.org] Im
>> Auftrag von Alexandre Dube
>> Gesendet: Mittwoch, 30. Juli 2008 16:05
>> An: Brenningmeyer, Todd
>> Cc: Users at openlayers.org
>> Betreff: Re: [OpenLayers-Users] wfs stylemap example?
>>
>> Hi Todd,
>>
>>   You're right.  That would be the good way to set a color to a selected
>> feature.  But first I suggest you to pick an other color than blue because
>> it is the default color for "select".
>>
>>   Second, you actually have to select it, like with a selectFeature or
>> modifyFeature control.  By clicking on it, it will change your color.
>> See the example : http://openlayers.org/dev/examples/modify-feature.html
>>
>>   About the "hover" stuff, anybody correct me if I am wrong, but I would try
>> to register an event with "mousemove" that would call the clickFeature
>> function in the selectFeature.js file ( or an other function that does the
>> same thing ).  Instead of having to click on the feature directly, being
>> over it would select it and change its color.
>>
>>   But, that would be annoying because if you would actually want to select
>> it ( and keep it selected ) you would not be able to because as soon as your
>> mouse would not be over it, it would be unselected.
>>
>>   Hope this can be of any help,
>>
>> Brenningmeyer, Todd wrote:
>>
>>> Thanks so much!!! That's just what I was looking for.  My features are now
>>>
>> displaying as I'd hoped.  Is it difficult to extend this to change features
>> that are selected onhover?  I added:
>>
>>> var selrules = [new OpenLayers.Rule({
>>> symbolizer: {strokeColor:"blue",strokeWidth: 2},
>>> elseFilter: true
>>> })];
>>> oStyleMap.styles["select"].addRules(selrules);
>>>
>>> to your .js file but nothing happens when I hover over the points
>>> (it's a bit gawdy but I just wanted to see if it would work).  I think
>>> I need to add a control but haven't tried this before.  Will this
>>> work?  The points aren't currently changing.  Are there additional
>>> considerations that I need to think about.  I'm just trying to port my
>>> old mapserver interface to openlayers and any help is appreciated.
>>> Thanks again, Todd
>>>
>>> -----Original Message-----
>>> From: Alexandre Dube [mailto:adube at mapgears.com]
>>> Sent: Tue 7/29/2008 3:22 PM
>>> To: Brenningmeyer, Todd
>>> Cc: Users at openlayers.org
>>> Subject: Re: [OpenLayers-Users] wfs stylemap example?
>>>
>>> Hi Todd,
>>>
>>> I have some to share. My WFS layer contains line features ( roads )
>>> and they have different color depending on their type ( Local road,
>>> Highway, etc ). I hope this can be of any help :
>>>
>>> ============= otherfile.js =============
>>>
>>> // prepare to style the data
>>> var oStyleMap = new OpenLayers.StyleMap();
>>>
>>> // Array of symbolizer and other values for ROL_CO_CLA attribute //
>>> this will be used to create a html select list and will be used // as
>>> the symbolizer array for the addUniqueValueRules function // sorry,
>>> there's some french words here :) var aRoadType = new Array();
>>> aRoadType = {
>>> AUT: {
>>> text: "Autoroute",
>>> strokeColor: "#ff0000", strokeWidth: 3 },
>>> NAT: {
>>> text: "Nationale",
>>> strokeColor:"#ff8c00", strokeWidth: 2 },
>>> REG: {
>>> text: "Régionale - Reg",
>>> strokeColor:"#ff8c00", strokeWidth: 2 },
>>> COL: {
>>> text: "Régionale - Col",
>>> strokeColor:"#ff8c00", strokeWidth: 2 },
>>> ACC: {
>>> text: "Locale - Acc",
>>> strokeColor:"#d2b48c", strokeWidth: 2 },
>>> LOC: {
>>> text: "Locale - Loc",
>>> strokeColor:"#d2b48c", strokeWidth: 2 },
>>> ACH: {
>>> text: "Chemin forestier - Ach",
>>> strokeColor:"#734c00", strokeWidth: 2 },
>>> MRN: {
>>> text:"Chemin forestier - Mrn",
>>> strokeColor:"#734c00", strokeWidth: 2 } }
>>>
>>> // a style will applies to each drawned vector feature depending on //
>>> the ROL_CO_CLA attribute value. It will match the good value and
>>> applies // the corresponding symbolizers
>>> oStyleMap.addUniqueValueRules("default", "ROL_CO_CLA", aRoadType);
>>>
>>> // If no rules applies to the current vector feature, that means it's
>>> // not a road, but an other type of feature like a circle for drag //
>>> control. The "elseFilter: true" is used to display those vectors.
>>> var rules = [new OpenLayers.Rule({
>>> symbolizer: {strokeColor:"#FF0000",strokeWidth: 2},
>>> elseFilter: true
>>> })];
>>> oStyleMap.styles["default"].addRules(rules);
>>>
>>> ============= yourHTMLFile.html =============
>>>
>>> --- inside your <head> section ---
>>> <script src="otherfile.js"></script>
>>>
>>> --- inside your init() function ---
>>>
>>> OpenLayers.Feature.Vector.style['default']['strokeWidth'] = '2';
>>>
>>> // then some variables... map definition... base layer ... some WMS
>>> layers ... and :
>>>
>>> olWFSRoads = new OpenLayers.Layer.WFS( "Roads - WFS", sMSURL, {
>>> typename: "roads", map: sMapPath }, { extractAttributes: true,
>>> minScale: 49999,
>>> typename: "roads", styleMap: oStyleMap } );
>>>
>>> // then addlayers, controls, etc. and your <body>
>>>
>>> Brenningmeyer, Todd wrote:
>>>
>>>
>>>> Hello,
>>>> Does anyone have an example code snippet that shows how to use a stylemap
>>>>
>> with wfs data that is being served as vectors (I'm trying to serve up
>> points).  I've been trying to get this to work using some of the examples on
>> the wiki but I can't quite get the syntax to work properly.  If anyone has
>> ideas or an example that would be great.
>>
>>>> Thanks,
>>>> Todd
>>>> _______________________________________________
>>>> Users mailing list
>>>> Users at openlayers.org
>>>> http://openlayers.org/mailman/listinfo/users
>>>>
>>>>
>>>>
>>>
>>>
>>
>>
>> --
>> Alexandre Dubé
>> Mapgears
>> www.mapgears.com
>>
>> _______________________________________________
>> Users mailing list
>> Users at openlayers.org
>> http://openlayers.org/mailman/listinfo/users
>>
>>
>
>
> --
> Alexandre Dubé
> Mapgears
> www.mapgears.com
>
> _______________________________________________
> Users mailing list
> Users at openlayers.org
> http://openlayers.org/mailman/listinfo/users
>



More information about the Users mailing list