3

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)'    
 activeLayer.mergeNewParams({
         'cql_filter': conditions
      });

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

map.zoomToExtent(bounds);

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 '11 at 21:56
1

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

activeLayer.events.register("tileloaded", activeLayer, function() {
map.zoomToExtent(bounds);
});

activeLayer.events.register("loadend", activeLayer, function() {
map.zoomToExtent(bounds);
});

OR

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...

1

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, privacy policy and cookie policy

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