[OpenLayers-Users] Click on OpenLayers.Feature.Vector

Christoph Lingg christoph at lingg.eu
Thu Feb 25 15:01:42 EST 2010


btw. here is the adapted code example for anyone who might be interested in it:

layer = new OpenLayers.Layer.Vector("layer");
map.addLayers([layer]);

drag = new OpenLayers.Control.DragFeature(layer);
map.addControl(drag);
//drag.activate();
drag.onComplete = function(f) {
    drag.deactivate();
    click.activate();
};

click = new OpenLayers.Control.SelectFeature(
   [layer],
   {
       clickout: true, toggle: false,
       multiple: false, hover: false,
       toggleKey: "ctrlKey", // ctrl key removes from selection
       multipleKey: "shiftKey" // shift key adds to selection
   }
);
map.addControl(click);
layer.events.on({
               "featureselected": function(e) {
                    drag.activate();
                    alert('selected');
               },
               "featureunselected": function(e) {
                    alert('unselected');
               }
           });
click.activate();

ftr = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(1, 2)); // an icon
layer.addFeatures([ftr]);

Am 25.02.2010 um 20:37 schrieb Andreas Hocevar:

> Christoph Lingg wrote:
>> Hi Andreas,
>> thank you for your help!
>> I have alreade tried to use the SelectFeature class. But a strange
>> behaviour appears when combing it with the DragFeature: i can click
>> the feature only once. If i don't use the DragFeature the
>> SelectFeature works like expected. I created a working example of
>> that phenomena, see at the bottom. If you disable the dragFeature the
>> selectFeature works like expected, maybe this is even a bug...?
> 
> Not necessarily a bug, but an annoyance that has to do with the way OpenLayers controls work.
> 
> One proper way to deal with this would be to have the DragFeature control deactivated by default, and activate it in the featureselected handler. In the onComplete callback of the DragFeature control, you can deactivate the DragFeature control and re-activate the SelectFeature control.
> 
> Regards,
> Andreas.
> 
>> Cheers, Christoph
>> layer = new OpenLayers.Layer.Vector("layer"); map.addLayers([layer]);
>> drag = new OpenLayers.Control.DragFeature(layer); map.addControl(drag); drag.activate();
>> click = new OpenLayers.Control.SelectFeature( [layer], { clickout:
>> true, toggle: false, multiple: false, hover: false, toggleKey:
>> "ctrlKey", // ctrl key removes from selection multipleKey: "shiftKey"
>> // shift key adds to selection } ); map.addControl(click); layer.events.on({ "featureselected": function(e) { alert('selected');
>> }, "featureunselected": function(e) { alert('unselected'); } }); click.activate();
>> ftr = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(1,
>> 2)); // an icon layer.addFeatures([ftr]);
>> ----- Original Message ----- From: ahocevar at opengeo.org To:
>> christoph at lingg.eu Date: 25.02.2010 14:36:48 Subject: Re:
>> [OpenLayers-Users] Click on OpenLayers.Feature.Vector
>>> Hi,
>>> you need to create an OpenLayers.Control.SelectFeature instance, configure it with your vector layer, and add it to the map. You can
>>> then listen for the layer's "featureselected" event.
>>> See the [1] example if you need a code snippet. The example does
>>> exactly the same, but on two different layers instead of just one.
>>> Regards, Andreas.
>>> [1]
>>> http://openlayers.org/dev/examples/select-feature-multilayer.html
>>> Christoph Lingg wrote:
>>>> Hello!
>>>> I changed from GoogleMap to OpenLayers, and although I enjoy to
>>>> use the opensource equivalent, sometimes I feel lost in the OL
>>>> documentation ;-)
>>>> Would anyone be so kind and could give me hint how to achieve
>>>> this very low level problem: I have a Vector Layer (I can't use
>>>> marker class as I use the dragging feature as well) to which I
>>>> add some Feature Vector, that are displayed on the map. What I
>>>> need now is triggering an event when a feature was clicked. Very
>>>> basically my code looks like this:
>>>>> layer = new OpenLayers.Layer.Vector("layer"); map.addLayers([layer]); ftr = new OpenLayers.Feature.Vector(new
>>>>> OpenLayers.Geometry.Point(lon, lat), null, styleMarker); // an
>>>>> icon layer.addFeatures([ftr]);
>>>> I tried different approaches that never worked out! What is the
>>>> right way to go?
>>>> Thank you in advance for any help!
>>>> Christoph
>>>> _______________________________________________ Users mailing
>>>> list Users at openlayers.org http://openlayers.org/mailman/listinfo/users
>>> -- Andreas Hocevar OpenGeo - http://opengeo.org/ Expert service
>>> straight from the developers.
> 
> 
> -- 
> Andreas Hocevar
> OpenGeo - http://opengeo.org/
> Expert service straight from the developers.




More information about the Users mailing list