[OpenLayers-Users] Destroy/Delete a vector feature

David Fawcett david.fawcett at gmail.com
Tue Dec 16 15:36:41 EST 2008


Thank you Eric!

I am curious, if a feature is not displayed, can it still be selected?

My hope (and guess) is that it can't.  Essentially, is it just not
symbolized, or is it really 'not there'?

David.

On Tue, Dec 16, 2008 at 2:25 PM, Eric Lemoine <eric.c2c at gmail.com> wrote:
> On Tue, Dec 16, 2008 at 7:09 PM, Yves Moisan <yves.moisan at boreal-is.com> wrote:
>>
>>> My first thought is that after the data is loaded, if I could get the
>>> feature by ID or attribute and then destroy it, that would be great.
>>
>> If you get to doing something like that, please share your code :-).
>> I'm trying to do something similar, that is set the state property of
>> the features in my GeoJSON response along the lines of :
>>
>> pts_gps = new OpenLayers.Layer.Vector("GeoJSON", {
>>                                   // styleMap: styleMap,
>>                    strategies: [new OpenLayers.Strategy.BBOX()],
>>                    protocol: new OpenLayers.Protocol.HTTP({
>>                        url: "http://myserver/PGTEST4326/all.json",
>>                        format: new OpenLayers.Format.GeoJSON()
>>                    }),
>>                                        eventListeners: {
>>                    loadend: function(??) {
>>                                        for (var i = 0, var len = pts_gps.features.length; i < len; i++) {
>>                pts_gps.features[i].state = OpenLayers.State.UNKNOWN;
>>                }} }
>>
>>                });
>>
>> and it doesn't work ...
>
> I think you should use the Style framework for this.
>
> Try this:
>
> var tpl = {"display": "${getDisplay}"};
> var ctx = {
>    "getDisplay": function(feature) {
>        // "fid" is the identifier of the feature
>        // to filter out
>        return feature.fid == "fid" ? "none" : "";
>    }
> };
> var style = new OpenLayers.Style(tpl, {
>    "context": ctx}
> );
> var layer = new OpenLayers.Layer.Vector("vec", {
>    styleMap: style
> });
>
> (hmm, this may not work because of a limitation in the Style implementation!)
>
> I see this as an alternative:
>
> var style = new OpenLayers.Style();
> var rule = new OpenLayers.Rule({
>    "symbolizer": {"display": "none"},
>    "filter": new OpenLayers.Filter.FeatureId({
>        "fids": ["fid"]
>    })
> });
> var elseRule = new OpenLayers.Rule({
>    elseFilter: true
> });
> style.addRules([rule, elseRule]);
> var layer = new OpenLayers.Layer.Vector("vec", {
>    styleMap: style
> });
>
>
> This is untested.
>
> Cheers,
>
> --
> Eric
>



More information about the Users mailing list