[OpenLayers-Users] Overriding url for Vector layer

Andreas Hocevar ahocevar at opengeo.org
Tue Jul 7 11:36:09 EDT 2009


Hi,

Adrian Popa wrote:
> I'm trying to display a vector layer (feed data as KML) and I'm trying 
> to dynamically set some variables that are sent server-side for 
> processing.
> The layer definition is the following:
> locations = new OpenLayers.Layer.Vector("Alarm Locations", {
>                         projection: map.displayProjection, 
> minResolution: 1, maxResolution: 38,
>                         strategies: [new OpenLayers.Strategy.BBOX()],
>                         protocol: new OpenLayers.Protocol.HTTP({ *url: 
> "kml_locations.pl"*, format: new OpenLayers.Format.KML({ extractStyles: 
> true, extractAttributes: true })})});
> map.addLayer(locations);
> On some event (button pressed) I use a javascript function to replace 
> the "url" value from the layer definition with a url similar to: 
> "kml_locations.pl?key1=value1&key2=value2". After this I call 
> *layer.refresh({force: true});
>
> *From analysing the traffic to the web server I can see that the layer 
> refresh is called on the old url value (kml_locations.pl) even if the 
> attribute locations.protocol.url is set to the value I imposed.
>
> My question is: when the layer is refreshed - which URL is used (is 
> there a cached value)? Can this be overwritten? Or do I need to create 
> a new Protocol object?

It is much simpler than you may think. Obviously your url stays the same 
(kml_locations.pl), only your params change (key1=value1, key2=value2). 
So you do not need to change the url at all. All you have to do is

layer.refresh({
    force: true,
    params: {
        key1: "value1",
        key2: "value2"
    }
});

Regards,
Andreas.

-- 
Andreas Hocevar
OpenGeo - http://opengeo.org/
Expert service straight from the developers.




More information about the Users mailing list