I apply a filter to one layer and works nice. I want to maximize the bounds where I applied the filter, like this:

// mapbounds = array(minx,miny,maxx,maxy)

activeLayer = new OpenLayers.Layer.WMS(
      layername, layerurl,
         width: map.size.w,
         srs: map.projection,
         layers: layername,
         height: map.size.h,
         styles: '',
         format: 'image/png',
         transparent: false

 // for example: conditions = 'igh > 5000 AND BBOX('the_geom,1,2,3,4)'    
         'cql_filter': conditions

bounds = new OpenLayers.Bounds(mapbounds[0],mapbounds[1],mapbounds[2],mapbounds[3]);


The filter works fine, but the zoom is restored too quickly after apply it. It's applied, but the layer restore to the initial view instantly.

What am I doing wrong?

  • 4
    as I said on the mailing list we need to see all the code
    – Ian Turton
    Feb 2, 2011 at 21:56

2 Answers 2


you can use tileloaded or loadend event for firing zoomToExtent method.

activeLayer.events.register("tileloaded", activeLayer, function() {

activeLayer.events.register("loadend", activeLayer, function() {


you can use setTimeout function to make it wait for 5 minute...

function sleep()
  setTimeout(wake, 5000); //wait five seconds then fire the wakeup function

function wakeup()
   map.zoomToExtent(bounds); //  now zoom to extent

i hope it helps you...


Applying a CQL_FILTER to a WMS layer won't change any bounds property's value. A WMS layer is just images. So what you can do is issue a WFS GetFeature request with the same filter in parallel, parse the response and calculate the bounds from the bounds of each feature. Needless to say that this will be terribly slow if your filter result returns more than a few hundred features.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.