[OpenLayers-Users] How to use more than one 'SelectFeature' controls

Eric Lemoine eric.c2c at gmail.com
Tue Jun 17 02:05:15 EDT 2008


Hi. Feature selection doesn't work with multiple layers. As you
mentioned only the layer on the top will work. See ticket 434. For
now, if possible, you'll have to put everything in the same vector
layer. Eric

2008/6/17, hz20040 <hz20040 at 126.com>:
> Dear List!
>
> I have got a problem about 'SelectFeature' control.
> There are two gml layers.I want to use two 'SelectFeature' to select them.
> But I found only the SelectFeature control which's gml layer is added last
> will work.
>
> In the code,if I use myMap.addLayers([gmlLayer1,gmlLayer2]),the gml2Control
> will
> work well,but gml1Control will not work. If I use
> myMap.addLayers([gmlLayer2,gmlLayer1]), the gml1Control will work well,but
> gml2 not.
>
> It looks like which gml layer is added last , the select control to it will
> work.
> Can I use more then one 'SelectFeature' controls to more then one gml
> layers?
>
> Thank you !
>
>
> My code is:
>
>         function init()
>         {
>          myMap = new OpenLayers.Map('map3d');
>             var opt= {numZoomLevels:1};
>             var graphic = new OpenLayers.Layer.Image(
>                                 'name',
>                                 '/Images/Maps/chunxi.jpg',
>                                 //new OpenLayers.Bounds(-450, -289, 450,
> 289),
>                                 new OpenLayers.Bounds(-320, -240, 320, 240),
>                                 new OpenLayers.Size(1600, 1200),
>                                 opt);
>
>             var userstyle =  OpenLayers.Util.extend({},
> OpenLayers.Feature.Vector.style['userselect']);
>
>
>             //add an image layer
>             myMap.addLayers([graphic]);
>
>            //one gml layer
>             var gmlOption = {
>                 style:userstyle
>             };
>             var gmlLayer1= new OpenLayers.Layer.GML("GML1",
> "url",gmlOption);
>
>
>            //another gml layer
>            var toolTipsOption = {
>                 //style:userstyle
>            };
>            var gmlLayer2 = new
> OpenLayers.Layer.GML("GML2","url",toolTipsOption);
>
>            myMap.addLayers([gmlLayer2,gmlLayer1]);
>           // myMap.addLayers([gmlLayer1,gmlLayer2]);
>
>
>             //one SelectFeature control:gml1Control
>             gml1Control = new OpenLayers.Control.SelectFeature(gmlLayer1,
>                 {onSelect: onFeatureSelect,
>                 onUnselect:onFeatureUnselect,
>                  hover:false
>              });
>             myMap.addControl(gml1Control);
>             gml1Control.activate();
>
>            //another SelectFeature control:gml2Control
>            gml2Control = new OpenLayers.Control.SelectFeature(gmlLayer2,
>                 {
>                     onSelect:onToolTipsFeatureSelect,
>                     onUnselect:onToolTipsFeatureUnselect,
>                     hover:false
>                 }
>            );
>            myMap.addControl(gml2Control );
>            gml2Control.activate();
>
>            myMap.setCenter(new OpenLayers.LonLat(0, 0), 1);
>            myMap.zoomToMaxExtent();
>
>
>     }
>
>     function onToolTipsFeatureSelect(feature)
>     {
>         alert("onToolTipsFeatureSelect");
>     }
>
>     function onToolTipsFeatureUnselect(feature)
>     {
>         alert("onToolTipsFeatureUnselect");
>     }
>
>     function onFeatureSelect(feature)
>     {
>         alert("onFeatureSelect");
>     }



More information about the Users mailing list