[OpenLayers-Dev] hidden but selectable features

Pierre GIRAUD bluecarto at gmail.com
Tue Jan 27 09:32:16 EST 2009


Hi all,

Here's a project use case : I have features in a vector layer in a map
and corresponding rows in an Ext grid. I want some of those features
to be hidden on the map. However, I want them all to be selectable in
the grid.
If a feature is selected in the grid, I want it to be shown as
selected on the map too, even it is was previously hidden.

In order to achieve this, I took advantage of the styleMap
uniquevaluerules and a specific lookup omitting the values for the
hidden features.

It was working well until r8620 [1]. The features are still hidden,
but selecting them programmatically has no effect.

I could have used lookup properties with empty style definition, but
hidden features are then selectable on the map, which I don't want.

I put some code (enclosed) to reproduce if someone wants to give it a look.

Help appreciated.

Regards,
Pierre



[1] http://trac.openlayers.org/changeset/8620

------------------------------------------------
function init(){
            map = new OpenLayers.Map('map', {maxResolution:'auto'});
            var wms = new OpenLayers.Layer.WMS( "OpenLayers WMS",
                "http://labs.metacarta.com/wms/vmap0", {layers: 'basic'} );
            map.addLayer(wms);
            map.setCenter(new OpenLayers.LonLat(0, 0), 0);

            var styleMap = new OpenLayers.StyleMap();

            // create a lookup table with different symbolizers for
the different
            // state values
            var lookup = {
                'shown': {fillColor: "green"}
            };

            styleMap.addUniqueValueRules("default", "visibility", lookup);

            layer = new OpenLayers.Layer.Vector('Points', {
                styleMap: styleMap
            });
            map.addLayer(layer);

            var feature = new OpenLayers.Feature.Vector(
                new OpenLayers.Geometry.Point(0, 0),
                {visibility: 'shown'}
            );
            layer.addFeatures([feature]);
            var feature = new OpenLayers.Feature.Vector(
                new OpenLayers.Geometry.Point(0, 10),
                {visibility: 'hidden'}
            );
            layer.addFeatures([feature]);

            selectControl = new OpenLayers.Control.SelectFeature(layer);
            map.addControl(selectControl);

            selectControl.select(layer.features[0]);
            selectControl.select(layer.features[1]);
        }
----------------------------------



More information about the Dev mailing list